图像处理——空间域(FFT)频域

首先,收藏一个讲的比较好的帖子

目的:
需要向图像增加额外的相位干扰,使图像模糊;类似于高斯模糊之类的
做法:

  1. 图像傅里叶变换到频域
  2. 单波长激光传播到的远场图像作为滤波器,归一到0-1;注意:如果影响极小,也就是远场是一个光斑,那么就再叠加就不行了,这里就舍弃这个滤波器 11.18: 远场图像经过傅里叶变换,然后位移到中心,图像取abs(即reaal2+imag2再开平方),再归一化到0-1,同样加一个极小值,然后再作为滤波器;这样就解决了光斑影响大的问题。
  3. 频域与滤波器相乘(类似低通:滤掉中心区域外高频的点,空间域中图像就模糊了)
  4. 傅里叶逆变换
  5. 还原做法:在2归一化时加上一个极小值使不为0,然后之后还原就直接将模糊图像进行傅里叶变换,频域除以滤波器就好了。

实现:

class ImgFft(object):
    def __init__(self):
        pass
    
    #远场图像转滤波器 0-1
    def img2filter(self,img2):
        _filter = (img2 - np.min(img2))/(np.max(img2) - np.min(img2)) + 0.00001
        np.where(_filter > 1,1,filter)
        sum_filter = np.sum(_filter)
        if sum_filter <  _filter.shape[0]*_filter.shape[0]*0.05*0.05:#相差小,都成光斑了
            print("无需矫正,相差小!")
            _filter.fill(1)
        return _filter

    #傅里叶变换
    def fft(self,img):
        fft_img = np.fft.fft2(img)
        fft_img = np.fft.fftshift(fft_img)
        return fft_img
    
    #反傅里叶变换
    def fft2img(self,fft):
        return np.fft.ifft2(fft)

    #图像频域叠加相差,(空间域卷积操作)滤波;得到模糊图像
    def  fft_imgblur(self,fft,_filter):
        #变模糊过程
        fft_change = fft* _filter
        return self.fft2img(fft_change)
    
    #模糊图像矫正到原fft
    def restore_fft(self,img_fitered,_filter):
        #较正过程
        inv_fft = np.fft.fft2(img_fitered)
        inv_change = 1.0*inv_fft/ _filter  #
        inv_change = np.fft.fftshift(inv_change)
        return inv_change
    
    #img2utf8
    def img2utf8(self,img):
        return  np.uint8(np.abs(img))

    #test
    def test_turn(self,img1,img2):
        _filter = self.img2filter(img2)
        fft1 = self.fft(img1)
        img_fitered = self.fft_imgblur(fft1,_filter)
        fft_restore = self.restore_fft(img_fitered,_filter)
        img_restore = self.fft2img(fft_restore)

        #show
        filter_img = self.img2utf8(_filter*255)
        img_fitered = self.img2utf8(img_fitered)
        img_restore = self.img2utf8(img_restore)

        cv2.imshow('filter_img',filter_img)
        cv2.imshow('img_fitered',img_fitered)
        cv2.imshow('img_restore',img_restore)
        cv2.imshow('source',img1)
        cv2.waitKey()

效果:
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值