假设我们有许多彩色图像,它们是一些纹理图案的例子。很少发生这种纹理被破坏的情况。一些异物。检测这些罕见异常的最佳方法是什么?
我考虑过培训CNN,但是好的例子数量远远超过了不好的例子,所以我有疑虑。我开始研究灰度共生矩阵(GLCM)和局部二值模式(LBP),但我认为颜色信息可以在确定中断的发生中起重要作用。我可以从这些提取的特征(GLCM或LBP)中找到分布并计算新图像属于此分布的概率吗?
感谢您的帮助!
答案 0 :(得分:1)
如果没有看到一些示例图像,很难找出问题所在。原则上,您可以使用多种方法来检测纹理中断,即GLCM特征,LBP,法则掩模,矢量量化等。测量局部熵是一种可行的方法。考虑下面的图像,我们可以清楚地区分两种类型的纹理:
以下代码段读取图像,计算圆形邻域或给定半径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
从得到的熵图中可以清楚地看出,可以利用局部熵值来检测纹理中断。