2

我对matlab很陌生,但情况就是这样。我有一张海洋的卫星图像,里面有一小块土地和几艘船。使用阈值处理来制作二进制掩码和 bwlabel 我设法创建了一组与水上船只相匹配的标签。这是船(和陆地)上标签的叠加图像,因此您可以了解我的意思:

在此处输入图像描述

正如您从图像中看到的那样,标签包括船只以及它们两侧的一些较暗的旁瓣。我需要找到一种方法来创建一组新的标签,这些标签只覆盖船只而不是旁瓣。我不能只使用更亮的阈值,因为我有很多不同亮度的船的图像,其中一些会比其他船的旁瓣更暗。

所以我想我要问的是,有没有办法从这张图片中提取彩色部分,进一步分析它们(通过对各个部分进行阈值化,或使用直方图或其他方法)以创建一组仅包含船只的新标签,但还要保持这些新标签相对于原始图像的位置不变,以便我可以将它们再次叠加到原始图像上?如果是这样,怎么做?

谢谢!

4

2 回答 2

2

这里有几个问题。

1. 有没有办法从这张图片中提取彩色部分?

是的。

让你得到的标签图像bwlabelbeL和原始图像 be I。然后,S = regionprops(L,'BoundingBox');将为您提供与 中的每个区域关联的边界框L。用于I2 = imcrop(I,S(2).BoundingBox);提取 中的区域S(2)。您必须检查是否S(2)对应于中的标签2L如果不是,修复它是微不足道的)。

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的更多信息,请查看此处

于 2013-07-19T17:17:57.497 回答
0

您能否将旧图像乘以标记区域(或 im_label~=0,因为它们将具有不同的标签值)以删除不相关的信息,然后在删除背景后使用“whatever”方法再次处理图像?

于 2013-07-19T13:33:35.023 回答