3

次の写真のぼやけた部分のぼかしを解除しようとしています。

ぼやけた部分のある画像

元の PSF が与えられていなかったので、ぼやけた部分を分析して、大まかに判別できる単語があるかどうかを調べました。ぼやけた部分の「の」がわかることがわかりました。以下に示すように、ぼやけた「の」と、透明な部分の対応する部分の両方を切り取りました。

ぼやけていない比較

そこで、FFT の講義で、ぼかした部分 (周波数領域) を特定のぼかし関数 (周波数領域) で分割して、元の画像を再現することを考えました。

Unblurred(周波数領域)\Blurred(周波数領域)ができれば元のPSFが取り出せるのではないかと考えました。どうすればこれを行うことができるかアドバイスしてください。

以下は私のコードです:

img = im2double(imread('C:\Users\adhil\Desktop\matlab pics\image1.JPG'));
Blurred = imcrop(img,[205 541 13 12]);
Unblurred = imcrop(img,[39 140 13 12]);

UB = fftshift(Unblurred);
UB = fft2(UB); 
UB = ifftshift(UB); 

F_1a = zeros(size(B));
for idx = 1 : size(Blurred, 3)
    B = fftshift(Blurred(:,:,idx));
    B = fft2(B); 
    B = ifftshift(B);

    UBa = UB(:,:,idx);
    tmp = UBa ./ B; 
    tmp = ifftshift(tmp); 
    tmp = ifft2(tmp); 
    tmp = fftshift(tmp); 
    [J, P] = deconvblind(Blurred,tmp);    

end

subplot(1,3,1);imshow(Blurred);title('Blurred');
subplot(1,3,2);imshow(Unblurred);title('Original Unblurred');
subplot(1,3,3);imshow(J);title('Attempt at unblurring');

ただし、このコードは機能せず、次のエラーが発生します。

Error using deconvblind
Expected input number 2, INITPSF, to be real.

Error in deconvblind>parse_inputs (line 258)
validateattributes(P{1},{'uint8' 'uint16' 'double' 'int16' 'single'},...

Error in deconvblind (line 122)
[J,P,NUMIT,DAMPAR,READOUT,WEIGHT,sizeI,classI,sizePSF,FunFcn,FunArg] = ...

Error in test2 (line 20)
    [J, P] = deconvblind(Blurred,tmp);

これは元の PSF を再現する良い方法ですか?

4

1 に答える 1