zys0748 发表于 2009-6-2 09:15

用Matlab同态滤波做图像恢复的问题 请高手进来指点

各位达人大家好
小弟我现在正在做用同态滤波复原图像的研究 由于我是matlab 初学者 有些方面不懂 还请高手指点一下
首先我先来 说一下原理
模糊的图像可以看成是清晰图像与模糊系统函数 的卷积
于是 把一幅图像先用psf函数进行模糊处理,然后变换到频域 就变成了清晰图像与模糊系统函数的乘积
在对模糊图像取对数变成相加的形式,然后减去模糊系统的函数,在取指数 这时候图像就会得到恢复
下面是我编的程序

imori=imread('F:\matlab\toolbox\images\imdemos\girl.bmp');
psf=fspecial('motion',7,0);
Img=imfilter(imori,psf,'symmetric')
%Img =rgb2gray(Img);
%Img =im2uint8(Img);
=size(Img);      %得大小   
figure;
imshow(Img);            %显示图
Img=double(Img);      %转换类型
FImg= fft2(Img)
lnImg = log(1+FImg);
H=????(请问 在这里,模糊系统函数如何让确定,应该怎么得到希望高手指点)
hImg=FImg.-H; (还有就是我这个程序还缺什么么?如果缺请高手指出 谢谢!!~)
gImg=exp(hImg);
Y=ifft2(gImg);
G=real(Y);   
figure,imshow(uint8((G)));
imwrite(G,'tt.bmp','bmp');
以上就是小弟的问题 希望高手指出主要就是要减去的函数的确定希望达人解决 谢谢各位

zys0748 发表于 2009-6-2 21:26

程序出错讨论

我运行下面的程序
imori=imread('F:\matlab\toolbox\images\imdemos\girl.bmp');
psf=fspecial('motion',7,0);
Img=imfilter(imori,psf,'symmetric')
%Img =rgb2gray(Img);
%Img =im2uint8(Img);
=size(Img);      %得大小   
figure;
imshow(Img);            %显示图
Img=double(Img);      %转换类型
FImg= fft2(Img)
lnImg = log(1+FImg);
for i=1:M
    for j=1:N
      D(i,j)=((i-M/2)^2+(j-N/2)^2); %点(i,j)到频率平面原点的距离
    end               
end
H=1/(pi*D)*sin(pi*D)*exp(-j*pi*D);
hImg=FImg.-H;
gImg=exp(hImg);
Y=ifft2(gImg);
G=real(Y);   
figure,imshow(uint8((G)));
imwrite(G,'tt.bmp','bmp');

出现的错误是
Error using ==> mrdivide
Matrix dimensions must agree.

是怎么回事请高手指点一下 需要怎么修改!~
小弟我最近做图像处理论文清高手指点不胜感激

[ 本帖最后由 ChaChing 于 2009-6-2 21:44 编辑 ]

xiezhh 发表于 2009-6-2 22:10

如果是真彩图像,
=size(Img);      %得大小
会出问题,

另外H=1/(pi*D)*sin(pi*D)*exp(-j*pi*D);应改为
H=1./(pi*D).*sin(pi*D).*exp(-j*pi*D);

zys0748 发表于 2009-6-3 13:36

您好 我把函数修改之后应用程序
imori=imread('F:\matlab\toolbox\images\imdemos\girl.bmp');
psf=fspecial('motion',7,0);
Img=imfilter(imori,psf,'symmetric')
%Img =rgb2gray(Img);
%Img =im2uint8(Img);
=size(Img);      %得大小   
figure;
imshow(Img);            %显示图
Img=double(Img);      %转换类型
FImg= fft2(Img)
lnImg = log(1+FImg);
for i=1:M
    for j=1:N
      D(i,j)=((i-M/2)^2+(j-N/2)^2); %点(i,j)到频率平面原点的距离
    end               
end
H=1./(pi*D).*sin(pi*D).*exp(-j*pi*D);
hImg=FImg.-H;
gImg=exp(hImg);
Y=ifft2(gImg);
G=real(Y);   
figure,imshow(uint8((G)));
imwrite(G,'tt.bmp','bmp');
出现错误
??? hImg=FImg.-H;
            |
Error: Missing variable or function.

请您指点 谢谢

xiezhh 发表于 2009-6-3 13:49

据我之前验证的情况看,
hImg=FImg.-H; 这条命令多一个点,应改为hImg=FImg-H;
还有就是FImg和D的维数不一致也会出问题。

zys0748 发表于 2009-6-3 13:56

谢谢 您的指点
hImg=FImg.-H; 改为hImg=FImg-H; 之后
图像怎么变成黑屏了呢??
出现这个Warning: Divide by zero.
您知道如何解决么??

xiezhh 发表于 2009-6-3 14:09

至于图像成了黑屏,这跟你所用的算法有关,我没做研究,至于出现警告,可能是D矩阵里面有0元素。
页: [1]
查看完整版本: 用Matlab同态滤波做图像恢复的问题 请高手进来指点