資源簡介
利用Matlab實現霍夫變換對于正弦曲線的自動識別
代碼片段和文件信息
clc;
clear;
close?all;
%%?模擬裂縫
n=200;
m=200;
x=ones(nm);
h=1;
A1=40;
phi1=180;
baseline1=100;
for?i=1:200;
????y1=A1*(sin(i*2*pi/200-phi1*pi/180))+baseline1;
????x(round(y1)i)=0;
????for?j=round(y1)-h:round(y1)+h;
????????x(ji)=0;
????end
end
%?加入椒鹽噪聲
gray?=?x;
gray?=?imnoise(x‘salt?&?pepper‘0.1);
figure;
imshow(gray);
axis?on;
ylabel(‘y/像素點‘);
xlabel(‘x/像素點‘);
set(gcf‘Units‘‘centimeters‘‘Position‘[2?2?15?18]);
set(gca‘FontName‘‘Times?New?Roman‘‘FontSize‘8)
set(gca‘Units‘‘centimeters‘‘Position‘[3?3?3?8]);%設置xy軸在圖片中占的比例,起始位置
set(get(gca‘XLabel‘)‘FontSize‘8);%圖上文字為8?point
set(get(gca‘YLabel‘)‘FontSize‘8);
%%?參數設置
range?=?100;
img?=?ones(n+2*rangem);
[nn?mm]?=?size(img);
img(range+1:range+n1:m)?=?gray;
W?=?2*pi/m;
figure;
imshow(img);
num?=?0;
for?ii?=?1:nn;
????for?jj?=?1:mm;
????????if(img(iijj)?==?0);
????????????num?=?num+1;
????????end
????end
end
%%?傳統霍夫變換
tic;
counter?=?zeros(range360n);
for?i?=?1:n;
????for?j?=?1:m;
????????if(gray(ij)?==?0);
????????????for?baseline?=?1:n;
????????????????for?fy?=?1:360;
????????????????????if(sin(j*2*pi/m-fy*pi/180)==0);
????????????????????????A=0;
????????????????????else
????????????????????????A=(i-baseline)/(sin(j*2*pi/m-fy*pi/180));
????????????????????end
????????????????????if(A>0?&&?A+baseline<=n?&&?baseline-A>=1?&&?A ????????????????????????AA=uint8(round(A));
????????????????????????counter(AAfybaseline)=counte
- 上一篇:matlab代碼實現分形維數計算
- 下一篇:改進的花朵授粉算法程序Matlab
評論
共有 條評論