必威体育Betway必威体育官网
当前位置:首页 > IT技术

图像入门:MATLAB图像识别

时间:2019-06-13 05:43:09来源:IT技术作者:seo实验室小编阅读:61次「手机版」
 

图像识别

初学数字图像处理,做一个练习,识别图中的图形形状,颜色,位置,面积,周长

基本思路:首先先对图像进行裁剪,增强等处理,使图片成为简单的二值图。

        接着提取图像边缘

        对图像处理后就可以进行寻找质心并标记、利用HOUGH变换检测直线、利用圆的周长和面积的关系判断是否为圆形,求图形的周长、面积、RGB等等操作

        下面附全部代码,欢迎大家一起学习讨论~

f=imread('C:\Users\QHJ\Desktop\demo.png');
f=f(:,:,3);
f=histeq(f,256);       %增强对比度
f=im2bw(f,0.386);
rowhigh=102+276-1;     %提取有用部分
colhigh=193+277-1;
f=f(102:rowhigh,193:colhigh);
se=strel('square',14); %开闭运算
fo=imopen(f,se);
f2=imclose(fo,se);
f2=~f2;
imshow(f2);

g=edge(f2,'sobel',0.47);
[B,L] = bwboundaries(f2,'noholes');
hold on
for k = 1:length(B)    % 标记边界
  boundary = B{k};
  plot(boundary(:,2), boundary(:,1), 'r', 'LineWidth', 2)
end

hold on              
[L1,n]=bwlabel(g);     %标定质心
ff=imread('C:\Users\QHJ\Desktop\demo.png');
for k=1:n
  [r,c]=find(L1==k);
  rbar=mean(r);
  cbar=mean(c);
  plot(cbar,rbar,'Marker','*','MarkerEdgecolor','blue');
  fprintf('行坐标为%9.2f    , ',cbar)
  fprintf('列坐标为%9.2f\n',rbar);
rgb=ff(floor(cbar)+193,floor(rbar)+102,:)          %读取RGB值

end

axis on,axis normal;
[H,theta,rho]=hough(g);%判断直线
peak=houghpeaks(H,11);
lines=houghlines(g,theta,rho,peak,'FillGap',10,'MinLength',31);%
hold on
for k=1:length(lines)
  xy=[lines(k).point1;lines(k).point2];
  plot(xy(:,1),xy(:,2),'LineWidth',2.5,'Color','blue');
end

l=regionprops(L,'Perimeter','Area');  %求周长,面积
l.Perimeter   
l.Area

stats = regionprops(L,'Area','Centroid','Perimeter');
threshold = 0.95;
for k = 1:length(B)
  boundary = B{k};
  area = stats(k).Area;                
  %perimeter=stats(k).Perimeter;
  delta_sq = diff(boundary).^2;    
  perimeter = sum(sqrt(sum(delta_sq,2)));                 %利用4pi*面积/周长^2=1判断圆
  metric = 4*pi*area/perimeter^2;
  metric_string = sprintf('%2.2f',metric) ;
  text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','g',...
       'FontSize',14,'FontWeight','bold');
  if metric > threshold
     centroid = stats(k).Centroid;
     text(centroid(1)-10,centroid(2)-10,'圆','Color','b','FontSize',10,'FontWeight','bold');
  end

end

运行结果图,判断椭圆还没做出来。。。。。

相关阅读

[图像处理] Sobel边缘检测算法

完成时间:2017/1/23 我的实现结果如下:(图一为原图,图二为边缘检测结果)             关于Sobel算子(英文部分来源于Wikipedia

Matlab中自定义函数(一)

作为一个程序员出生的Matlab学习者,不能定义函数那简直是受不了!! 最重要的一点! 定义函数的时候,很多时候都会很迷的一般,使用不了

matlab数字图像处理(一) 基本操作

1.1  MATLAB图像处理基本操作 本文中对于大多数的操作,是对数字图像处理领域中最为著名的“lena”图片进行操作的。原图如下(Figur

matlab中contour 函数的用法(绘制等高线)

原文contour矩阵的等高线图全页折叠语法contour(Z)contour(Z,n)contour(Z,v)contour(X,Y,Z)contour(X,Y,Z,n)contour(X,Y,Z,v)con

Matlab中regionprops的使用示例

有这样一幅图, 我们想获取其中的连通区域,可以使用以下代码: src_img_name = 'blue_sky_white_clound_002594.jpg';img = imread(src

分享到:

栏目导航

推荐阅读

热门阅读