人眼很容易辨别black来自其他颜色。但是计算机呢?
我在普通的A4纸上打印了一些色块。由于组成彩色图像有青色、品红色和黄色三种墨水,所以我设置每个块的颜色C=20%、C=30%、C=40%、C=50%以及其余两种颜色是 0。这是我的源图像的第一列。到目前为止,还没有黑(KCMYK)墨水应该可以打印。之后,我将每个点的颜色设置为K=100%,其余颜色为0以打印黑点。
你可能会觉得我的形象很奇怪而且很糟糕。事实上,图像被放大30倍,墨水如何cheat我们的眼睛可以看得清楚。色带妨碍我识别这些黑点(该点在 800 dpi 中仅打印为一个像素)。没有彩色背景,我曾经blur
and do canny edge detector
提取边缘。然而,当添加彩色背景时,只需这样做grayscale
and edge detector
因为条带的原因无法得到好的结果。为了解决这些问题,我的眼睛会怎样做?
我决定检查一下亮度源图像。我提到本文 http://alienryderflex.com/hsp.html和公式:
亮度 = sqrt( 0.299 R * R + 0.587 G * G + 0.114 B * B )
亮度更接近人类的感知,并且在黄色背景下效果非常好,因为与青色和品红色相比,黄色的亮度最高。但如何使青色和洋红色条尽可能明亮呢?预期的结果是所有条带都消失。
更复杂的图像:
C=40%,M=40%
C=40%,Y=40%
Y=40%,M=40%
C=40%、Y=40%亮度图像的FFT结果
任何人都可以给我一些去除色带的提示吗?
@natan 我试过了快速傅里叶变换法 https://stackoverflow.com/questions/16476367/grid-detection-in-matlab/16477706#16477706你建议了我,但我不太幸运在 x 轴和 y 轴上都达到峰值。为了像您一样绘制频率,我将图像大小调整为正方形。
我会将图像转换为 HSV 颜色空间,然后使用值通道。这基本上分离了颜色和亮度信息。
这是 50% 青色图像
然后你可以做一个简单的阈值来隔离这些点。
我很快就做到了这一点,我相信你会得到更好的结果。也许在图像中找到轮廓,然后删除任何小区域的轮廓,以过滤任何剩余的噪声。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)