Matlab 使用图片的清晰部分重新创建PSF

Matlab 使用图片的清晰部分重新创建PSF,matlab,image-processing,fft,blur,deconvolution,Matlab,Image Processing,Fft,Blur,Deconvolution,我正试图解开下图中模糊的部分 原始的PSF没有给出,所以我继续分析模糊的部分,看看是否有一个单词我能大致辨认出来。我发现我能在模糊的部分辨认出“of”。我剪掉了模糊的“of”和清晰部分的对应部分,如下所示 然后,我通过FFT的讲座思考,你用一个特定的模糊函数(频域)分割模糊(频域)来重建原始图像 我想,如果我能做到无模糊(频域)\模糊(频域),原始的PSF就可以恢复。请告诉我如何才能做到这一点 下面是我的代码: img=im2double(imread('C:\Users\adhil\Des

我正试图解开下图中模糊的部分

原始的PSF没有给出,所以我继续分析模糊的部分,看看是否有一个单词我能大致辨认出来。我发现我能在模糊的部分辨认出“of”。我剪掉了模糊的“of”和清晰部分的对应部分,如下所示

然后,我通过FFT的讲座思考,你用一个特定的模糊函数(频域)分割模糊(频域)来重建原始图像

我想,如果我能做到无模糊(频域)\模糊(频域),原始的PSF就可以恢复。请告诉我如何才能做到这一点

下面是我的代码:

img=im2double(imread('C:\Users\adhil\Desktop\matlabpics\image1.JPG');
模糊=imcrop(img,[205 541 13 12]);
未模糊=imcrop(img,[39 140 13 12]);
UB=FFT换档(无阻);
UB=fft2(UB);
UB=ifftshift(UB);
F_1a=零(尺寸(B));
对于idx=1:大小(模糊,3)
B=FFT换档(模糊(:,:,idx));
B=fft2(B);
B=ifftshift(B);
UBa=UB(:,:,idx);
tmp=UBa./B;
tmp=ifftshift(tmp);
tmp=ifft2(tmp);
tmp=FFT换档(tmp);
[J,P]=去盲(模糊,tmp);
结束
子批次(1,3,1);imshow(模糊);标题(“模糊”);
子批次(1,3,2);imshow(无障碍);标题(“原始无障碍”);
子批次(1,3,3);imshow(J);标题(“试图清除障碍”);
但是,此代码不起作用,我得到以下错误:

使用deconvblind时出现
错误
预期输入编号2 INITPSF为实数。
解盲>解析_输入时出错(第258行)
validateattributes(P{1},{uint8''uint16''double''int16''single'},。。。
解盲错误(第122行)
[J、P、NUMIT、DAMPAR、读数、重量、尺寸、等级、尺寸、FunFcn、FunArg]=。。。
test2中的错误(第20行)
[J,P]=去盲(模糊,tmp);

这是重建原始PSF的好方法吗?

我不是这方面的专家,但我已经对反褶积进行了一些研究,并编写了一个程序,在给定清晰图像和模糊图像时计算点扩散函数。一旦我用这个程序得到PSF函数,我就用它验证了它的正确性去卷积模糊的图像,效果很好。代码如下。我知道这篇文章非常古老,但希望它对某些人仍然有用

import numpy as np
import matplotlib.pyplot as plt
import cv2

def deconvolve(normal, blur):
    blur_fft = np.fft.rfft2(blur)
    normal_fft = np.fft.rfft2(normal)
    return np.fft.irfft2(blur_fft/(normal_fft))

img = cv2.imread('Blurred_Image.jpg')
blur = img[:,:,0]
img2 = cv2.imread('Original_Image.jpg')
normal = img2[:,:,0]

psf_real = deconvolve(normal, blur)


fig = plt.figure(figsize=(10,4))
ax1 = plt.subplot(131)
ax1.imshow(blur)
ax2 = plt.subplot(132)
ax2.imshow(normal)
ax3 = plt.subplot(133)
ax3.imshow(psf_real)
plt.gray()
plt.show()