我如何应用一个函数到图像,使它找到检测图形形状?

4次浏览(最近30天)
德米特里•Surov
德米特里•Surov 2020年5月7日
评论道: 图像分析 2020年10月23日
这就跟你问声好!
我有具有不同类型的形状的图像;
我使用了imcontour函数来寻找图像中形状的轮廓;
现在我有(轮廓?)的圆圈/正方形/ ....形状在图像中;
我知道函数1的图是圆的,函数2的图是方的....(为什么“圆”和“方”用逗号分隔?
我没有想法如何使MatLab在以下方式:我有一个函数,图是谁提醒“圆”,让它成为function1,我有“圆”的轮廓形状(用imcontour)的形象,所以现在我想把MatLab找到并计算所有“圆”形状的轮廓形象,他的轮廓与function1(形状)可以被描述
问题是,这些家伙,不完全是圆/方,他们是“过渡”圆/方形式,就像它不是圆/方,只是它的轮廓让人想起圆/方形状,我必须精确地处理这些形状,所以imfindcircles和bound box,这不是我想要的(因为他们只是画“纯粹的”圆/正方形,即使那里不是一个圆/正方形)(正如我所理解的)
因为我没有许可给任何照片,如果我能得到任何帮助就太好了……
请耐心,我是一种MatLab lamer

接受的答案

图像分析
图像分析 2020年5月7日
13个评论
图像分析
图像分析 2020年10月23日
查看并根据需要进行调整:
clc;%清除命令窗口。
流('开始运行%s。m…\ n”,mfilename);
关闭全部%关闭所有数据(imtool.除外)
清晰;删除所有已存在的变量。或者clearvars,如果你想的话。
工作空间;%确保显示工作区面板。
格式长G.
格式紧凑的
fontsize = 22;
%--------------------------------------------------------------------------------------------------------
%读取映像
文件夹= PWD;
baseFileName =“eight.tif”
获取完整的文件名,前面加上路径。
fullFileName = fullfile(文件夹,baseFileName);
检查文件是否存在。
如果〜存在(fullfilename,“文件”
%文件不存在——在那个文件夹中没有找到它。
%通过剥离文件夹来检查文件的整个搜索路径(其他文件夹)。
fullFileNameOnSearchPath = baseFileName;%这次没有路径。
如果~存在(fullFileNameOnSearchPath“文件”
%仍然没有找到它。警报用户。
errorMessage = sprintf (“错误:%s在搜索路径文件夹中不存在。”, fullFileName);
uiwait (warndlg (errorMessage));
返回
别的
它在某个地方找到的。
folder = fileparts(哪个(fullfilenameonsearchpath));%确定文件夹的位置。
fullFileName = fullfile(文件夹,baseFileName);
结束
结束
grayImage = imread (fullFileName);
%获取图像的尺寸。
对于灰度图像,% numberOfColorChannels = 1,对于RGB彩色图像,% numberOfColorChannels = 3。
[rows, columns, numberOfColorChannels] = size(grayImage);
如果numberOfColorChannels > 1
这并不是我们所期望的那种真正的灰度,而是彩色的。
%使用所有通道的加权和创建灰度图像。
grayImage = rgb2gray (grayImage);
%替代方法:通过只取绿色通道将其转换为灰度,
%,它在典型的快照中是噪声最小的通道。
% grayImage = grayImage(:,:, 2);%选择绿色通道。
结束
%显示图像。
子图(2,2,1);
imshow (grayImage []);
标题(原始图像的“字形大小”字形大小,“翻译”“没有”);
impixelinfo;
hFig = gcf;
hFig。WindowState =“最大化”%可能无法在MATLAB的早期版本中工作。
drawn
%此图像需要倒置,以便螺栓是白色的
掩码= ~ imbinarize (grayImage);
%--------------------------------------------------------------------------------------------------------
图像分割百分比
%填补
= imfill(面具,面具“黑洞”);
%只提取大于1000的blob。
Mask = bwareaopen(Mask, 1000, 4);4的%连接
%显示掩码图像。
子图(2,2,2);
imshow(面具);
标题= sprintf (“面具”);
标题(标题,“字形大小”字形大小,“翻译”“没有”);
impixelinfo;
drawn
得到质心
道具= regionprops(面具,“重心”);
找到界限
边界= bwboundaries(面具);
得到每个边界的半径和角度
%并添加到道具结构中。
k = 1:长度(边界)
thisBoundary = {k}边界;
道具(k)。x = thisBoundary(:, 2);
道具(k)。y = thisBoundary(:, 1);
道具(k)。xCentroid =道具(k) .Centroid (1);
道具(k).ycentroid = props(k)。centroid(2);
子图(2,2,2);
持有
情节(道具(k)。道具(k) .yCentroid xCentroid,' r + '“MarkerSize”, 50岁,“线宽”2);
得到半径和角度。
道具(k)。半径=√(道具(k)。x - props(k). xcentroid). ^ 2 + (props(k))。y - props(k). ycentroid) ^ 2);
分子=道具(k)。y -道具(k) .yCentroid;
分母=道具(k)。x -道具(k) .xCentroid;
道具(k)。角= atand(分子/分母);
%绘图半径。
子图(2,2,3);
情节(道具(k) .radius,“- - -”“线宽”2);
网格
包含('像素索引'“字形大小”、字形大小);
ylabel (“半径”“字形大小”、字形大小);
标题(“半径”“字形大小”、字形大小);
持有
%情节角度。
次要情节(2、2、4);
情节(道具(k) .angles,“- - -”“线宽”2);
网格
包含('像素索引'“字形大小”、字形大小);
ylabel (“角”“字形大小”、字形大小);
标题(“角”“字形大小”、字形大小);
持有
结束
流('完成了%s.m ... \ n',mfilename);

登录评论。

更多的答案(0)

下载188bet金宝搏


释放

R2017b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!