确定blob和过滤面积

18视图(30天)
杰森
杰森 2023年1月22日
评论道: 杰森 2023年1月25日
你好,我试图确定的中心在下图。虽然在每个下降有一个明亮的区域,我不关心这个。
我分析失败的时候中间图片的下降(二进制)接触大白色的圆(绿线)。
1:我怎样才能一滴包含这动人的边界
这是我的代码。
我= getimage (app.UIAxes);
pos = myfigure(应用程序、1450、520);%我自己的函数
figA =图(“位置”、pos);
m = uimenu (figA标签=“我的另存为”);
m。MenuSelectedFcn = @app.mysavefunc;
ax₁=情节(1、3、1);
myImagesc (app, ax₁, IM);%我的版本的显示亮度图像
标题(ax₁,原始图像的);
%使用自适应阈值作为不同的背景
BW = imbinarize (IM,“自适应”,“ForegroundPolarity”,“黑暗”,“敏感”,0.4);
BW = imcomplement (BW);
ax2 =情节(1、3、2);
myImagesc (app, ax2 BW);
标题(ax2,“Imbinarise”);
ax3 =次要情节(1,3,3);
BW = imclearborder (BW);%澄清边界
BW = bwareafilt (BW (5000 100000));%确定不通过小范围
保持= bwareafilt (BW, 10);%允许高达十大对象
保持= imfill (,“洞”);%填补任何漏洞
myImagesc (app, ax3,保持);
标题(ax3,“bwareafilt”);
S = regionprops(保持,“区域”,“重心”)
[sy, ~] =大小(年代)
质心= S.Centroid
持有(ax2,“上”);
% cl = {“r +”,“b +”,‘m +’,‘r *’,‘b *’,‘m *’,‘c +’,‘c *};
我= 1:sy
xc = S(我).Centroid (: 1);yc = S(我).Centroid (:, 2);
ReportMessage(应用程序,“区域”num2str(我),“=”,num2str(我).Area),”,xc = 'num2str (xc“% .1f”),”,yc = 'num2str (yc“% .1f”)))
情节(ax2, xc、yc' r + ');%情节(ax2, xc、yc cl{我});
结束
感谢任何帮助
2的评论
杰森
杰森 2023年1月23日
编辑:杰森 2023年1月24日
嗨,马特,给你。

登录置评。

接受的答案

图像分析
图像分析 2023年1月24日
尝试连接。
%演示图像分析
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 16;
markerSize = 40;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入测试图像
文件夹= [];
baseFileName =“im.png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
grayImage = imread (fullFileName);
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
流(“这不是真正的灰度像我们预期——这是颜色\ n”);
%提取蓝色通道。
grayImage = rgb2gray (grayImage);
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%在背景图像
文件夹= [];
baseFileName =“我background.png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
backgroundImage = imread (fullFileName);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2、3、1);
imshow (grayImage []);
impixelinfo;
轴(“上”,“图像”);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
%更新图片的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
%最大化窗口。
g = gcf;
g。WindowState =“最大化”;
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2、3、2);
imshow(分辨率、[]);
impixelinfo;
轴(“上”,“图像”);
标题(的背景图片,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%将两
correctedImage =双(grayImage)。/双(分辨率);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2、3、3);
imshow (correctedImage []);
impixelinfo;
轴(“上”,“图像”);
标题(背景校正图像的,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示柱状图
次要情节(2、3、4);
直方图(correctedImage);
网格;
标题(背景校正图像的直方图,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的阈值来创建面具
掩码= ~ (correctedImage > = 0.9 & correctedImage < = 1.1);
%去掉斑点接触边界。
掩码= imclearborder(面具);
% 6大气泡。
掩码= bwareafilt(面具,6);
%填补blob。
= imfill(面具,面具“黑洞”);
次要情节(2、3、5);
imshow(面具);
impixelinfo;
轴(“上”,“图像”);
标题(“面具与质心图像标记的,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的地区,直径和重心。
道具= regionprops(面具,“区域”,“重心”,“EquivDiameter”);
allAreas = [props.Area]
allDiameters = [props.EquivDiameter]
xy = vertcat (props.Centroid);
%情节质心图像。
xCentroids = xy (: 1);
yCentroids = xy (:, 2);
持有;
情节(xCentroids yCentroids,' r + ',“线宽”3,“MarkerSize”,20)
5个评论
杰森
杰森 2023年1月25日
是的,我猜它可能太困难,但不管怎样感谢分享你的例子
杰森

登录置评。

答案(1)

图像分析
图像分析 2023年1月23日
我将尝试得到一个图片没有下降,然后做一个背景校正除以。全局阈值就会更好的工作。请看附呈的背景校正演示。
如果你需要更多的帮助,附上你的液滴图像和背景图像没有任何水滴回形针图标。

社区寻宝

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

开始狩猎!