點擊下方卡片,關注「新機器視覺」公眾號
重磅乾貨,第一時間送達
圖1圖像銳化示意圖
下面開始介紹運用一階微分和二階微分運算來進行圖像邊緣檢測的原理。
圖2邊緣類型
1.1.一階微分邊緣檢測

































圖4突變型細節
圖5細線型細節
圖6漸變型細節
2.Sobel邊緣檢測與銳化的實現2.1.Sobel邊緣檢測算法理論
圖12Sobel算子模板



圖13Sobel邊緣檢測
圖14Sobel銳化
2.2.Sobel邊緣檢測Matlab實現% 灰度圖像Sobel邊緣檢測算法實現
% IMG為輸入的灰度圖像
% Q為輸出的灰度圖像
function Q = Sobel_Edge_Detector(IMG)
[h,w] = size(IMG);% 獲取圖像的高度h和寬度w
Q = zeros(h,w);% 初始化Q為全0的h*w大小的圖像
% -------------------------------------------------------------------------
%WxWyPixel
% [-1-2-1][+10-1][P1P2P3]
% [000][+20-2][P4P5P6]
% [+1+2+1][+10-1][P7P8P9]
Wx = [-1,-2,-1;0,0,0;1,2,1];% Weight x
Wy = [1,0,-1;2,0,-2;1,0,-1];% Weight y
IMG = double(IMG);
for i = 1 : h
forj = 1 : w
if(i<2|| i>h-1 || j<2 || j>w-1)
Q(i,j)= 0;% 邊緣像素不處理
else
%Gx = sum(Wx.*IMG(i-1:i+1,j-1:j+1),'all');
Gx= Wx(1,1)*IMG(i-1,j-1) + Wx(1,2)*IMG(i-1,j) + Wx(1,3)*IMG(i-1,j+1) +...
Wx(2,1)*IMG(i,j-1)+ Wx(2,2)*IMG(i,j) + Wx(2,3)*IMG(i,j+1) +...
Wx(3,1)*IMG(i+1,j-1)+ Wx(3,2)*IMG(i+1,j) + Wx(3,3)*IMG(i+1,j+1);
%Gy = sum(Wy.*IMG(i-1:i+1,j-1:j+1),'all');
Gy= Wy(1,1)*IMG(i-1,j-1) + Wy(1,2)*IMG(i-1,j) + Wy(1,3)*IMG(i-1,j+1) +...
Wy(2,1)*IMG(i,j-1)+ Wy(2,2)*IMG(i,j) + Wy(2,3)*IMG(i,j+1) +...
Wy(3,1)*IMG(i+1,j-1)+ Wy(3,2)*IMG(i+1,j) + Wy(3,3)*IMG(i+1,j+1);
%Q(i,j) = sqrt(Gx^2 + Gy^2);
Q(i,j)= abs(Gx) + abs(Gy);
end
end
end
Q=uint8(Q);
上述Matlab代碼中需要注意以下幾點:
(1)函數輸入IMG是uint8數據類型的圖像,而計算時存在負數和小數,需要用浮點數來表示,所以將IMG由uint8數據類型轉為double數據類型;
(2)對圖像邊緣的像素不進行處理,直接輸出0;
(3)將函數輸出Q由double數據類型轉為uint8數據類型。
接下來編寫頂層M文件,相關的Maltab代碼如下所示(詳見Sobel_Sharpen_Test.m),Sobel銳化處理流程如圖15所示。
clear all;
close all;
clc;
% -------------------------------------------------------------------------
% Read PC image to Matlab
IMG1 = imread('../../0_images/Lenna.jpg');% 讀取jpg圖像
IMG1 = rgb2gray(IMG1);
subplot(131);imshow(IMG1);title('【1】原圖');
% -------------------------------------------------------------------------
IMG2 = Sobel_Edge_Detector(IMG1);
subplot(132);imshow(IMG2);title('【2】Sobel邊緣檢測結果');
% -------------------------------------------------------------------------
IMG3 = IMG1 + IMG2;
subplot(133);imshow(IMG3);title('【3】Sobel銳化圖像');
圖15Sobel銳化處理流程
執行頂層M文件可得到圖16所示的結果,其中【2】是進行Sobel邊緣檢測得到的效果圖,可以看出Sobel算子對邊緣有較強的響應,與Robert算子相比,對邊緣的響應更加強烈,得到的邊緣更加寬;【3】是原圖與邊緣檢測結果疊加後的效果圖,相比原圖,邊緣和細節更加突出,但圖像有些失真。
圖16Sobel邊緣檢測與銳化
本文僅做學術分享,如有侵權,請聯繫刪文。
