我对matlab很新,但接下来就是这种情况。我有一个海洋的卫星图像,有一些土地和一些船只。使用阈值制作二进制掩码和bwlabel我已经设法创建了一组与水上船只相匹配的标签。这是船只(和陆地)上标签的叠加图像,因此您可以看到我的意思:
从图像中可以看出,标签包括船只以及它们两侧的一些调光旁瓣。我需要找到一种方法来创建一组新的标签,只覆盖船只而不是旁瓣。我不能只使用更亮的门槛,因为我有很多不同亮度的船只的图像,其中一些比其他船只的旁瓣更暗。
所以我想我要问的是,有没有办法从这个图像中提取彩色部分,进一步分析它们(通过对各个部分进行阈值处理,或使用直方图或其他)来创建一组新的标签只有船只,但也保持这些新标签相对于原始图像的位置完整,所以我可以将它们重新叠加到原始图像上?如果是这样,怎么样?
谢谢!
答案 0 :(得分:2)
这里有几个问题。
<强> 1。有没有办法从这张图片中提取彩色部分?
是。
让您从bwlabel
获得的标签图片为L
,原始图片为I
。然后,S = regionprops(L,'BoundingBox');
将为您提供与L
中每个区域相关联的边界框。使用I2 = imcrop(I,S(2).BoundingBox);
在S(2)
中提取区域。您必须检查S(2)
是否与2
中的标签L
相对应(如果没有,则修复这是微不足道的。)
<强> 2。进一步分析它们(通过对各个段进行阈值处理,或使用直方图或其他)来创建一组仅包含船只的新标签。
不是那么简单。这在很大程度上取决于您的图像。您可以使用MATLAB的默认阈值函数来使其工作。假设您为每个裁剪的图像获取二进制掩码(例如IB1
)。
第3。同时保持这些新标签相对于原始图像的位置不变,以便我可以将它们重新叠加到原始图像上吗?
是。由于您有一组边界框S
,只需在L
中替换新的蒙版。
L(round(S(1).BoundingBox(2):S(1).BoundingBox(2)+S(1).BoundingBox(4)),...
round(S(1).BoundingBox(1):S(1).BoundingBox(1)+S(1).BoundingBox(3))) = IB1;
其中I1
是改进的掩码。在分配给L
时,不要忘记将掩码中的所有非零值设置为标签索引。
有关使用round
的原因的更多信息,请look here。
答案 1 :(得分:0)
您能否将旧图像乘以标记区域(或im_label~ = 0,因为它们将具有不同的标签值)以删除不相关的信息,然后使用背景后的“任何”方法再次处理图像被删除?