Matlab代码从图像中提取形状特征包括圆形和矩形

89(30天)
你好,我有一个项目,超越了在matlab图像处理。我需要特殊的代码从图像中提取形状属性使用猪和regionprops,指出图像包含一个矩形和一个圆。我将附上一个图像作为一个例子。要提取的图像属性由摩尔斯电码字编码
1评论
阿米特
阿米特 2021年6月5日
遵循以下步骤,
  1. 首先你需要binarize形象,找到使用精明的边缘检测图像的边缘。
  2. 然后你需要使用regionprops提取各种孤立的地区形象。
  3. 你需要找到质心的地区。
  4. 然后在不同的角度,你可以找到质心之间的距离的地区和点图像的边缘。
  5. 这使得你的形状描述符。
  6. 你可以比较这些描述符描述符的份额查询或为了未知对象进行分类。
这将为你工作。
我上面IEEE关于发表的论文过程中,你可以将请求发送给我, amit.kenjale@gmail.com ,我将给你发送我的IEEE论文这个过程是解释在细节和图像显示了中间结果。

登录置评。

接受的答案

darova
darova 2021年5月27日
只是binarize图像
一个= imread (5 c54390e - 80 - c8 - 47 - dd - 9293 - 822 - e85d06145.jpeg”);
A1 = im2bw(一个);
L = bwlabel (A1 ~);%标签每个地区
s = regionprops (L,“区域”);%找到每个区域的面积
基于“增大化现实”技术=猫(1、s.Area);
[~ n] = min (ar);%找到最小区域(圆)
imshow (L = = n)%找到指数最小面积和展示
3评论

登录置评。

答案(1)

图像分析
图像分析 2021年5月28日
我知道你已经接受了一个答案,但是我想你可能会喜欢看到我的方法。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像
文件夹= pwd;
baseFileName =“莫尔斯code.jpeg”;
grayImage = imread (baseFileName);
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
%使用加权和的渠道来创建一个灰度图像。
grayImage = min (grayImage [], 3);
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(1、2、1);
imshow (grayImage []);
轴(“上”,“图像”);
标题(参考图像的,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”;%可能不会在MATLAB的早期版本中工作。
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Binarize图像。
%得到一个面具的黑暗部分的图像。
% imhist (image1);
%网格;
掩码= ~ imbinarize (grayImage);
%去掉噪声通过消除斑点小于4000像素。
掩码= bwareaopen(面具,4000);
次要情节(1、2、2);
imshow(面具,[]);
轴(“上”,“图像”);
标题(“面具”形象,“字形大小”字形大小,“翻译”,“没有”);
impixelinfo;
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%测量领域
道具= regionprops(面具,“区域”,“重心”);
allAreas = [props.Area]
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的阴谋是什么原始图像。
次要情节(1、2、1);
k = 1:长度(道具)
xCenter =道具(k) .Centroid (1);
yCenter =道具(k) .Centroid (2);
如果allAreas (k) > 9600
blobType =“冲”;
其他的
blobType =“点”;
结束
文本(xCenter yCenter blobType,“颜色”,“r”,
“FontWeight”,“大胆”,“字形大小”,18岁,
“HorizontalAlignment”,“中心”,
“VerticalAlignment”,“中间”);
结束
%得到数组1是短跑和0点
dotOrDash = allAreas > 9600
对话框(“完成”);
看到红色的识别标记图像。
你会得到:
dotOrDash =
1×4逻辑数组
1 1 0 1
这是你正在寻找的吗?
4评论
图像分析
图像分析 2021年6月4日
不是真的。公认的回答说:
s = regionprops (L,“区域”);%找到每个区域的面积
基于“增大化现实”技术=猫(1、s.Area);
而我说:
%测量领域
道具= regionprops(面具,“区域”,“重心”);
allAreas = [props.Area]
这些都是本质上 相同 ——他们 这两个 给所有的气泡图像的面积。不确定你的“形状”的定义是什么 这两个 我们的解决方案万博 尤文图斯基于特征 单独区域 。不同之处在于只接受答案提取和给你的面积 最小的 团,而我的特征 每一个 单团。没有回答的基础上区分blob 形状 ,除了不同的形状有不同的区域。如果 区域 的点和破折号 相同的 ,那么我们将无法区分类型的区域,我们必须使用不同的度量,如EquivDiameter MajorAxisLength、循环或别的东西。
我不想听起来像我和你争吵,我只是想确保你理解程序(他发现最小的形状,和我描述各种形状),因为它似乎你认为darova的回答给你更多的东西比实际。他发现一个形状(最小的),不确定是否它是一个圆形或矩形,尽管我发现所有四个形状和图像中确定所有四个图形的形状。我的代码,你可以有一个 查找表 字母和图案的所以你可以查找模式(我叫dotOrDash)来确定相对应的字母,莫尔斯代码模式。

登录置评。

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的