您的位置:首页 > 产品设计 > UI/UE

图像处理大作业(用霍夫变换检测硬币及统计硬币个数,并设计GUI界面)

2019-02-02 15:26 1746 查看
版权声明:杨家的小胖几 https://blog.csdn.net/qq_40311281/article/details/86749879

实现所给硬币图像中的硬币检测及计数

要求完成功能:自行查找、阅读有关的采用Hough变换来检测图像中圆的资料,设计实现所给图像中圆形的检测,要求检测出图像中硬币个数以及各个硬币的直径。

本题难度系数:★★★★

GUI界面设计参考:MATLAB学习笔记(十一)——MATLAB图形用户界面设计

https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4307777.html

我采用了霍夫变换对所给图形进行了检测和统计个数:

原图如下:

检测后的效果:

部分matlab代码如下:

I = imread('2.jpg');
 I=imresize(I,0.5);
[m,n,l] = size(I);
if l == 3
    I = rgb2gray(I);    %如果为彩色图 则转化为灰度图
end
imshow(I)
I1=im2bw(I,graythresh(I));   %转化为二值图像
figure(1),imshow(I1)

I2=imopen(I1,strel('disk',3));   %开运算   平滑图像边缘
figure(2),imshow(I2)

I3=imfill(~I2,'holes');  %填充图像空洞   
%~I2为对I2图像取反 具体效果可以自己看下
%I22=~I2;
%imshow(I22)
figure(3),imshow(I3)

I4=bwareaopen(I3,1500);%删除二值图像BW中面积小于1500的对象(就是图像中面积小于1500的白色块)
figure(4);imshow(I4);


BW = edge(I4,'sobel');  
  imshow(BW)
 
step_r = 1;  
step_angle = 0.5;  
minr =40;
maxr = 150;  
thresh = 0.5;  
 
[Hough_Space,Hough_Circle,para] = hough_circle(BW,step_r,step_angle,minr,maxr,thresh);  
figure(1),imshow(I),title('原图')  
figure(2),imshow(BW),title('边缘')  
figure(3),imshow(Hough_Circle),title('检测结果')  
 
circleParaXYR=para;  
 
%输出  
fprintf(1,'\n---------------圆统计----------------\n');  
[r,c]=size(circleParaXYR);%r=size(circleParaXYR,1);  
fprintf(1,'  检测出%d个圆\n',r);%圆的个数  
fprintf(1,'  圆心     半径\n');%圆的个数  
for n=1:r  
fprintf(1,'%d (%d,%d)  %d\n',n,floor(circleParaXYR(n,1)),floor(circleParaXYR(n,2)),floor(circleParaXYR(n,3)));  
end  
 
%标出圆  
figure(4),imshow(I),title('检测出图中的圆')  
hold on;  
 plot(circleParaXYR(:,2), circleParaXYR(:,1), 'r+');  
 for k = 1 : size(circleParaXYR, 1)  
  t=0:0.01*pi:2*pi;  
  x=cos(t).*circleParaXYR(k,3)+circleParaXYR(k,2);y=sin(t).*circleParaXYR(k,3)+circleParaXYR(k,1);  
  plot(x,y,'r-');  
 end  

完整源码评论私信

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: