在 OpenCV 中检测(并拒绝)从 computer/tv 屏幕拍摄的失真图像

Detecting (and rejecting) distorted images taken of computer/tv screens in OpenCV

我的一些算法依赖于根据检测到的重要水平线的数量来分割图像,从计算机屏幕或监视器拍摄的图像可能会出现问题,因为存在的失真会导致二值化效果差和定义不明确的区域。

监视器的摄像头捕获:

理想的情况是相机捕获的图像在没有通过监视器捕获导致的失真的情况下呈现(因为它以数字方式显示),但是是否可以使用 opencv 检测以这种方式捕获的图像,因此如果是这种情况则拒绝它(因为它无法处理)?

传感器(相机)将观察到的连续场景离散化为不同的像素。 您引用的麻烦图像源,LCD / OLED 数字显示器和 CRT,将场景离散为它们自己的像素, 所以我们有双重离散化, 互相殴打。 这说明了示例图像中可见的烦人的波纹图案。

显然您希望检测此类模式。考虑使用 FFT。 选择线段长度 L 和线段中心位置。 然后将一条线旋转几个角度,从段中读取像素并将它们交给 FFT。 莫尔图案将表现出至少一个角度的周期性。 并且附近的段中心,以相同的角度,将表现出相似的周期性。

也许这是一个已解决的问题? https://github.com/AmadeusITGroup/Moire-Pattern-Detection https://github.com/AmadeusITGroup/Moire-Pattern-Detection/blob/master/src/positiveImages/355_letterbox1024.jpg

但也许“拒绝”根本不是您的真正目标。 告诉我们故障模式,当您的算法遇到来自有问题的来源的图像时会出现什么问题。 我们可以通过 运行 对图像进行轻度高斯模糊来处理离散化吗? 可能之后是不清晰的掩蔽?


您没有提到您是否可以控制图像的获取方式。 获取一对“同一场景”的图像, 时间上相隔一秒左右, 将为您提供 lots 的更多信息。 如果传感器安装在三脚架上, 考虑将其移动一毫米左右 在拍摄第二张图像之前。