當前位置:編程學習大全網 - 源碼下載 - 霍夫變換c源代碼

霍夫變換c源代碼

RGB = im read(' can Kao . jpg ');% jaynes-論文

I = RGB 2 gray(RGB);%的圖片是灰度圖像。

[x,y]=大小(I);

BW = edge(I);

圖;imshow(壹);標題(“原件”)

圖;im show(BW);標題(“邊緣檢測圖像”)

rho_max=floor(sqrt(x^2+y^2))+1;%從原圖像的數組坐標計算ρ的最大值,整數部分加1。

%這個值作為ρ,θ坐標系中ρ的最大值。

accarray=zeros(rho_max,180);%定義ρ,θ坐標系的數組,初始值為0。

% θ的最大值,180度。

theta =[0:pi/180:pi];%定義θ數組並確定θ範圍。

對於n=1:x,

對於m=1:y

如果BW(n,m)==1

對於k=1:180

%將θ值代入霍夫變換方程,求出ρ值。

ρ=(m * cos(Theta(k))+(n * sin(Theta(k)));

%取ρ值和ρ最大值之和的壹半作為ρ坐標值(數組坐標),這是為了防止ρ值為負。

rho _ int = round(rho/2+rho _ max/2);

%識別ρ θ坐標(數組)中的點,即計數累加。

accarray(rho_int,k)=accarray(rho_int,k)+1;

結束

結束

結束

結束

%圖;色彩映射表灰色;

% imagesc(ACC array);標題(“霍夫變換圖”)

%xlabel('theta '),ylabel(' rho ');

% = = = =下面的程序顯示效果不如上面的= = = =%

carray = uint 8(ACC array);%轉換後數據將丟失

%圖;im show(ACC array);標題(“霍夫變換圖”)

%xlabel('theta '),ylabel(' rho ');

%軸打開,軸正常,保持;

% = = = = = =變換提取直線= = = =%

%找到由超過100像素的線的霍夫變換形成的點。

k = 1;%存儲陣列計數器

對於rho_n=1:rho_max%在霍夫變換數組中搜索。

對於θ_ m = 1:180

if accarray(rho_n,theta_m)>=10%設定直線的最小值。

case _ ACC array _ n(K)= rho _ n;%存儲搜索到的數組下標。

case _ ACC array _ m(K)= theta _ m;

K = K+1;

結束

結束

結束

%提取這些點形成的直線,輸出圖像數組為I_out。

I_out=zeros(x,y);

I_jiao_class=zeros(x,y);

對於n=1:x,

對於m=1:y

如果BW(n,m)==1

對於k=1:180

ρ=(m * cos(Theta(k))+(n * sin(Theta(k)));

rho _ int = round(rho/2+rho _ max/2);

%如果正在計算的點屬於100以上的像素,則提取該點。

對於a=1:K-1

if rho _ int = = case _ ACC array _ n(a)& amp;k = = case _ accarray _ m(a)% % = = Gai = = % % % k = = case _ accarray _ m(a)& amp;rho_int==case_accarray_n(a)

I_out(n,m)=BW(n,m);

I_jiao_class(n,m)= k;

結束

結束

結束

結束

結束

結束

圖;im show(I _ out);標題(“經典霍夫變換提取的圖像”);

% = = = = = =霍夫變換= = = = = = =%。

%=====matlab自帶函數= = = = = =%。

%入口圖像是BW,出口圖像是h。

% [H,T,R] = hough(BW,' RhoResolution ',0.5,' ThetaResolution ',0.5);

%圖;imshow(H,' XData ',T,' YData ',R,' InitialMagnification ',' fit ');標題(“霍夫變換矩陣”)

% xlabel('theta '),ylabel(' rho ');

%軸打開,軸正常,保持;

  • 上一篇:有沒有類似鬼谷八荒的手遊,最好是單機遊戲?
  • 下一篇:鬥地主怎麽玩牌?
  • copyright 2024編程學習大全網