mpe*_*kov 14 python opencv image-processing
我试图去除此图像中的正弦噪声:
这是它的DFT光谱(应用对数和任意强度缩放后):
我已经有一个巴特沃斯滤镜应用于此图像.它将淘汰中频峰值.加载后我正在注意将它从[0..255]缩放到[0..1.0].这是过滤器:
结果不是很好:
我的问题:
我拍摄了图像(裁剪)并从Gonzalez和Woods的数字图像处理书中过滤.在它们的示例中,通过滤波完全去除周期性噪声,并且图像的平均强度保持相同.
我的加载图像和过滤器,DFT,过滤,IDFT的源代码如下:
import cv
def unshift_crop(comp, width, height):
result = cv.CreateImage((width, height), cv.IPL_DEPTH_8U, 1)
for x in range(height):
for y in range(width):
real, _, _, _ = cv.Get2D(comp, x, y)
real = int(real) * ((-1)**(x+y))
cv.Set2D(result, x, y, cv.Scalar(real))
return result
def load_filter(fname):
loaded = cv.LoadImage(fname, cv.CV_LOAD_IMAGE_GRAYSCALE)
flt = cv.CreateImage(cv.GetSize(loaded), cv.IPL_DEPTH_32F, 2)
width, height = cv.GetSize(loaded)
for i in range(width*height):
px, _, _, _ = cv.Get1D(loaded, i)
#cv.Set1D(flt, i, cv.Scalar(px/255.0, 0))
cv.Set1D(flt, i, cv.Scalar(px/255.0, px/255.0))
return flt
if __name__ == '__main__':
import sys
fname, filt_name, ofname = sys.argv[1:]
img = cv.LoadImage(fname, cv.CV_LOAD_IMAGE_GRAYSCALE)
width, height = cv.GetSize(img)
src = cv.CreateImage((width*2, height*2), cv.IPL_DEPTH_32F, 2)
dst = cv.CreateImage((width*2, height*2), cv.IPL_DEPTH_32F, 2)
cv.SetZero(src)
for x in range(height):
for y in range(width):
px, _, _, _ = cv.Get2D(img, x, y)
px = float(px) * ((-1) ** (x+y))
cv.Set2D(src, x, y, cv.Scalar(px, 0))
cv.DFT(src, dst, cv.CV_DXT_FORWARD)
flt = load_filter(filt_name)
cv.Mul(dst, flt, src)
cv.DFT(src, dst, cv.CV_DXT_INV_SCALE)
result = unshift_crop(dst, width, height)
cv.SaveImage(ofname, result)
Run Code Online (Sandbox Code Playgroud)
编辑
原始源中存在一个错误,其中过滤器虚构组件被加载为零.这就是导致结果图像显得比实际更暗的原因.我修好了这个并评论了相关的一行.
使用@ 0x69提供的固定源和过滤器(是的,我知道它不是真正的巴特沃斯滤波器,但在这个阶段我很乐意尝试任何东西),这是结果:
比我开始时更好,但仍然不如我希望的那么好.谁能打败这个?我怀疑放入更多的凹槽以取出剩余的峰值可能会带来一些好处.
编辑2
我已经联系了作者.这是他们的回应:
问题是实验中使用的图像是浮点数,而书中显示的图像(以及下载中提供的原始图像)是8位.这是打印等所必需的.
为了复制实验,您必须从无噪声图像开始,然后添加自己的噪声.
我试过使用这样的修改过滤器:
我得到的是这个 - >
我不能完全解释结果,但我最好的猜测是通过与主图像信号交互产生的正弦噪声会以某种方式产生二次,三次......谐波噪声波.结果也远非理想,似乎仍然有一些噪音谐波仍在这里......顺便说一句,感谢有趣的问题.
编辑:
我的第二次尝试过滤器改进.过滤:
过滤结果:
似乎这次没有明显的正弦噪声模式可见.