在MATLAB中使用倒谱分析进行图像去模糊

时间:2013-12-15 23:58:20

标签: matlab image-processing

我正在尝试使用高斯滤波器对模糊图像进行去模糊,但在MATLAB中使用倒谱分析。到目前为止,我尝试使用“cceps”,但是有一个问题:

Error using  - 
Matrix dimensions must agree.

Error in cceps>rcunwrap (line 149)
y(:) = y(:)' - pi*nd*(0:(n-1))/nh;

Error in cceps (line 80)
[ah,nd] = rcunwrap(angle(h));

我的图片是512x512双倍。我只在倒谱分析中看到了阵列的用法。我正在尝试“cceps(y)-cceps(h)”(y:模糊图像,h:高斯滤波器)然后“icceps”以获得去模糊(原始)图像。
有没有办法使用cceps和icceps图像? 我也试过应用cceps算法;

Y=fftshift(fft2(y)); % Compute Fourier transform
CY=fftshift(ifft2(log(abs(Y)))); % Compute blurred image cepstrum
H=fftshift(fft2(h));
CH=fftshift(ifft2(log(abs(H)))); % Compute filter cepstrum
CX=CY-CH;
在这一行之后,我不知道如何采取逆倒谱。展开也存在一些问题,但我想不出任何办法。

1 个答案:

答案 0 :(得分:0)

cceps仅适用于1D序列。您可以使用2D DFT-> ABS(或能量) - > LOG() - > 2D IDFT程序来获得倒谱。我想你可能需要在逆fft之前进行fftshift:

CY=ifft2(fftshift(log(abs(Y)))); 
CH=ifft2(fftshift(log(abs(H))));

同样,unwrap也是Matlab中的一维函数。 2D解包有一些代码:Goldstein's branch cut method,Costantini的2D unwrapping method基于网络编程。