大约有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()
。
我试图至少在模型示例中获得一些必不可少的东西。看<我从文档拍张照片:
对于这张照片,我执行了这个脚本:
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]
那是什么?..我不明白