次の写真のぼやけた部分のぼかしを解除しようとしています。
元の 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 を再現する良い方法ですか?