如何检测纹理中断

时间:2017-05-23 15:30:22

标签: opencv image-processing feature-extraction pattern-recognition scikit-image

假设我们有许多彩色图像,它们是一些纹理图案的例子。很少发生这种纹理被破坏的情况。一些异物。检测这些罕见异常的最佳方法是什么?

我考虑过培训CNN,但是好的例子数量远远超过了不好的例子,所以我有疑虑。我开始研究灰度共生矩阵(GLCM)和局部二值模式(LBP),但我认为颜色信息可以在确定中断的发生中起重要作用。我可以从这些提取的特征(GLCM或LBP)中找到分布并计算新图像属于此分布的概率吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果没有看到一些示例图像,很难找出问题所在。原则上,您可以使用多种方法来检测纹理中断,即GLCM特征,LBP,法则掩模,矢量量化等。测量局部熵是一种可行的方法。考虑下面的图像,我们可以清楚地区分两种类型的纹理:

square textured object on a textured background

以下代码段读取图像,计算圆形邻域或给定半径public class SierpinskiTriangle { public static int SIZE = 1000; JFrame frame; JPanel panel; @SuppressWarnings("serial") public void display() { frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); panel = new JPanel() { @Override public void paint(Graphics g) { super.paint(g); paintSierpinskiTriangle(20, 20, 360, (Graphics2D)g); } }; panel.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { panel.repaint(); } }); frame.setLayout(new BorderLayout()); frame.add(panel, BorderLayout.CENTER); frame.pack(); frame.setSize(SIZE, SIZE); frame.setVisible(true); } public static void main(String[] args) { SierpinskiTriangle triangle = new SierpinskiTriangle(); triangle.display(); } public static void paintSierpinskiTriangle(int x, int y, int s, Graphics2D g) { g.drawLine(x, y, x+s, y); g.drawLine(x, y, x, y+s); g.drawLine(x+s, y, x, y+s); paintSierpinskiTriangle(x, y, s/2, g); paintSierpinskiTriangle(x+s/2, y, s/2, g); paintSierpinskiTriangle(x, y+s/2, s/2, g); } } 上每个像素的局部熵并显示结果:

25

从得到的熵图中可以清楚地看出,可以利用局部熵值来检测纹理中断。

local entropy values

相关问题