运动模糊与还原

运动模糊是指由于相机和物体之间的相对运动造成的模糊,又称为动态模糊。

一、已知模糊核的运动模糊

在已知模糊运动核的前提下,可通过核线性卷积的形式对图像添加运动模糊。

#-*- coding:utf-8 -*-
import cv2 as cv
import numpy as np
import math
from PIL import Image
import matplotlib.pyplot as plt

def motion_PSF(image_size, motion_angle, motion_dis):
    '''
    建立退化模型,仿真运动模糊
    INPUT -> 图像尺寸, 运动角度, 模糊尺度
    OUTPUT -> PSF(点扩散函数)
    '''
    PSF = np.zeros(image_size)
    x_center = (image_size[0] - 1) / 2
    y_center = (image_size[1] - 1) / 2
 
    sin_val = math.sin(motion_angle * math.pi / 180)
    cos_val = math.cos(motion_angle * math.pi / 180)

    # 将对应角度上motion_dis个点置成1
    for i in range(motion_dis):
        x_offset = round(sin_val * i)
        y_offset = round(cos_val * i)
        PSF[int(x_center-x_offset),int(y_center+y_offset)] = 1

    return PSF / PSF.sum()  #对点扩散函数进行归一化亮度

def make_blurred(img_arr, PSF, eps):
    '''
    对图片进行运动模糊
    INPUT -> 图像数组, PSF(点扩散函数), 噪声
    OUTPUT -> 模糊后的图像
    '''
    # 将空间域转化为频率域
    img_f = np.fft.fft2(img_arr)

    PSF_f = np.fft.fft2(PSF)

    blurred = np.fft.ifft2(img_f * PSF_f)
    blurred = np.abs(np.fft.fftshift(blurred))
    return blurred

def array_to_image(image_arr):
    '''
    数组还原为图片
    INPUT  -> 数组
    OUTPUT -> 单张图文件
    '''
    if len(image_arr.shape) == 3:  # 格式为(height(rows), weight(colums), 3)
        r = Image.fromarray(np.uint8(image_arr[:,:,0]))
        g = Image.fromarray(np.uint8(image_arr[:,:,1]))
        b = Image.fromarray(np.uint8(image_arr[:,:,2]))
        image = Image.merge("RGB", (r, g, b))
        return image        
    elif len(image_arr.shape) == 2:  # 格式为(height(rows), weight(colums))
        return Image.fromarray(np.uint8(image_arr))

img_arr = np.array(Image.open('tools/33.jpg').convert('L'))
PSF = motion_PSF((img_arr.shape[0], img_arr.shape[1]), 30, 15)
blurred = make_blurred(img_arr, PSF, 1e-4)

# 可视化
plt.imshow(array_to_image(blurred))
plt.show()

反之也可利用该核精确的去除该运动模糊。
使用逆滤波可以精确还原图像,但是它对噪声非常敏感。
最小均方差(维纳)滤波用来还原含有噪声的模糊图像,但是需要估计图像的信噪比(SNR)或者噪信比(NSR)。若无噪声,此时维纳滤波相当于逆滤波,恢复运动模糊效果是极好的。

def inverse(blurred, PSF, eps):
    '''
    逆滤波图像还原
    INPUT  -> 模糊图像, 点扩散函数, 噪声
    '''
    blurred_f = np.fft.fft2(blurred)

    PSF_f = np.fft.fft2(PSF) + eps  # 噪声功率

    result = np.fft.ifft2(blurred_f / PSF_f) # 计算F(u,v)的傅里叶反变换
    result = np.abs(np.fft.fftshift(result))
    return result

def wiener(blurred, PSF, eps, SNR=0.001):
    '''
    维纳滤波图像还原
    INPUT  -> 模糊图像, 点扩散函数, 噪声功率, 信噪比0.01
    '''
    blurred_f = np.fft.fft2(blurred)

    PSF_f = np.fft.fft2(PSF) + eps
    PSF_f_1 = np.conj(PSF_f) /(np.abs(PSF_f)**2 + SNR)

    result = np.fft.ifft2(blurred_f * PSF_f_1)
    result = np.abs(np.fft.fftshift(result))
    return result

img2 = inverse(blurred, PSF, 0)
img2 = wiener(blurred, PSF, 0)

二、未知模糊核的运动模糊

在实际应用场景是不知道的运动模糊的卷积核的。

1、Richardson-Lucy算法

Richardson–Lucy算法是一个在泊松噪声背景下用于图像恢复的迭代技术。迭代公式:



对于没有噪声干扰的理想模糊图像,迭代次数越多恢复的效果越好。每次迭代时,都会提高解的似然性,随着迭代次数的增加,最终将会收敛在最大似然性的解,但随着迭代次数的增加也会增加计算量。
对于含有噪声干扰的模糊图像,随着迭代次数的增加噪声被放大,而且迭代时间随之增长。当迭代超过50次后,恢复结果并没有明显改观。

2、基于GAN的去运动模糊

DeblurGAN是Orest Kupyn等人于17年11月提出的一种模型。他们结合GAN和多元内容损失来构建DeblurGAN,以实现对运动图像的去模糊化。
DeblurGAN

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容

  • #幸福是需要修出来的~每天进步1%~幸福实修08班~05~袁群芽# 20170629(11/99) 【幸福三朵玫瑰...
    乐Ma666阅读 215评论 1 1
  • 非常喜欢行动派,总是给人正能量,我们都在行动派的路上!
    张老师_酷阅读 528评论 0 4
  • 人生是修炼,执念走火入魔。 生活是因果,你我缘起缘落。 释文: 人...
    旺旺旺6969阅读 287评论 0 3