检测圆的形象和写每个圆的位置(圆心)中心的形象

15的观点(30天)
我想检测图像中只有这三个圆圈,然后写每个圆使用一条线的位置是这样的:
我似乎从来没有得到确切的范围或sensivity和如何应用中心圆的形象。
14。png:
rgb = imread (“14. png”);
imshow (rgb)
d = imdistline;
删除(d);
gray_image = rgb2gray (rgb);
imshow (gray_image);
(中心、半径)= imfindcircles (rgb (250 1000),“ObjectPolarity”,“黑暗”)
(中心、半径)= imfindcircles (rgb (250 1000),“ObjectPolarity”,“黑暗”,“敏感”,0.97)
imshow (rgb);
h = viscircles(中心、半径);
(中心、半径)= imfindcircles (rgb (250 1000),“ObjectPolarity”,“黑暗”,“敏感”,0.98);
大小(中心)
删除(h);
h = viscircles(中心、半径);
(中心、半径、指标)= imfindcircles (rgb (250 1000),
“ObjectPolarity”,“黑暗”,“敏感”,0.98,“方法”,“二级”);
删除(h);
h = viscircles(中心、半径);
imshow (gray_image);
4评论
莫特Dinc艾哈迈德
莫特Dinc艾哈迈德 2021年5月30日
编辑:莫特Dinc艾哈迈德 2021年5月30日
对不起我没说清楚,我希望检测是准确的。有三个圈,我可以检测4(1额外的光),我试图找出如何检测这三个圆圈,他们没有到最近的纳米但体面的眼睛和我需要帮助来画出中心线的例子我分享。

登录置评。

接受的答案

图像分析
图像分析 2021年5月30日
试试这个:
%演示图像分析师,2021年5月。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
clearvars;
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 16;
流(运行% s的开始。m…\ n”,mfilename);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像。
文件夹= [];
baseFileName =“14. png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
rgbImage = imread (fullFileName);
(行、列,numberOfColorChannels) =大小(rgbImage)
%显示测试图像尺寸。
次要情节(2 2 1);
imshow (rgbImage []);
轴(“上”,“图像”);
标题= sprintf (“原始图像:“% s”,baseFileName);
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
%设置图属性:
%全屏放大图。
hFig1 = gcf;
hFig1。单位=“归一化”;
hFig1。WindowState =“最大化”;
%去掉工具栏和下拉菜单的图。
%设置(gcf“工具栏”,“没有”,“菜单”,“没有一个”);
%的标题栏提供一个名称。
hFig1。Name =的演示图像分析师”;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的面具。
[面具,maskedRGBImage] = createMask (rgbImage);
% 3最大团
掩码= bwareafilt(面具,3);
%填补漏洞。
= imfill(面具,面具“黑洞”);
%显示图象。
次要情节(2,2,2);
imshow(面具);
轴(“上”,“图像”);
标题(“面具”,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
持有;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
%测量半径和重心。
道具= regionprops(面具,“EquivDiameter”,“重心”);
半径=[道具。EquivDiameter) / 2
中心= vertcat (props.Centroid)
%显示原始图像。
次要情节(2、2、3);
imshow (rgbImage);
viscircles(中心、半径);
轴(“上”,“图像”);
标题(“最终结果”,“字形大小”字形大小,“翻译”,“没有”);
drawnow;
持有;
惠普= impixelinfo ();%设置状态栏看到当你鼠标值图像。
流(“做运行% s.m \ n”,mfilename);
函数[BW, maskedRGBImage] = createMask (RGB)
% createMask阈值从colorThresholder应用RGB图像使用自动生成的代码。
% (BW, MASKEDRGBIMAGE] = createMask (RGB)阈值图像RGB使用
%从colorThresholder应用。色彩和自动生成的代码
%范围内设置每个通道的色彩应用。
在BW %分割掩模返回,面具和复合
%在maskedRGBImage返回原始RGB图像。
%由colorThresholder程序自动生成的5月30 - - 2021
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%将RGB图像转换为选择的颜色空间
I = rgb2hsv (RGB);
%定义通道1基于直方图的阈值设置
channel1Min = 0.000;
channel1Max = 1.000;
%定义通道2基于直方图的阈值设置
channel2Min = 0.097;
channel2Max = 1.000;
%定义通道3基于直方图的阈值设置
channel3Min = 0.357;
channel3Max = 0.631;
%基于直方图阈值选择创建蒙版
sliderBW =(我(::1)> = channel1Min) &(我(:,:1)< = channel1Max) &
(我(::2)> = channel2Min) &(我(:,:2)< = channel2Max) &
(我(::3)> = channel3Min) &(我(:,:,3)< = channel3Max);
BW = sliderBW;
%初始化输出掩盖图像基于输入图像。
maskedRGBImage = RGB;
%设置背景像素,BW假为零。
maskedRGBImage (repmat (~ BW, [1 1 3])) = 0;
结束
你会得到更好的结果如果你修复图像捕获条件像我建议其他评论。
3评论
图像分析
图像分析 2021年5月30日
好,但行不通。为什么不呢?看到史蒂夫的博客。
解决办法:
(行、列,numberOfColorChannels) = (rgb)大小;
%绘制一个点在图像的中心(不是blob)
%的水平,垂直向下的1/6的形象。
y_center =行/ 2;
x_center =列/ 6;%为什么6 ? ? ? ? ? ? ? ?
持有;
情节(x_center y_center,“。”,“MarkerSize”,30);

登录置评。

更多的答案(0)

社区寻宝

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

开始狩猎!