当前位置:首页 > 代码 > 正文

霍夫变换matlab代码(matlab自带霍夫曼函数)

admin 发布:2022-12-19 16:49 121


今天给各位分享霍夫变换matlab代码的知识,其中也会对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站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/13982.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载