霍夫变换matlab代码(matlab自带霍夫曼函数)
admin 发布:2022-12-19 16:49 121
今天给各位分享霍夫变换matlab代码的知识,其中也会对matlab自带霍夫曼函数进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、应用霍夫变换方法,用matlab语言编写相应的程序
- 2、matlab霍夫变换的原点在哪
- 3、matlab中的hough变换问题
- 4、请问下面的matlab代码每一项具体代表什么意思?
- 5、matlab实现霍夫变换检测直线,代码报错,请大神帮忙看看
应用霍夫变换方法,用matlab语言编写相应的程序
RGB = imread('cankao.jpg');%jaynes-thesis
I=rgb2gray(RGB); % 图片用的是灰度图像,
[x,y]=size(I);
BW=edge(I);
figure;imshow(I);title('原图')
figure;imshow(BW);title('边缘检测图像')
rho_max=floor(sqrt(x^2+y^2))+1; %由原图数组坐标算出ρ最大值,并取整数部分加1
%此值作为ρ,θ坐标系ρ最大值
accarray=zeros(rho_max,180); %定义ρ,θ坐标系的数组,初值为0。
%θ的最大值,180度
Theta=[0:pi/180:pi]; %定义θ数组,确定θ取值范围
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
%将θ值代入hough变换方程,求ρ值
rho=(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;
end
end
end
end
%figure;colormap gray;
%imagesc(accarray);title('hough变换后的图')
%xlabel('theta'), ylabel('rho');
%=====下面程序的显示效果没上面好=====%
�carray=uint8(accarray); %转换后会丢数据
%figure;imshow(accarray);title('hough变换后的图')
%xlabel('theta'), ylabel('rho');
%axis on, axis normal, hold on;
%=======利用hough变换提取直线======%
%寻找100个像素以上的直线在hough变换后形成的点
K=1; %存储数组计数器
for rho_n=1:rho_max %在hough变换后的数组中搜索
for theta_m=1:180
if accarray(rho_n,theta_m)=10 %设定直线的最小值。
case_accarray_n(K)=rho_n; %存储搜索出的数组下标
case_accarray_m(K)=theta_m;
K=K+1;
end
end
end
%把这些点构成的直线提取出来,输出图像数组为I_out
I_out=zeros(x,y);
I_jiao_class=zeros(x,y);
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
rho=(m*cos(Theta(k)))+(n*sin(Theta(k)));
rho_int=round(rho/2+rho_max/2);
%如果正在计算的点属于100像素以上点,则把它提取出来
for a=1:K-1
if rho_int==case_accarray_n(a)k==case_accarray_m(a)%%%==gai==%%% k==case_accarray_m(a)rho_int==case_accarray_n(a)
I_out(n,m)=BW(n,m);
I_jiao_class(n,m)=k;
end
end
end
end
end
end
figure;imshow(I_out);title('利用经典hough变换提取的图像');
%========hough变换=========%
%=====matlab自带函数========%
% 入口图像为 BW,出口图像为H
% [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);
% figure;imshow(H,'XData',T,'YData',R,'InitialMagnification','fit');title('hough变换矩阵')
% xlabel('theta'), ylabel('rho');
% axis on, axis normal, hold on;
matlab霍夫变换的原点在哪
本代码提供了matlab下求取经过霍夫变换的直线斜率,并将其联合,代码见下方,实验结果见文末。
% 入口图像为 BW,出口图像为f
%optimize from main_optimize, merely select 2 lines, one has positive
%slope,the other has negative slope
clear all,close all
BW=imread('D:\Images\NEW\img4b9faef664e03.jpg');
figure,imshow(BW);
BW=rgb2gray(BW);
%thresh=[0.01,0.17];
thresh=[0.01,0.10];
sigma=2;%定义高斯参数
f = edge(double(BW),'canny',thresh,sigma);
figure,subplot(121);
imshow(f,[]);
title('canny Edge Detect Result');
[H, theta, rho]= hough(f, 0.1);%cos(theta)*x+sin(theta)*y=rho
%imshow(theta,rho,H,[],'notruesize'),axis on,axis normal
%xlabel('\theta'),ylabel('rho');
[r,c]=houghpeaks(H,10);
hold on
lines=houghlines(f,theta,rho,r,c);
subplot(122);
imshow(f,[]),title('Hough Transform Detect Result'),hold on
nlind=0;%new line index
st=1;
%%%%%%%%%求斜率%%%%%%%%%%%%
for k=1:length(lines)
%xy=[lines(k).point1;lines(k).point2];
xielv(k)=(lines(k).point2(1)-lines(k).point1(1))/(lines(k).point2(2)-lines(k).point1(2)+0.0001)
end
%%%%%%%%%将相同斜率的直线连起来%%%%%%%%%%%%
k=1;
while(k=length(lines))
if(k~=length(lines))
k=k+1;
end
while(abs(xielv(k)-xielv(k-1))0.0001)
k=k+1;
if(klength(lines))
break;
end
end
if(abs(xielv(k-1))0.05||abs(xielv(k-1))=10)%eliminate horizontal and vertical lines,防治水平线和楼房
matlab中的hough变换问题
霍夫变换在图像处理里常用来在黑白图像里检测直线,matlab里有相应的几个函数,使用方便,这里把matlab帮助里介绍的例子演示一下。
matlab里霍夫变换主要包含一下三个函数:
hough:实现霍夫变换,得到霍夫变换矩阵,用法如下
[H, theta, rho] = hough(BW)
[H, theta, rho] = hough(BW, ParameterName,ParameterValue)
houghpeaks:在霍夫变换矩阵里找极值点
peaks = houghpeaks(H, numpeaks)
peaks = houghpeaks(..., param1, val1,param2, val2)
houghlines:从霍夫变换矩阵中提取线段
lines = houghlines(BW, theta, rho,peaks)
lines = houghlines(..., param1, val1,param2, val2)
下面以一个例子来看看霍夫变换的效果,代码如下:
% 测试霍夫变换
clc
clear
close all
% 读取图像
I = imread('circuit.tif');
rotI = imrotate(I,80,'crop'); % 旋转33度,保持原图片大小
fig1 = imshow(rotI);
% 提取边
BW = edge(rotI,'canny');
figure, imshow(BW);
% 霍夫变换
[H,theta,rho] = hough(BW); % 计算二值图像的标准霍夫变换,H为霍夫变换矩阵,theta,rho为计算霍夫变换的角度和半径值
figure, imshow(imadjust(mat2gray(H)),[],'XData',theta,'YData',rho,...
'InitialMagnification','fit');
xlabel('\theta (degrees)'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(hot)
% 显示霍夫变换矩阵中的极值点
P = houghpeaks(H,50,'threshold',ceil(0.3*max(H(:)))); % 从霍夫变换矩阵H中提取5个极值点
x = theta(P(:,2));
y = rho(P(:,1));
plot(x,y,'s','color','black');
% 找原图中的线
lines = houghlines(BW,theta,rho,P,'FillGap',18,'MinLength',180);
figure, imshow(rotI), hold on
max_len = 0;
for k = 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','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
% 计算线的长度,找最长线段
len = norm(lines(k).point1 - lines(k).point2);
if ( len max_len)
max_len = len;
xy_long = xy;
end
end
% 以红色线高亮显示最长的线
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','red');
其中,同一条线段由于某些原因(比如光照、噪音等)变成了不连续的两条较短的线段,所以要进项合并,至于多少长度的才合并成同一条直线,是依据不同的图像而言的,由fillgap参数决定。而有些线段可能是噪声,所以小于7的舍去,这个也么有标准,需要根据不同的图像而定。
请问下面的matlab代码每一项具体代表什么意思?
首先讲一下这个函数: houghlines 这个函数在matlab中有两种调用形式,如下: lines = houghlines(BW, theta, rho,peaks) lines = houghlines(..., param1, val1,param2, val2) 在这里主要讲第二种(其实覆盖了第一种)。 这个函数的主要功能是基于霍夫变换对图像进行线段提取,有点类似于边缘检测之类的。 BW就是要进行线段提取的数字图像,theta和rho是hough函数的返回值。peaks是houghpeaks函数的返回值。 而hough函数是用来将一个二值图进行霍夫变换,在生成霍夫变换的图同时还返回了变换角度 theta和rho的值。 houghpeaks函数是用来确定经过所霍夫变换过后的图中峰值的位置。 至于param1 和param2是两个参数选项: 有两种:'FillGap'和'MinLength' FillGap是一个正实数,用来表示同一图像中两条线段的距离。当两条线的距离小于这个指定值时,houghlines函数就会将这两条线合并成一条线。 MinLength是一个正实数,用来确定是否保存线条。如果线条的长度小于这个值,线条将会被擦除,否则就保存。
matlab实现霍夫变换检测直线,代码报错,请大神帮忙看看
错误629”端口已由远程计算机断开连接,从字面上就能看出原因在哪里了!
解决方法:1.查看账号密码是否输入错误,注意小数点或者是空格。
2.查看网卡驱动是否正常。
3.查看网线是否连接成功。(查看“本地连接”)
4.查看宽带是否欠费或者是到期。
5.前四项都试过如果还是不行的话,把电脑和光猫一起关掉
关于霍夫变换matlab代码和matlab自带霍夫曼函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接