真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Canny邊緣檢測算子原理和matlab實現(xiàn)代碼-創(chuàng)新互聯(lián)

一、基本原理

圖像邊緣是圖像的重要信息,而Canny算子則是用于邊緣檢測的經(jīng)典算法。在用Canny算子進行邊緣檢測之前必須有效地抑制噪聲,該算法使用的是高斯平滑濾波。接下來計算圖像中每一點的梯度向量,根據(jù)梯度向量可以得到梯度方向和梯度幅值。梯度方向在(-π,π]范圍內(nèi),將梯度方向離散到4個方向,分別為上下方向、左右方向、主對角線方向、副對角線方向,根據(jù)離散后的梯度方向?qū)μ荻确颠M行非極大值抑制。例如,如果圖像中點(x,y)的梯度方向沿上下方向,那么將點(x,y)的梯度幅值分別與點(x-1,y)和點(x+1,y)的梯度幅值進行比較;如果點(x,y)的梯度幅值大于另外兩點,那么該點有可能是邊緣點,將它的梯度幅值保留;如果點(x,y)的梯度幅值不大于另外兩點,那么該點一定不是邊緣點,將它的梯度幅值置零。接下來,用雙閾值算法檢測和連接邊緣,高閾值用于檢測邊緣,低閾值用于連接邊緣。在該算法中,取高閾值為梯度幅值大值的0.3倍,取低閾值為梯度幅值大值的0.1倍。如果某點的梯度幅值大于高閾值,那么該點一定是邊緣點;如果某點的梯度幅值小于低閾值,那么該點一定不是邊緣點;如果某點的梯度幅值介于低閾值和高閾值之間,那么該點有可能是邊緣點,進一步,如果該點的8鄰域的梯度幅值的大值大于高閾值,那么將該點判定為邊緣點。

創(chuàng)新互聯(lián)主營北碚網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,app軟件定制開發(fā),北碚h5微信小程序開發(fā)搭建,北碚網(wǎng)站營銷推廣歡迎北碚等地區(qū)企業(yè)咨詢二、實現(xiàn)步驟

(1)調(diào)用自定義函數(shù)myGauss生成高斯模板,高斯模板的大小和標準差均可以改變;
(2)將原圖像f(x,y)與高斯模板做卷積,得到用高斯濾波器平滑后的圖像g(x,y);
(3)用2×2一階有限差分近似式來計算圖像中各點的梯度向量:
在這里插入圖片描述
以上兩個公式對應的模板分別如下;
在這里插入圖片描述
(4)利用梯度向量計算各點的梯度方向和梯度幅值:
在這里插入圖片描述
(5)將梯度方向離散到4個方向,即上下方向、左右方向、主對角線方向和副對角線方向;
在這里插入圖片描述
(6)根據(jù)離散后的梯度方向?qū)μ荻确颠M行非極大值抑制。例如,如果圖像中點(x,y)的梯度方向沿上下方向,那么將點(x,y)的梯度幅值分別與點(x-1,y)和點(x+1,y)的梯度幅值進行比較;如果點(x,y)的梯度幅值大于另外兩點,那么該點有可能是邊緣點,將它的梯度幅值保留;如果點(x,y)的梯度幅值不大于另外兩點,那么該點一定不是邊緣點,將它的梯度幅值置零。
在這里插入圖片描述
(7)用雙閾值算法檢測和連接邊緣。高閾值和低閾值根據(jù)梯度幅值的大值來確定,在該算法中,?。?br />在這里插入圖片描述
如果某點的梯度幅值大于高閾值,那么該點一定是邊緣點;如果某點的梯度幅值小于低閾值,那么該點一定不是邊緣點;如果某點的梯度幅值介于低閾值和高閾值之間,那么該點有可能是邊緣點,進一步,如果該點的8鄰域的梯度幅值的大值大于高閾值,那么將該點判定為邊緣點。

三、效果演示

(1)原始圖像;
在這里插入圖片描述
(2)高斯平滑后的圖像;
在這里插入圖片描述
(3)Canny邊緣檢測的結果。
在這里插入圖片描述

四、matlab實現(xiàn)代碼
%% Canny邊緣檢測算子,高斯模板的大小和標準差均可以改變
clear,close all
clc
srcImg = imread('Canny算子用.png');
figure;
imshow(srcImg);
title('原始圖像','fontsize',18);
srcImg = double(srcImg);
[rows,cols] = size(srcImg);
%% 用高斯濾波器平滑圖像
guassMask = myGauss(1,1,0.8);
filteredImg = conv2(srcImg,guassMask,'same');
figure;
imshow(uint8(filteredImg));
title('高斯平滑圖像','fontsize',18);
%% 計算梯度的幅值和方向
maskX = [-1 -1; 1  1];
maskY = [-1  1;-1  1];
gradX = conv2(filteredImg,maskX,'same');
gradY = conv2(filteredImg,maskY,'same');
M = sqrt(gradX.^2+gradY.^2);
theta = atan2(gradY,gradX);
%% 對梯度幅值進行非極大值抑制(向下為X+,向右為Y+)
for i = 1:rows
    for j = 1:cols
        if (theta(i,j)>=-pi/8 && theta(i,j)=pi*7/8 && theta(i,j)<=pi)||(theta(i,j)>-pi && theta(i,j)<-pi*7/8)
            theta(i,j) = 0;
        elseif (theta(i,j)>=pi/8 && theta(i,j)=-pi*7/8 && theta(i,j)<-pi*5/8)
            theta(i,j) = 45;
        elseif (theta(i,j)>=pi*3/8 && theta(i,j)=-pi*5/8 && theta(i,j)<-pi*3/8)
            theta(i,j) = 90;
        elseif (theta(i,j)>=pi*5/8 && theta(i,j)=-pi*3/8 && theta(i,j)<-pi/8)
            theta(i,j) = 135;
        end
    end
end
NMS = zeros(rows,cols);
for i = 2:rows-1
    for j = 2:cols-1
        if theta(i,j)==0 && M(i,j)>M(i-1,j) && M(i,j)>M(i+1,j)% 比較中心像素點和上下兩像素點的梯度幅值
            NMS(i,j) = M(i,j);
        elseif theta(i,j)==45 && M(i,j)>M(i-1,j-1) && M(i,j)>M(i+1,j+1)% 比較中心像素點和主對角線兩像素點的梯度幅值
            NMS(i,j) = M(i,j);
        elseif theta(i,j)==90 && M(i,j)>M(i,j-1) && M(i,j)>M(i,j+1)% 比較中心像素點和左右兩像素點的梯度幅值
            NMS(i,j) = M(i,j);
        elseif theta(i,j)==135 && M(i,j)>M(i-1,j+1) && M(i,j)>M(i+1,j-1)% 比較中心像素點和副對角線兩像素點的梯度幅值
            NMS(i,j) = M(i,j);
        end
    end
end
%% 用雙閾值算法檢測和連接邊緣
dstImg = zeros(rows,cols);
thresholdLow = 0.1*max(NMS(:));
thresholdHigh = 0.3*max(NMS(:));
for i = 2:rows-1
    for j = 2:cols-1
        if NMS(i,j) >thresholdHigh % 若某像素點的梯度幅值大于高閾值,則該像素點為邊緣點
            dstImg(i,j) = 1;
        elseif NMS(i,j)thresholdHigh % 若某像素點的梯度幅值介于高閾值和低閾值之間,則檢測該像素點的8鄰域是否存在邊緣像素點,如果存在,則該像素點為邊緣點
            dstImg(i,j) = 1;
        end
    end
end
figure;
imshow(dstImg);
title('canny邊緣圖像','fontsize',18);
%% 函數(shù)定義:產(chǎn)生高斯模板
function gaussMask = myGauss(a,b,sigma)
    m = 2*a+1;% m為高斯模板的行數(shù)
    n = 2*b+1;% n為高斯模板的列數(shù)
    gaussMask = zeros(m,n);
    sigma2 = sigma*sigma;% sigma為標準差
    for i = 1:m
        for j = 1:n
            gaussMask(i,j) = 1/(2*pi*sigma2)*exp(((i-a-1)*(i-a-1)+(j-b-1)*(j-b-1))/(-2*sigma2));% 計算高斯模板的系數(shù)
        end
    end
    SUM = sum(gaussMask(:));
    gaussMask = gaussMask/SUM;% 歸一化
end

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


名稱欄目:Canny邊緣檢測算子原理和matlab實現(xiàn)代碼-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/cddsss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部