我正在處理一個圖像處理項目。我有一個灰度圖像和Canny邊緣檢測邊緣檢測。現在我想通過過濾不必要的邊來操縱結果。我想保持接近水平的邊緣並刪除接近垂直的邊緣。Matlab處理邊緣
如何刪除接近垂直邊緣?
我正在處理一個圖像處理項目。我有一個灰度圖像和Canny邊緣檢測邊緣檢測。現在我想通過過濾不必要的邊來操縱結果。我想保持接近水平的邊緣並刪除接近垂直的邊緣。Matlab處理邊緣
如何刪除接近垂直邊緣?
這取決於如何允許成本密集。一個簡單的方法是:
(1)使用Sobel濾鏡(給出Dx,Dy)對圖像進行卷積。
對於每個精明邊緣像素:
(2)規範化(DX,DY),S.T.在每個像素中你都有你的邊緣的方向。 (3)用你想刪除的方向計算內部產品(在你的情況下(0,1))。 (4)如果內積的絕對值小於某閾值,則去除像素。
例子:
img = ...;
canny_img = ...;
removeDir = [0;1];
% convolute with sobel masks
sobelX = [1, 0, -1; 2, 0, -2; 1, 0, -1];
sobelY = sobelX';
DxImg = conv2(img,sobelX,'same');
DyImg = conv2(img,sobelY,'same');
% for each canny-edge-pixel:
for lin = 1:size(img,1) % <-> y
for col = 1:size(img,2) % <-> x
if canny_img(lin,col)
% normalize direction
normDir = [DxImg(lin,col); DyImg(lin,col)];
normDir = normDir/norm(normDir,2);
% inner product
innerP = normDir' * removeDir;
% remove edge?
if abs(innerP) < cos(45/180*pi) % 45° threshold
canny_img(lin,col) = 0;
end
end
end
end
您可以優化了很多,由於您的要求。
謝謝,這個作品真的很好! – 2013-04-29 12:47:27
一種選擇是使用Sobel operator的一半。完整的算法找到水平和垂直邊緣,然後將它們組合。你只對水平邊緣感興趣,所以只需計算該部分(這是維基百科文章中的Gy
)。
您可能還想要將結果閾值設置爲黑白圖像而不是灰色陰影。
您可以將此技術應用於原始灰度圖像或Canny邊緣檢測的結果。
如何定義條件'接近垂直邊緣'? – 2013-04-26 13:49:00
使用具有足夠寬度的垂直形狀結構元件的形態開口。像這樣:http://stackoverflow.com/a/11015774/97160 – Amro 2013-04-26 13:57:15
@ArnoldVámos:發佈一個示例圖片,它會讓我們試驗 – Amro 2013-04-26 17:26:02