图像上的纹理检测和区域属性


9

我有一个有趣的问题要解决。因此,例如,如果我们有一个包含两个纹理(A和B)的黑白图像,我想知道完全覆盖各个纹理的边界的像素值。

我考虑过使用互相关,这会给我图像上模板(图例)的位置簇,但是有没有办法使用它来获取边界的像素值(这些通常是不规则的)?另外,还有其他更好的方法吗?

一个真实的例子就是在显示一年中三个降雨水平的地图上检测降雨区域。为每个级别分配了图例中存在的纹理,该纹理用于在同一图像上进行纹理匹配。


4
如果您实际共享了示例以及您尝试过的一些初步解决方案,这将很有用
Ivo Flipse

3
一定要上传一些示例图片,以便我们了解您在做什么。像某些区域被实心填充,而其他区域则是阴影线?nps.gov/sagu/naturescience/images/...
endolith

如果您有matlab,则可以使用图像处理工具箱。否则,他们的网站仍然会很好地概述您可能要使用的标准算法,例如函数bwconncomp
怀特先生

Answers:


1

这是一个简单的过程:

  1. 将纹理测量值分配给图像中的每个区域。
  2. 使用区域标记/连接算法(或区域增长算法)将具有相同纹理度量的相邻区域合并在一起。
  3. 实现简单的边缘跟踪算法以跟踪每个区域的轮廓。

Law的纹理量度是用于确定图像纹理的较旧但仍有用的技术,它们可能足以使您在整个图像中将纹理A与纹理B区分开。请参阅Wikipedia文章中的“法律纹理能量度量”部分:

http://en.wikipedia.org/wiki/Image_texture

第一步,计算所有纹理量度并确定哪个特定量度(例如“边缘”或“斑点”)使您可以最轻松地将一个纹理与另一个纹理区分开。(如果发布一些图片,我可以帮助您确定纹理度量。)

如果只有两个纹理A和B,则可以将它们分别作为前景和背景,并且可以使用标准的区域标记算法。为了更容易查看处理中发生的情况,您可以通过将A纹素(纹理元素,少量纹理块)分配给白色,将B纹素分配给黑色,以生成新图像。然后,区域标记和/或轮廓跟踪算法将找到连接的白色和黑色区域。OpenCV中的findContours()函数可以很好地工作。

http://en.wikipedia.org/wiki/Connected-component_labeling

同一篇Wikipedia文章同时包括传统的多遍算法和单遍算法。我还没有实现那里描述的单遍算法,但是我已经使用了Chen和Chang的论文“使用轮廓跟踪技术的组件标记算法”中描述的单遍算法。Chen和Chang的论文还描述了可以快速实现的标准轮廓跟随算法。

如果您有两个以上的纹理,则在将纹理重新映射为颜色之后,可以使用分水岭均值平移算法将区域聚类在一起。尽管不必从纹理到颜色重新映射,但这确实使该过程更易于调试和理解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.