用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');
以上就是小弟的问题 希望高手指出主要就是要减去的函数的确定希望达人解决 谢谢各位
程序出错讨论
我运行下面的程序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 编辑 ] 如果是真彩图像,
=size(Img); %得大小
会出问题,
另外H=1/(pi*D)*sin(pi*D)*exp(-j*pi*D);应改为
H=1./(pi*D).*sin(pi*D).*exp(-j*pi*D); 您好 我把函数修改之后应用程序
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.
请您指点 谢谢 据我之前验证的情况看,
hImg=FImg.-H; 这条命令多一个点,应改为hImg=FImg-H;
还有就是FImg和D的维数不一致也会出问题。 谢谢 您的指点
hImg=FImg.-H; 改为hImg=FImg-H; 之后
图像怎么变成黑屏了呢??
出现这个Warning: Divide by zero.
您知道如何解决么?? 至于图像成了黑屏,这跟你所用的算法有关,我没做研究,至于出现警告,可能是D矩阵里面有0元素。
页:
[1]