水平匀速直线运动模糊图像复原实验 您所在的位置:网站首页 匀速直线运动的公式及图像怎么画 水平匀速直线运动模糊图像复原实验

水平匀速直线运动模糊图像复原实验

2024-06-26 07:20| 来源: 网络整理| 查看: 265

近期花了点时间学习图像复原,研究了一下最基本的水平匀速直线运动图像复原方法,在此总结一下。不当之处,还请大家批评指正。

研究背景:

变速非直线运动在某些条件下可被分解为匀速直线运动,从而我们可以将变速非直线运动模糊过程简化为匀速直线运动模糊过程。在此基础上,我们再次将匀速直线运动模糊过程简化为水平匀速运动模糊过程。

具体问题:

自己亲手拍摄的图片:图一 在这里插入图片描述 让其运动模糊(最初老师的建议是拍10张照片叠加,自己亲身实验后,效果很差,决定选用一个更简单的方法让其模糊),具体做法:将图一错位叠加,具体过程如下:每次将图1向右平移10个像素,用0填充空出来的像素点.如此平移9次,再将得到的10张照片叠加,把得到的像素值变换到0~255.得到图二: 在这里插入图片描述 下面开始复原:在研究及尝试逆滤波、维纳滤波和约束最小二乘滤波后,决定使用约束最小二乘滤波进行复原。 具体的复原过程参考了下面几篇文章: https://blog.csdn.net/qq_44310495/article/details/109539704 https://blog.csdn.net/qq_42240908/article/details/112745898 https://blog.csdn.net/weixin_41919571/article/details/111221283

原理部分:

构造约束优化模型(时域): 在这里插入图片描述 频域内的表示: 在这里插入图片描述 用拉格朗日乘子法解得: 在这里插入图片描述 a=0就是一般的约束优化模型。

代码部分

手动模糊图片:

#模糊图片 import matplotlib.pyplot as plt import numpy as np import matplotlib.image as img data = img.imread("1.jpg") data = data[:,:,0] newdata = np.zeros_like(data,dtype="int64") l, w = data.shape v = 20 num = 10 for i in range(num): datatemp = np.zeros_like(data,dtype="int64") #print((datatemp[:,10*i:,:].shape), (data[:,:w-10*i,:]).shape) datatemp[:,v*i:] = data[:,:w-v*i] newdata += datatemp for i in range(num): newdata[:,10*i:10*(i+1)] = newdata[:,10*i:10*(i+1)]/(i+1) newdata[:,10*num:] = newdata[:,10*num:]/num newdata = newdata.astype(np.uint8) print(newdata.shape,type(newdata)) newdata.tofile("uniadd20.raw") plt.figure() plt.subplot(121) plt.imshow(data,cmap="gray") plt.subplot(122) plt.imshow(newdata,cmap='gray') plt.show()

约束最小二乘复原(改了拉普拉斯算子部分,这是本文的创新部分):

#约束最小二乘复原 # 利用最小二乘法复原图像 import cv2 import numpy as np from numpy import fft from matplotlib import pyplot as plt import cmath def degradation_function(m,n,a,b,T): ''' 用于得到退化矩阵 :param m: 图像形状的第一个参数 :param n: 图像形状的第二个参数 :param a: 竖直方向的偏移量 :param b: 水平方向的偏移量 :param T: 避免除数为0添加的一个极小量 :return:退化函数 ''' P = m / 2 + 1 Q = n / 2 + 1 Mo = np.zeros((m, n), dtype=complex) for u in range(m): for v in range(n): temp = cmath.pi * ((u - P) * a + (v - Q) * b) if temp == 0: Mo[u, v] = T else: Mo[u, v] = T * cmath.sin(temp) / temp * cmath.exp(-1j * temp) return Mo def image_mapping(image): #把图像大小转换到200)]=0 res2.tofile("result.raw") plt.figure() plt.subplot(131) plt.imshow(img,cmap='gray') plt.xlabel('原图', fontproperties='FangSong', fontsize=12) plt.subplot(132) plt.imshow(res1,cmap='gray') plt.xlabel('复原后的图', fontproperties='FangSong', fontsize=12) plt.subplot(133) plt.imshow(res2,cmap='gray') plt.xlabel('复原后的图直方图均衡化', fontproperties='FangSong', fontsize=12) plt.figure() plt.imshow(res2,cmap="gray") plt.show() 实验结果:

图三:复原图(左图a=-2,中图a=0,右图a=2) 图三:复原图(左图a=-2,中图a=0,右图a=2) 下面放大细节:看较暗区域的C和V 在这里插入图片描述 右图的字母C最为清晰,相对来说复原清晰度的最好. 在这里插入图片描述 挑较亮区域的数字6: 在这里插入图片描述 左图的数字最清晰,中间的数字其次,右图的数字最模糊.

总结:

构造了约束最小二乘方法对水平运动的图像进行了复原.从复原的结果可以发现该方法基本复原了图片的文本内容,且文本内容清晰可辨认.在复原图像细节方面,若目标区域在原图,选用a>0的约束优化模型,可以得到更为清晰的复原图像;若原图整体较亮,选用a



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有