image - MATLAB 分析图像的某些部分

标签 image matlab image-processing

我对 matlab 还很陌生,但情况是这样的。我有一张海洋的卫星图像,其中有一些陆地和一些船只。使用阈值制作二进制掩码和 bwlabel,我成功创建了一组与水面上的船只相匹配的标签。这是船(和陆地)上标签的叠加图像,这样您就可以明白我的意思:

enter image description here

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

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

谢谢!

最佳答案

这里有几个问题。

<强>1。有没有办法从该图像中提取彩色部分?

是的。

让你从bwlabel获得的标签图片是L原始图像为 I 。然后,S = regionprops(L,'BoundingBox');将为您提供与 L 中每个区域关联的边界框。使用I2 = imcrop(I,S(2).BoundingBox);提取 S(2) 中的区域。您必须检查是否 S(2)对应标签2L (如果没有,解决这个问题很简单)。

<强>2。进一步分析它们(通过对各个分段进行阈值设置,或使用直方图或其他方式)以创建一组仅包含船只的新标签。

没那么简单。这很大程度上取决于您的图像。您可以使用 MATLAB 的默认阈值函数来使其发挥作用。假设您获得每个裁剪图像的二进制掩码(例如 IB1 )。

<强>3。还要保持这些新标签相对于原始图像的位置不变,以便我可以将它们再次叠加到原始图像上?

是的。由于您有一组边界框 S只需更换 L 中的新 mask 即可。

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 .

关于image - MATLAB 分析图像的某些部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17745367/

相关文章:

python - 将大块文本转换为图像的算法? (由图像边缘定义)

python - 如何使用 python 编程使用 opencv 缩放罗技网络摄像头 c930e?

image - 通过 ImageMagick 或其他方式对图像序列进行归一化?

css - 如何将图像放在表格单元格内div的右侧

java - 在 java 中,如何将 java.awt.image.BufferedImage 写入 8 位 png 文件?

python - 使用 Anaconda 安装 "MATLAB Engine for Python"时出现问题

matlab - 检查和计算逻辑变量向量中的零或一的有效方法

matlab - 计算二维数组每一行中非 NaN 值的数量

php - 从数据库中旋转图像并保存到数据库 blob 类型

image - 区分物体?