hough變換是實現數字影象處理中幾何形狀識別的基本方法,基本原理是xy軸的直線到極座標的變換。將直線轉換為極座標的點。原理未動,**先行:
rgb2gray函式功能:將
真彩色影象轉換為
灰度影象。
im2double
把影象資料型別轉換為雙精度浮點型別。如果輸入影象是雙精度浮點型別(double)的,返回的影象和
源影象相同。如果源影象不是雙精度浮點型別的,該函式將返回和源影象相同但資料型別為double型別的影象。
log邊緣檢測
運算元首先對影象做高斯濾波,然後再求其拉普拉斯(laplacian)二階導數。本文高斯濾波的模板為:
figure();subplot(2,2,1);imshow(o);title('原圖');
[m,n]=size(f);
for i=3:m-2
for j=3:n-2
i(i,j)=-f(i-2,j)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1)-f(i,j-2)-2*f(i,j-1)+16*f(i,j)-2*f(i,j+1)-f(i,j+2)...
-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)-f(i+2,j); %log運算元
endend
subplot(2,2,2);imshow(i);title('log運算元提取影象邊緣');
%均值濾波
[m,n]=size(i);
for i=2:m-1
for j=2:n-1
y(i,j)=i(i-1,j-1)+i(i-1,j)+i(i-1,j+1)+i(i,j-1)+i(i,j)+i(i,j+1)+i(i+1,j-1)+i(i+1,j)+i(i+1,j+1);
y(i,j)=y(i,j)/9;
%log運算元提取邊緣後,對結果進行均值濾波以去除雜訊,為下一步hough變換提取直線作準備
end
endsubplot(2,2,3);imshow(y);title('均值濾波器處理後');
%二值化
q=im2uint8(y); %把影象資料型別轉換為無符號八位整型
[m,n]=size(q);
for i=1:m
for j=1:n
if q(i,j)>80;%設定二值化的閾值為80
q(i,j)=255;%對影象進行二值化處理,使影象邊緣更加突出清晰
else
q(i,j)=0;
endend
endsubplot(2,2,4);imshow(q);title('二值化處理後');
%hough變換檢測直線,使用(theta,p)引數空間,theta∈[0,180],p∈[0,2dis]
theta=180; %角度的值為0到180度
dis=round(sqrt(m^2+n^2)); %影象對角線長度為p的最大值 round為四捨五入
s=zeros(theta,2*dis); %儲存每個(theta,p)個數
z=cell(theta,2*dis);
for i=1:m
for j=1:n %遍歷影象的所有點
if (q(i,j)==255) %只檢測邊緣的白點
for k=1:theta
p=round(i*cos(pi*k/180)+j*sin(pi*k/180));
%對每個點從1到180度遍歷
if(p>0)
s(k,dis+p)=s(k,dis+p)+1; %累加
z=[z,[i,j]'];
else
ap=abs(p)+1;
s(k,ap)=s(k,ap)+1; %累加
z=[z,[i,j]'];
endend
endend
end
%顯示效果
for i=1:theta
for j=1:dis*2
if(s(i,j)>70)
lp=z;
for k=1:s(i,j)
o(lp(1,k),lp(2,k),1)=255;
o(lp(1,k),lp(2,k),2)=0;
o(lp(1,k),lp(2,k),3)=0;
endend
endend
figure,imshow(o),title('hough');
Hough變換提取直線 Matlab實現
用hough變換提取直線 在對圖形進行直線檢測之前,需要對圖形進行邊緣檢測 二值化處理,用拉普拉斯演算法或canny提取邊緣 hough變換思想 1 在 的極值範圍內對其分別進行 m,n 等分,設乙個二維陣列的下標與 i j 的取值 對應 2 對影象上的所有邊緣點作 hough 變換,求每個點在 j...
Hough變換直線檢測的MATLAB實現
1.hough變換是乙個非常重要的 檢測間斷點邊界形狀的方法,它通過將影象座標空間變換到引數空間,來實現直線和曲線的擬合。2.通過hough變換,在二值影象中檢測直線需要三個步驟 a 利用hough 函式執行hough變換,得到hough矩陣 b 利用houghpeaks 函式在hough矩陣中,尋...
C實現hough變換擬合直線
原理 對於平面上的乙個點 x1,y1 滿足方程 y1 mx1 b,經過點 x1,y1 的直線有無數條,只要其滿足剛才的直線方程。然而,可以把直線方程變形一下,b x1 m y1,在考慮由點 m,b 組成的面,這裡叫為引數空間,由 x1,y1 確定一條直線。同樣,由另外乙個點 x2,y2 可以確定引數...