OpenCV图像锐化/增强
OpenCV圖像銳化/增強
0.綜述
1.Laplacian高通濾波算子
2.Laplacian銳化代碼實踐
3.USM銳化增強算法
4.USM代碼實踐
0.綜述
圖像的卷積計算除了可以完成我們前面介紹的模糊去噪、邊緣檢測等任務外,還可以實現圖像銳化/增強的功能。
圖像銳化是一種突出和加強圖像中景物的邊緣和輪廓的技術。在圖像中,邊緣可以看作是位于一階導數較大的像素位置,因此可以通過求圖像的一階導數來加強圖像的邊緣。同樣我們也可以通過求圖像的二階導數來完成圖像銳化。一般也通過Laplacian濾波加原圖權重像素疊加,關于Laplacian算子可以參考下面這篇博客:
https://blog.csdn.net/PecoHe/article/details/95080569
1.Laplacian高通濾波算子
常用的Laplacian高通濾波算子有:
H1=????1?1?1?1c?1?1?1?1??? H_1=\left[\begin{matrix}-1 & -1 & -1 \\-1 & c & -1\\-1 & -1& -1 \end{matrix}\right]
H?
1
??? ?
?=?
?
?
??? ?
??
?1
?1
?1
??? ?
??
?1
c
?1
??? ?
??
?1
?1
?1
??? ?
??
?
?
??? ?
?
當c大于8的時候表示圖像銳化,越接近8表示銳化效果越好。
當c等于8的時候表示對圖像進行高通濾波。
當c值越大的時候,圖像銳化效果在減弱,中心像素值的作用在提升。
H2=???0?10?15?10?10??? H_2=\left[\begin{matrix}0 & -1 & 0\\-1 &5 & -1\\0 & -1& 0 \end{matrix}\right]
H?
2
??? ?
?=?
?
?
??? ?
??
0
?1
0
??? ?
??
?1
5
?1
??? ?
??
0
?1
0
??? ?
??
?
?
??? ?
?
2.Laplacian銳化代碼實踐
?? ?Mat h1_kernel = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1);
?? ?Mat h2_kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
?? ?
?? ?Mat h1_result,h2_result;
?? ?filter2D(input, h1_result, CV_32F, h1_kernel);
?? ?filter2D(input, h2_result, CV_32F, h2_kernel);
?? ?convertScaleAbs(h1_result, h1_result);
?? ?convertScaleAbs(h2_result, h2_result);
?? ?imshow("h1_result", h1_result);
?? ?imshow("h2_result", h2_result);
運行結果:
3.USM銳化增強算法
USM(Unshrpen Mask)算法是對原圖像先進行一個高斯濾波,然后用原來的圖像像素值減去一個系數乘以高斯濾波后的圖像像素值,然后把得到的像素值歸到0~255范圍內。USM銳化增強算法可以去除一些細小的干擾細節和圖像噪聲,比一般直接使用卷積銳化算子得到的圖像更可靠。
USM銳化公式如下:
原圖像?w?高斯濾波(原圖像)/(1?w) 原圖像-w*高斯濾波(原圖像)/(1-w)
原圖像?w?高斯濾波(原圖像)/(1?w)
其中w為上面所述的系數,取值范圍為0.1~0.9,一般取0.6。
4.USM代碼實踐
這里介紹一下OpenCV中的addWeighted函數:
void addWeighted(InputArray src1,?
?? ??? ??? ??? ? double alpha,?
?? ??? ??? ??? ? InputArray src2,
? ? ? ? ? ? ? ? ?double beta,?
? ? ? ? ? ? ? ? ?double gamma,?
? ? ? ? ? ? ? ? ?OutputArray dst,?
? ? ? ? ? ? ? ? ?int dtype = -1);
其中src1,src2分別為兩個輸入圖像,alpha是輸入圖像1的權重,beta是輸入圖像2的權重,gamma是輸入輸出圖像作和后添加的數值,該值不要太大。
?? ?Mat blur,usm;
?? ?GaussianBlur(input, blur, Size(0, 0), 25);
?? ?addWeighted(input, 1.5, blur, -0.5, 0, usm);
?? ?imshow("usm", usm);
運行結果如下:
總結
以上是生活随笔為你收集整理的OpenCV图像锐化/增强的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#和c++的opencv位图数据参数互
- 下一篇: kong 启动报错 could not