影像濾波演算法整理--均值、中值、高斯、拉普拉斯運算元、梯度運算元:
首先分為平滑空間濾波器和銳化空間濾波器來進行介紹。平滑空間濾波器主要用於模糊處理和降低噪聲,主要兩類:均值濾波器和中值濾波器。銳化空間濾波器主要是:拉普拉斯運算元和梯度運算元。
一、均值濾波方法:對高斯噪聲的抑制效果較好。
假設我們有一個3*3的模板,係數全為1,那麼欲求的中心點畫素值就是以該模板為中心的9個畫素的平均值來代替。根據定義可知,該濾波器具有模糊邊緣的負面效應。通過空間均值處理來模糊影像,可以突出感興趣的物體,即將部分影像融入背景中 ,部分影像‘突出顯示’出來,達到平滑影像的作用,重點理解平滑對於影像的意義。
MATLAB程式碼:
set(gca,'Fontname','Monospaced');
I=imread('a.tif');
subplot(231),imshow(I), title('origin image');
%I=rgb2gray(I);
%I1=imnoise(I,'salt & pepper',0.02);
%subplot(2 3 2)
%imshow(I1)
%title('新增椒鹽噪聲的影像');
I1 = I;
k1=filter2(fspecial('average',3),I1)/255; %進行3*3模板平滑濾波
k2=filter2(fspecial('average',5),I1)/255; %進行5*5模板平滑濾波
k3=filter2(fspecial('average',7),I1)/255; %進行7*7模板平滑濾波
k4=filter2(fspecial('average',9),I1)/255; %進行9*9模板平滑濾波
k5=filter2(fspecial('average',15),I1)/255; %進行15*15模板平滑濾波
subplot(232),imshow(k1);title('3*3 smoothing filtering');
subplot(233),imshow(k2);title('5*5 smoothing filtering');
subplot(234),imshow(k3);title('7*7 smoothing filtering');
subplot(235),imshow(k4);title('9*9 smoothing filtering');
subplot(236),imshow(k5);title('15*15 smoothing filtering');
結果:可以看出,在模板逐漸擴大的過程中,影像的鋸齒邊緣被模糊掉,顆粒狀的噪聲也沒有了,達到了我們想要的效果,但是在9*9甚至更大的模板,影像開始失真,影像過度模糊了。所以我們在影像平滑的時候,要選最佳的模板尺寸。
二、中值濾波方法:對椒鹽噪聲的抑制效果較好。
中值濾波器是一種統計排序濾波器,即影像畫素等於周圍畫素排序後的中值,加入模板為3*3,則目標點的畫素等於排序後的第五個畫素的值。中值濾波器特別適用於椒鹽噪聲。由定義知,中值濾波器對於孤立點特別敏感,還可以保持影像的邊緣特性。由中值濾波擴充套件出來的還有最大值濾波器和最小值濾波器。
MATLAB程式碼:
%=======second part======
I = imread('book_XRaySalt.tif');
subplot(131),imshow(I);title('原椒鹽噪聲影像');
k1=filter2(fspecial('average',3),I)/255; %進行3*3模板平滑濾波
k2=medfilt2(I,[3,3]); %進行3*3模板中值濾波
subplot(132),imshow(k1);title('3*3模板均值濾波');
subplot(133),imshow(k2);title('3*3模板中值濾波');
I(100:110,100:110),
k2(100:110,100:110),
結果:
三、高斯濾波方法:
高斯濾波器是利用高斯核與輸入影像的每個點進行卷積。提到高斯,就想到‘草帽’,更能記住它。高斯濾波器是一種平滑線性濾波器,使用高斯濾波器對影像進行濾波,其效果是降低影像灰度的“尖銳”變化,也就是使影像“模糊”了。高斯濾波對於抑制服從正態分佈的噪聲效果非常好,其代價是使影像變得“模糊”。當然,有時對影像進行平滑濾波的目的就是讓影像變得模糊。
一維高斯分佈函式: 二維高斯分佈函式:
它們的影像分別為:
其3*3與5*5的卷積核對應如下:
MATLAB實現:
img = imread('lena.tif');
w = fspecial('gaussian',[5,5],0.5);
%replicate:影像大小通過賦值外邊界的值來擴充套件
%symmetric 影像大小通過沿自身的邊界進行映象對映擴充套件
I = imfilter(img,w,'replicate');
subplot(1,2,1);title('原影像');imshow(img);
subplot(1,2,2);title('高斯濾波後的影像');imshow(I);
從結果可以看出,影像整體模糊平滑了,特別是頭髮和帽子部分,是影像的尖銳變化被降低了吧。
參考影像銳化(增強)和邊緣檢測:https://blog.csdn.net/mghhz816210/article/details/37820483
四、拉普拉斯演算法進行影像銳化
拉普拉斯運算元是一種二階微分運算元,其強調的是影像中灰度的突變,通過將原影像和拉普拉斯影像加在一起,可以達到銳化影像的作用,最終在保留影像的背景資訊的前提下從而突出細節。拉普拉斯銳化模板在邊緣檢測中非常有用。因為影像的邊緣就是那些灰度跳變厲害的的區域。
拉普拉斯運算元模板:
實現程式碼:
%=============================================================
f=imread('moon.jpg');
subplot(2,3,1),imshow(f);
title('原影像');
w4=fspecial('laplacian',0),
g1=imfilter(f,w4,'replicate');
subplot(2,3,2),imshow(g1); title('拉普拉斯模板濾波後的影像');
f2=im2double(f);%將f轉換歸一化的double類影像,然後進行濾波
g2=imfilter(f2,w4,'replicate');
% imshow(img,[low high]) [low high]用於指定影像顯示的灰度範圍 對於double資料認為是0-1範圍內
subplot(2,3,3),imshow(g2,[]); title('含有負值的濾波結果');
g=f2-g2;
subplot(2,3,4),imshow(g);title('原圖-含有負值的濾波結果');
%w8=[0 1 0;1 -4 1;0 1 0],
w8=[1 1 1;1 -8 1;1 1 1],
g8=f - imfilter(f,w8,'replicate');
subplot(2,3,5),imshow(g8);title('對角線中心為8的拉普拉斯模板');
%=============================================================
五、梯度運算元進行影像銳化
相比於拉普拉斯二階微分運算元,梯度運算元一一階微分運算元,更為簡單。其實個人覺得,把梯度運算元放在‘ 邊緣檢測’更為合適。
f(x,y)在X方向和Y方向的梯度:
經典模板:
車道線檢測之-sobel運算元邊緣檢測原理:https://blog.csdn.net/aiailab/article/details/82849158
程式碼實現:
程式碼中增加註釋,很詳細的介紹了求梯度運算元銳化的過程。
% soble algorithm
% ZhangFL at SWPU 2017.04.26
% Sobel運算元中的垂直模板得到的梯度圖,由於梯度方向與邊緣走向垂直,所以該梯度圖對水平邊緣有較強的響應,從而水平細節資訊非常清晰。
% sobel運算元中的水平模板得到的梯度圖,它對垂直邊緣有較強的響應,垂直細節非常清晰。
% Sobel運算元水平和垂直方向疊加的梯度圖,水平和垂直細節都非常清晰。
A=imread('house.tif');
%I=rgb2gray(A);
I=A;
subplot(2,2,1);
imshow(I);
title('原圖');
k2=filter2(fspecial('average',5),I)/255; %進行5*5模板平滑濾波
I=k2;
hx=[-1 -2 -1;0 0 0 ;1 2 1], %產生sobel垂直梯度模板
hy=hx', %產生sobel水平梯度模板
gradx=filter2(hx,I,'same');
gradx=abs(gradx); %計算影像的sobel垂直梯度
subplot(2,2,2);
imshow(gradx,[]);
title('影像的sobel垂直梯度');
grady=filter2(hy,I,'same');
grady=abs(grady); %計算影像的sobel水平梯度
subplot(2,2,3);
imshow(grady,[]);
title('影像的sobel水平梯度');
grad=gradx+grady; %得到影像的sobel梯度
subplot(2,2,4);
imshow(grad,[]);
title('影像的sobel梯度(使用5*5模板平滑濾波)');
相關文章
- OpenCV計算機視覺學習(4)——影像平滑處理(均值濾波,高斯濾波,中值濾波,雙邊濾波)OpenCV計算機視覺
- Python 影像處理 OpenCV (12): Roberts 運算元、 Prewitt 運算元、 Sobel 運算元和 Laplacian 運算元邊緣檢測技術PythonOpenCV
- [Python影象處理] 四.影象平滑之均值濾波、方框濾波、高斯濾波及中值濾波Python
- spark-運算元-分割槽運算元Spark
- 運算元
- 使用運算元控制公式運算公式
- Python 影像處理 OpenCV (9):影像處理形態學開運算、閉運算以及梯度運算PythonOpenCV梯度
- RDD運算元
- 【OpenCV】鄰域濾波:方框、高斯、中值、雙邊濾波OpenCV
- 【Spark篇】---SparkStreaming中運算元中OutPutOperator類運算元Spark
- Python 影像處理 OpenCV (13): Scharr 運算元和 LOG 運算元邊緣檢測技術PythonOpenCV
- 運算元據庫
- python運算元據Python
- JavaScript運算元組JavaScript
- 影像處理領域的加速運算元收集
- 運算元據庫表
- MySQL DML運算元據MySql
- jmeter運算元據庫JMeter
- DDL:運算元據庫
- onnx 運算元定義
- 什麼是運算元?
- Flink -- Operator操作運算元
- SIFT運算元總結
- 演算法 | 數字影像處理之「中值濾波」演算法
- 遺傳演算法的改進——跳出區域性最優機制的研究(選擇運算元、交叉運算元、變異運算元的改進)演算法
- Spark常用Transformations運算元(一)SparkORM
- Python運算元據庫(3)Python
- Oracle OCP(10):運算元據Oracle
- sobel運算元,matlab實現Matlab
- 3.0 常見operators運算元
- [Python影象處理] 九.形態學之影象開運算、閉運算、梯度運算Python梯度
- 高通濾波法、微分運算元法、神經網路方法實現邊緣檢測神經網路
- js 方法(運算元組為主JS
- 利用 Sequelize 來運算元據庫
- spark一些常用運算元Spark
- Ascend C 自定義PRelu運算元
- 三元運算+包機制
- 深入淺出PyTorch(運算元篇)PyTorch