在二值图像中确定物体面积的问题

2次浏览(过去30天)
我在试着计算一场大火蔓延到一个区域的面积。我有不同时间步长的框架。我处理红外图像并将其转换为二值图像。然而,当我计算燃烧面积时,它应该随着时间的推移而变大,从一个特定的时间步到另一个时间步,我得到了一个更小的面积。我使用函数“bwarea”来计算有像素“on”的区域。我在这里附加了两个带有对象边界的二进制图像(烧毁区域),其中很明显,第2帧上的区域比第1帧大,但“bwarea”的结果显示第2帧的区域为~2300,第1帧为~2800
第一帧:
Frame2:
为了排除这些可能性:
  • 有一个以上的物体在图像>>我肯定我在考虑正确的物体(最大的一个)
  • 这两幅图像的大小和分辨率完全相同
有人知道为什么会这样吗?
下面是部分代码
BI{i} = imclose(BI{i},strel(“磁盘”6));
BI{i} = imfill(BI{i},“黑洞”);
BI{i}(MaskROI == 0) = 0;
diff = abs (BI{我}BI张{});
BI{我}= BI张{}+差异;
BI{i} = imclose(BI{i},strel(“磁盘”6));
BI{i} = imfill(BI{i},“黑洞”);
BI{i}(MaskROI == 0) = 0;
[Bn,L,N] = bwboundaries(BI{i},“noholes”8);
图;
imshow(label2rgb(L, @jet, [.]5 .5 .5])
持有
k = 1:长度(Bn)
boundary = Bn{k};
情节(边界(:,2),边界(:1),' w '“线宽”, 2)
结束
持有
SizeDetFires = 0 (1, N);
s = 1: N
SizeDetFires (1, s) = bwarea (Bn{年代,1});
结束

接受的答案

图像分析
图像分析 2019年4月8日
如果你想要所有的区域,使用regionprops():
props = regionprops(binaryImage,“区域”);
allAreas =[道具。]区)
totalArea = sum(allAreas);
或者你可以对二值图像求和
totalArea = sum(binaryImage(:)))
如果你想要更多的帮助,附上你的两个原始二进制图像(不是伪彩色RGB图像)。
1评论
Abdelrahman Abouali
Abdelrahman Abouali 2019年4月15日
谢谢,有用,但事实上我用了" polyarea “这对我来说很有效

登录评论。

更多答案(1)

粘土Swackhamer
粘土Swackhamer 2019年4月8日
您可以尝试运行相同的代码,除了使用bwarea之外,您可以尝试将图像中的所有像素相加。因为在二值图像中,你可以让代表火的像素为1或0,你可以直接根据它们的和计算面积。这里有一个例子来说明我的意思。
I = imread(“rice.png”);
imshow(我)
Ibw = imbinalize (I);
imshow (Ibw)
areaRice = sum(sum(Ibw))
这假设你所有的像素都是相等的面积,但你得到了要点。
不确定这是否适合你,但值得一试。

社区寻宝

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

开始狩猎!

翻译的