卷積濾波核的設計

轉載自:https://blog.csdn.net/xue_csdn/article/details/99077718

參考:https://www.cnblogs.com/zongfa/p/9130167.html

卷積核就是一個二維mxm矩陣。二維圖像與二維矩陣卷積之後的結果,就實現了對圖像的濾波。

卷積核一般有以下一些規則:

  • m的大小應該是奇數,這樣它纔有一箇中心,例如3x3,5x5或者7x7。有中心了,也有了半徑的稱呼,例如5x5大小的核的半徑就是2。
  • 矩陣所有元素之和一般等於1。如果和大於1,那麼濾波後的圖像就會比原圖像更亮,反之,如果小於1,那麼得到的圖像就會變暗。如果和爲0,圖像不會變黑,但也會非常暗。
  • 對於濾波後的結構,可能會出現負數或者大於255的數值。對這種情況,我們將他們直接截斷到0和255之間即可。對於負數,也可以取絕對值。這與代碼中參數設置有關。

上面說到,對圖像的濾波處理就是對圖像應用一個小小的卷積核。卷積核的內部結構不同,圖像的處理效果也就完全不同。

1. 與原圖一樣的效果

卷積核:
在這裏插入圖片描述
得到的圖像和原圖是一樣的。因爲只有中心點的值是1。鄰域點的權值都是0,對濾波後的取值沒有任何影響。

2. 圖像銳化

圖像的銳化和邊緣檢測很像,首先找到邊緣,然後把邊緣加到原來的圖像上面,這樣就強化了圖像的邊緣。也就是在邊緣檢測濾波器的基礎上,再在中心的位置加1,這樣濾波後的圖像就會和原始的圖像具有同樣的亮度了,但是會更加銳利。銳化濾波器實際上就是計算當前點和周圍點的差別,然後將這個差別加到原來的位置上。
在這裏插入圖片描述
下邊的濾波器更加強調邊緣:
在這裏插入圖片描述
3. 邊緣檢測

找水平邊緣(0度):
在這裏插入圖片描述
找垂直邊緣(90度):
在這裏插入圖片描述
找45度邊緣:
在這裏插入圖片描述
找135度邊緣:
在這裏插入圖片描述
4. 浮雕效果

浮雕濾波器可以給圖像一種3D陰影的效果。只要將中心一邊的像素減去另一邊的像素就可以了。這時候,像素值有可能是負數,我們將負數當成陰影,將正數當成光,然後我們對結果圖像加上128的偏移。這時候,圖像大部分就變成灰色了。

45度浮雕效果:
在這裏插入圖片描述
增大濾波器,得到更誇張的效果:
在這裏插入圖片描述
5. 運動模糊

135度角的模糊,
在這裏插入圖片描述
均值模糊:
在這裏插入圖片描述
自定義內核對圖像做卷積:

C++:

#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
 
int main()
{
	//system("color 02");
	//讀取原圖
	cv::Mat src = cv::imread("xxxxxxxxxx.jpg");//圖像路徑
	//自定義內核
	cv::Mat kernel = (cv::Mat_<float>(3, 3) << 1, 1, 1,
				                1, -7, 1,	
				                1, 1, 1);
	cv::Mat dst;
	//卷積操作
	cv::filter2D(src, dst, src.depth(), kernel);
 
	cv::namedWindow("dst", CV_WINDOW_NORMAL);
	cv::imshow("dst", dst);
	cv::waitKey();
 
    return 0;
}

Python:

import cv2
import numpy as np
img = cv2.imread('1-test.jpg',cv2.IMREAD_GRAYSCALE) #提取圖像灰度值

kernel = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1])) #定義核
result = cv.filter2D(img,-1,kernel)
cv2.imshow('result.jpg', result)
cv2.waitKey()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章