在灰度图像中的磁盘数量

3次浏览(过去30天)
白木bba
白木bba 2014年4月9日
编辑: 白木bba2014年4月13日
我试图找到这个图像中的黑磁盘的数量。我尝试过“regionprops”,但问题是首先我需要将图像转换为二进制(在分辨率或精度上没有显著损失),然后使用此函数。此外,“区域道具”不能很好地区分“触摸盘”。我使用的是R2014a版本。
任何帮助或意见将不胜感激。最好,白木

接受的答案

图像分析
图像分析 2014年4月9日
对于这样一张图像,所有的斑点都非常接近于相同的大小,您只需简单地设置阈值来找到整个质量,然后除以单个斑点的面积。这将为您提供一个非常准确的计数。还有其他方法,如bwulterode()或 标记控制流域分割 但我认为它们可能不那么准确,而且更复杂。
8的评论
白木bba
白木bba 2014年4月12日
编辑:白木bba 2014年4月13日
代码很棒!谢谢。几个问题(如果你愿意,我可以在我下载文件的页面上问他们):
1 - 是否有一种方法可以计算出阈值的近似值?现在我是通过(用我的眼睛)比较实际图像和二进制图像来做的!我添加了一个循环,以防我知道曲面分数,但这可能不是情况。以下是我的做法:
abs (1-sum (sum (binaryImage)) / 1200 ^ 2-VF) > 0.01
如果1-sum (sum (binaryImage)) / 1200 ^ 2 > VF
thresholdValue = thresholdValue-1;
binaryImage = originalImage > thresholdValue;
其他的
thresholdValue = thresholdValue + 1;
binaryImage = originalImage > thresholdValue;
结束
我+ 1 =
结束
2 - 现在,磁盘的中心还没有保存。在我自己的代码中,我使用了for循环来保存它们。我为一个非常简单的3D图像写了这段代码,其中每个2D横截面(即image (:,:, I))就像你的代码中的coins.png。我还假设我知道磁盘的数量。在您的代码中是否有其他方法实现此功能?
function [Centroid_f] = Centroid_finder(Image,n_of_F)
%这个函数的输入是:
图像=一个三维二进制矩阵
% n_of_F=矩阵中光纤数量/磁盘数量/气缸数量
%输出是纤维在基体内的质心
Size3 =大小(图片);
大小= Size3 (3);
Centroid_f = 0 (n_of_F 2大小);
k = 1:大小
C =图像(:,:,k);
cc = bwconncomp(C);
S = regionprops(cc,“PixelIdxList”“重心”);
%的停顿
我= 1:n_of_F
Centroid_f(我:k) = s (i) .Centroid;
结束
结束
结束
3 - 我如何改变代码,使输入可以是一个3D灰度图像?我觉得这很难!我在考虑从3D矩阵中选择n个部分来构造n个二维灰度图像。然后,为每个部分使用您的代码。即使在这种情况下,我可能也必须运行该代码至少100次!这是一个好主意,把整个代码在一个“for”循环(因为我将知道我有多少部分/2D图像),然后运行它?例如:
i = 1: n
...
Image2D (i) = imread(['节'num2str(我),”中将“]);
...
结束
4-我如何跟踪中心的运动?例如,假设我移动一张图像中的磁盘并创建另一张图像。现在,如何连接对应的磁盘?
问候,

登录评论。

更多答案(0)

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!