Hough变换直线检测MatLab代码Word文件下载.docx
- 文档编号:15201914
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:7
- 大小:19.26KB
Hough变换直线检测MatLab代码Word文件下载.docx
《Hough变换直线检测MatLab代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《Hough变换直线检测MatLab代码Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
coordrhotheta=cell(1,1);
%para=cell(1,3);
�ll数组相当于c语言中的指针,可动态的改变大小。
fori=1:
md
forj=1:
ma
coordrhotheta{i,j}=[];
end
%产生空网格。
ymin=5;
ymax=M-4;
fori=ymin:
ymax
N
ifbw(i,j)==1
fork=1:
rho=round((j*cos(dtheta*k*pi/180)+i*sin(dtheta*k*pi/180))/drho);
%根据直线的法线式表示,计算出平面上不同点的hough变换值。
rho=rho+ceil(N/drho);
%可能的最大负值。
numrhotheta(rho+1,k)=numrhotheta(rho+1,k)+1;
%将hough变换值相应位置的计数值加1。
coordrhotheta{rho+1,k}=[coordrhotheta{rho+1,k};
[i,j]];
%记录hough变换值相应位置对应的点的坐标。
figure;
imshow(Img);
holdon
num=8;
fori=1:
num
[y1,col1]=max(numrhotheta);
[y2,col]=max(y1);
row=col1(col);
%求出hough变换值最大值的坐标。
numrhotheta(row,col)=0;
%为了避免重复计算,将计算过的点置0。
rhood=1;
chood=0;
top=max(row-rhood,1);
down=min(row+rhood,md);
left=max(col-chood,1);
right=min(col+chood,ma);
numrhotheta(top:
down,left:
right)=0;
%
nds=coordrhotheta{row,col};
nds=[];
forr=top:
down
forc=left:
right
nds=[nds;
coordrhotheta{r,c}];
Img_hough=draw(Img_hough,nds);
imwrite(mat2gray(numrhotheta),'
numrhotheta.bmp'
)
二.
RGB=imread('
gantrycrane.png'
);
I=rgb2gray(RGB);
%converttointensity
BW=edge(I,'
canny'
%extractedges
[H,T,R]=hough(BW,'
RhoResolution'
0.5,'
ThetaResolution'
0.5);
%displaytheoriginalimage
subplot(2,1,1);
imshow(RGB);
title('
%displaythehoughmatrix
subplot(2,1,2);
imshow(imadjust(mat2gray(H)),'
XData'
T,'
YData'
R,...'
InitialMagnification'
'
fit'
Houghtransformofgantrycrane.png'
xlabel('
\theta'
),ylabel('
\rho'
axison,axisnormal,holdon;
colormap(hot);
三.
I=imread('
D:
\MATLAB7\aaa.bmp'
rotI=imrotate(I,33,'
crop'
BW=edge(rotI,'
[H,T,R]=hough(BW);
imshow(H,[],'
R,'
),ylabel('
axison,axisnormal,holdon;
P=houghpeaks(H,5,'
threshold'
ceil(0.3*max(H(:
))));
x=T(P(:
2));
y=R(P(:
1));
plot(x,y,'
s'
color'
white'
lines=houghlines(BW,T,R,P,'
FillGap'
5,'
MinLength'
7);
figure,imshow(rotI),holdon
max_len=0;
fork=1:
length(lines)
xy=[lines(k).point1;
lines(k).point2];
plot(xy(:
1),xy(:
2),'
LineWidth'
2,'
Color'
green'
plot(xy(1,1),xy(1,2),'
x'
yellow'
plot(xy(2,1),xy(2,2),'
red'
len=norm(lines(k).point1-lines(k).point2);
if(len>
max_len)
max_len=len;
xy_long=xy;
plot(xy_long(:
1),xy_long(:
cyan'
四.
clear
I
=
imread('
taj1small3.jpg'
rgb2gray(I);
%I
imrotate(I,33,'
%
figure
imshow(rotI);
imshow(I);
BW
edge(I,'
imshow(BW);
[H,T,R]
hough(BW);
R,
'
),
ylabel('
axis
on
normal
hold
P
houghpeaks(H,5,'
x
T(P(:
y
R(P(:
Find
lines
and
plot
them
houghlines(BW,T,R,P,'
figure,
imshow(I),hold
max_len
0;
for
k
1:
xy
[lines(k).point1;
Plot
beginnings
ends
of
lines
Determine
the
endpoints
longest
line
segment
len
norm(lines(k).point1
-
lines(k).point2);
if
(
>
len;
xy_long
xy;
highlight
blue'
程序如下:
I=imread('
circuit.tif'
%旋转图像并寻找边缘
subplot(221),fig1=imshow(rotI);
%使用canny方法检测目标边界
subplot(222),imshow(BW);
%执行Hough变换并显示Hough矩阵
subplot(223),imshow(H,[],'
axison,axisnormal,holdon;
%在Hough矩阵中寻找前5个大于Hough矩阵中最大值0.3倍的峰值
%hough变换的极值点
%由行、列索引转换成实际坐标
%在Hough矩阵图像中标出峰值位置
%找出并绘制直线
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hough 变换 直线 检测 MatLab 代码