【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】

这篇具有很好参考价值的文章主要介绍了【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】,Matlab图像处理(初级版),matlab

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【矩阵检测】基于matlab Hough霍夫变换矩阵检测【含Matlab源码 3563期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab图像处理(初级版)

备注:
点击上面蓝色字体付费专栏Matlab图像处理(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab图像处理(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、部分源代码

clc;clear;
tic
%%%step1, image input
F=imread(‘test3.bmp’);
figure, imshow(F);
title(‘输入图像.’);
%%%step2, image in the early proceesing
BW=im2bw(F,0.8);
figure,imshow(BW);
title(‘二值化图像.’);
se=strel(‘square’,2);
BW1=imopen(BW,se);
figure;imshow(BW1);
title(‘The image by open operation.’);
g=edge(BW1,‘canny’,0.2);
figure, imshow(g);
title(‘二值化图像边缘.’);
[K,T]=size(g);
I=zeros(K,T);
%%%step3,generate the edge image,finding dmax and dmin
[l,num]=bwlabel(g,8);%标定最大
[numax,numin]=maxmin(g,l,num);
center{numax}=[zeros(1,2)];
[dmax,gmax,center{numax}]=choose(g,l,numax);
[dmin,gmin,center{numin}]=choose(g,l,numin);

figure,imshow(g);
title(‘找到所有目标中心.’);
for k=1:num
geve{k}=[zeros(K,T)];center{k}=[zeros(1,2)];
[deve(k),geve{k},center{k}]=choose(g,l,k);
hold on
plot(center{k}(1),center{k}(2),‘+r’) %plot on original image
hold off
end

deve=zeros(num,1);
z=1;
Z=zeros(1,num);
for k=1:num %detect of each target whether is rectangle.
disp(‘The’);disp(k);disp(‘target is determined!’)
geve{k}=[zeros(K,T)];center{k}=[zeros(1,2)];
[deve(k),geve{k},center{k}]=choose(g,l,k);
%%%step4,hough transform
dtheta=3pi/(4dmax);
drho=3/4;
[h{k},theta{k},rho{k}]=hough(geve{k},dtheta,drho);
figure,imshow(h{k},‘XData’,theta{k},‘YData’,rho{k},‘InitialMagnification’,‘fit’);
axis on,axis normal;
xlabel(‘\theta’),ylabel(‘\rho’);
%%%step5,finding peaks in hough transform matrics
numpeaks=8;
threshold=round(0.5*max(h{k}(😃));%there are some problems about the parameter of nhood.
Q=houghpeaks(h{k},numpeaks,‘Threshold’,threshold);%r,c are coordinate of identified peaks
c{k}=Q(:,2);
r{k}=Q(:,1);
hold on
plot(theta{k}(c{k}),rho{k}(r{k}),‘linestyle’,‘none’,‘marker’,‘s’,‘color’,‘r’)
%%%step6,plot lines on original axis, edged image
fillgap=5;
minlength=5;
lines{k}=houghlines(geve{k},theta{k},rho{k},r{k},c{k},fillgap,minlength);
figure,imshow(geve{k}),hold on
for t=1:length(lines{k})
xy{k}=[lines{k}(t).point1;lines{k}(t).point2];
plot(xy{k}(:,2),xy{k}(:,1),‘linewidth’,2,‘color’,[1 0 0]);
end
hold on
plot(center{k}(1),center{k}(2),‘+r’)
hold off

%%%step7,determine the target whether is a rectangle
t=1;
Tc=3;
Tl=0.4;
Talpha=3;
for i=1:length(lines{k})
for j=i+1:length(lines{k})
C{k}(i)=lines{k}(i).length;
dtheta(i,j)=abs(lines{k}(i).theta-lines{k}(j).theta);
dC(i,j)=abs(lines{k}(i).length-lines{k}(j).length);
aC(i,j)=Tl*(lines{k}(i).length+lines{k}(j).length)/2;
end
end

for i=1:length(lines{k})
for j=i+1:length(lines{k})
if dtheta(i,j)<Tc && dC(i,j)<aC(i,j)
H{k}(i,:)={lines{k}(i).rho;lines{k}(i).theta};
H{k}(j,:)={lines{k}(j).rho;lines{k}(j).theta};
w{k}(t)=abs((lines{k}(i).rho-lines{k}(j).rho))/2;
alpha{k}(t)=(lines{k}(i).theta+lines{k}(j).theta)/2;
p{k}(t,:)={w{k}(t);alpha{k}(t)};
t=t+1;
disp(‘it might be a rectangle!’);
else
D{k}(i,:)={lines{k}(i).rho;lines{k}(i).theta};
D{k}(j,:)={lines{k}(j).rho;lines{k}(j).theta};
disp(‘it might not be a rectangle!’);
end
end
end

%%to decide wether these lines are composing rectangle,if true,output H,P,M and C
%%if not output D and C;
disp(‘H=’);H{k}=cell2mat(H{k});disp(H{k});
disp(‘P=’);P{k}=cell2mat(p{k});disp(P{k});

t1=max(size(P{k}(:😅));
t2=min(size(P{k}(:😅));
t4=max(P{k}(:,2));
t5=min(P{k}(:,2));
if t2<2
N{k}=P{k};
disp(‘The target is not a rectangle!’)
else
if t1>=2
[r2,c1]=find(P{k}t4);
[r3,c2]=find(P{k}t5);
t6=max(size(r2));
t7=max(size(r3));
if t6
1 && t7
1
N{k}(1,1)=P{k}(r2,1);
N{k}(1,2)=P{k}(r2,2);
N{k}(2,1)=P{k}(r3,1);
N{k}(2,2)=P{k}(r3,2);
else
if t6>1 && t71
N{k}(1,1)=P{k}(r2(1,1),1);
N{k}(1,2)=P{k}(r2(1,1),2);
N{k}(2,1)=P{k}(r3,1);
N{k}(2,2)=P{k}(r3,2);
else if t6
1 && t7>1
N{k}(1,1)=P{k}(r2,1);
N{k}(1,2)=P{k}(r2,2);
N{k}(2,1)=P{k}(r3(1,1),1);
N{k}(2,2)=P{k}(r3(1,1),2);
else if t6>1 && t7>1
N{k}(1,1)=P{k}(r2(1,1),1);
N{k}(1,2)=P{k}(r2(1,1),2);
N{k}(2,1)=P{k}(r3(1,1),1);
N{k}(2,2)=P{k}(r3(1,1),2);
end
end
end
end
end
end
disp(‘N=’);disp(N{k});

t3=max(size(N{k}(:😅));
t8=min(size(N{k}(:😅));
if t32 && t82
dalpha=abs(abs(N{k}(1,2)-N{k}(2,2))-90);
if dalpha<Talpha
Z(1,z)=k;
z=z+1;
disp(‘It is a rectangle.’);
else
disp(‘D=’); D{k}=cell2mat(D{k});disp(D{k});
disp(‘C=’);disp(C{k});
disp(‘It is not a rectangle.’);
end
else
disp(‘It is not a rectangle.’);
end
end
%%%step8, output all determined rectangle and label it in BW image.
disp(‘There are’);disp(z-1);disp(‘rectangles in this image!’);
figure;imshow(BW);hold on;
for z1=1:num
if Z(1,z1)~=0
for t=1:length(lines{Z(1,z1)})
xy{Z(1,z1)}=[lines{Z(1,z1)}(t).point1;lines{Z(1,z1)}(t).point2];
plot(xy{Z(1,z1)}(:,2),xy{Z(1,z1)}(:,1),‘linewidth’,2,‘color’,[1 0 0]);
end
hold on
plot(center{Z(1,z1)}(1),center{Z(1,z1)}(2),‘+r’);
end
end
title(['Threre are ‘,num2str(z-1), ’ rectangles in this image.’]);
hold off
ts=toc;
disp(‘The total time for determination:’);disp(ts);

⛄三、运行结果

【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】,Matlab图像处理(初级版),matlab
【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】,Matlab图像处理(初级版),matlab
【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】,Matlab图像处理(初级版),matlab
【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】,Matlab图像处理(初级版),matlab

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]文海琼,李建成.基于直方图均衡化的自适应阈值图像增强算法[J].中国集成电路. 2022,31(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除文章来源地址https://www.toymoban.com/news/detail-756804.html

到了这里,关于【矩阵检测】Hough霍夫变换矩阵检测【含Matlab源码 3563期】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hough 算法(霍夫变换)

    目录 一.什么是Hough 算法(霍夫变换) 它的基本思想是: Hough 变换的主要步骤为: 二、Hough 变换的应用 它的主要应用如下: 1. 直线检测: 2. 圆检测: 3. 椭圆检测: 4. 三角形检测: 5. 人脸检测: Hough 变换(Hough Transform)是一种常用的检测图形的算法。 它通过搜索特定形状(如直线,圆,椭

    2024年02月08日
    浏览(38)
  • 霍夫变换车道线识别-车牌字符识别代码(matlab仿真与图像处理系列第5期)

    当使用霍夫变换进行车道线识别时,可以按照以下步骤来编写 MATLAB 代码: 读入图像:使用 imread 函数读取包含车道线的图像。 图像预处理:为了减少噪音和突出车道线,可以对图像进行预处理。通常,可以采用以下步骤: 将图像转换为灰度图像:使用 rgb2gray 函数将彩色图

    2024年02月11日
    浏览(43)
  • Python-OpenCV中的图像处理-霍夫变换

    霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使用。 Hough直线变换,可以检测一张图像中的直线 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月13日
    浏览(59)
  • OpenCV-Python中的图像处理-霍夫变换

    霍夫(Hough)变换在检测各种形状的技术中非常流行,如果要检测的形状可以用数学表达式描述,就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使用。 Hough直线变换,可以检测一张图像中的直线 cv2.HoughLines(image, rho, theta, threshold) return:返回值

    2024年02月12日
    浏览(44)
  • 图像处理之hough圆形检测

    点击图像处理之Hough变换检测直线查看 下面直接描述检测圆形的方法 对于一个半径为 r r r ,圆心为 ( a , b ) (a,b) ( a , b ) 的圆,我们将其表示为: ( x − a ) 2 + ( y − b ) 2 = r 2 (x-a)^2+(y-b)^2=r^2 ( x − a ) 2 + ( y − b ) 2 = r 2 此时 x = [ x , y ] T , a = [ a , b , r ] T x=[x,y]^T,a=[a,

    2024年02月15日
    浏览(38)
  • Hough变换原理-直线检测

    目录   一、简介 二、原理 三、Python代码实现           Hough(霍夫)变换是图像处理中从图像中识别几何形状的基本方法之一。 Hough变换是将图像坐标空间变换到参数空间 ,利用点与线的对偶性,将原始图像空间的给定的曲线(今天主要介绍直线)通过曲线表达形式变

    2024年02月04日
    浏览(35)
  • 【OpenCv • c++】几何检测 —— 霍夫变换 | 霍夫直线检测 | 霍夫线变化

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 【OpenCV • c++】计算机视觉 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪

    2024年02月06日
    浏览(38)
  • OpenCV中的图像处理 —— 霍夫线 / 圈变换 + 图像分割(分水岭算法) + 交互式前景提取(GrabCut算法)

    🌎上一节我们介绍了OpenCV中傅里叶变换和模板匹配,这一部分我们来聊一聊霍夫线/圈变换的原理和应用、使用分水岭算法实现图像分割和使用GrabCut算法实现交互式前景提取 🏠哈喽大家好,这里是ErrorError!,一枚某高校大二本科在读的♂同学,希望未来在机器视觉领域能够有

    2023年04月08日
    浏览(46)
  • OpenCV——霍夫变换圆检测

        HoughCircles 该函数使用霍夫变换在灰度图像中查找圆。 image :输入图像,需要为 8 位的灰度单通道图像。 circle :找到的圆的输出向量。每个向量被编码为3或4个元素的浮点型向量 ( x , y , r a d i u s ) (x, y, radius) ( x , y , r a d i u s ) 或 ( x , y , r a d i u s , v o t e s ) (x, y, radius,

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包