OpenCV INPAINT_NS图像修复方法产生异常伪影问题咨询
OpenCV INPAINT_NS图像修复方法产生异常伪影问题咨询
我在做项目的时候尝试用OpenCV提出的图像修复方法,结果有点出乎意料,尤其是NS(INPAINT_NS)这个方法——它在蒙版区域的中间生成了奇怪的线条。
我看到有论文是这么描述这个方法的:
在用户选择未知区域后,算法首先沿着从已知区域到未知区域的边缘遍历,自动把信息传输到修复区域。它利用了等照度线(也就是图中那些连接光强度或亮度相同点的线条)。填充的时候,会让到达未知区域边界的等照度线在内部延续,以此实现信息向未知区域中心的平滑过渡。
为了轻松复现这些伪影,我特意做了一张测试图,里面是旋转渐变圆的阵列,还有旋转的蒙版条:
- 测试阵列图像
- 测试蒙版图像
之后我用这段代码做了修复:
import numpy as np import cv2 as cv2 image = cv2.imread('testing_array.png', cv2.IMREAD_GRAYSCALE) mask = cv2.imread('testing_mask.png', cv2.IMREAD_GRAYSCALE) dst = cv2.inpaint(image,mask,2,cv2.INPAINT_NS) cv2.imwrite("testing_output.png",dst)
看修复结果就很奇怪:当渐变是垂直方向的时候,修复质量特别好,但只要渐变方向一改变,效果就垮得特别快。可按照论文里的描述,这个方法应该能处理非严格垂直的渐变才对。
修复输出图像
我现在搞不清楚,这种情况是这个方法本身的预期表现,还是我得去排查是不是实现层面出了问题?
使用的版本信息:
- Python: 3.13.1
- OpenCV: 4.11.9
备注:内容来源于stack exchange,提问作者Ben Banks
相关产品推荐
相关产品推荐

