计算大量图片上气泡的平均大小

时间:2018-10-22 10:34:53

标签: matlab image-processing

我有这样的图片:enter image description here

大约有100张照片,它们之间的黑色气泡直径互不相同。我需要计算每张图片上气泡的平均直径。因此,最后,我应该具有100个元素的数组。

脚本的一般结构应为:

number_of_picture = 1
for-loop (from first image to the last)
get(picture_number_of_picture);
turn rgb image to binary one;
calculate average raw of bubbles;
number_of_picture = number_of_picture + 1;
end-loop

我已经完成了所有这些操作,所以我的脚本如下:

i=317;
last = 415;

for photo=i:last;end;
    s1 = 'DSC_0';
    s2 = num2str(photo);
    s3 = '.JPG';
    s = strcat(strcat(s1,s2), s3)

%%  

img = imread(s);
imshow(img);
img = img(1:end, 1:end, 1);

%% intensity corection
scaled = img*1.90;

%imshow(scaled);
level = 120;
binary = scaled>level;


%% get binary
new_binary = binary(from_upper:end, from_left:to_right, 1);

%stats = regionprops(binary,'Area')
%   'MajorAxisLength','MinorAxisLength');

imshow(binary);
%imshow(new_binary);
%s4 = 'new';
%s5 = strcat(s4, s);
%imwrite(new_binary,s5);
end

但是我在直径计算上遇到了麻烦。我认为获取圆形对象的特征尺寸是一项标准任务,但是文档中没有可用的解决方案。

例如,当我尝试使用参数“ Perimeter”执行该函数时,想到的函数regionprops()并没有给出正确的结果,希望通过该周长计算气泡的直径,但是输出确实很奇怪。

函数imfindcircles假定您已经知道圆形对象的平均大小,因此它确实可以提供帮助。

当然,有一个“可靠”的解决方案可以运行两个for循环并尝试手动计算大小,但是我不相信Matlab中没有内置的解决方案。

可能我的问题是我不知道这种语言的所有可能性,但是我的快速分析使我陷入了困境,所以我在问。

解决我的问题的最佳方法是什么?

编辑一个

老实说,我不太了解功能regionprops()。 我试图至少在模型示例中获得一些必不可少的东西。看<我从文档拍张照片:

enter image description here

对于这张照片,我执行了这个脚本:

 s = 'sample.jpg';
    img = imread(s);
    img = img(1:end, 1:end, 1);
    intensity = 1.00
    scaled = img*intensity;
    level = 20;
    binary = scaled>level;
    imshow(binary);
    stats = regionprops(binary,'EquivDiameter')

据我了解,世界应该只有3个直径,因为上面有三个圆圈: 但是

stats = [41.7347780298123, 81.7510511878280, 111.057964459329, 101.710723628205, 24.0955853300814]

那是什么?..我不明白

0 个答案:

没有答案