声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1804|回复: 6

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

[复制链接]
发表于 2009-6-2 09:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位达人  大家好
小弟我现在正在做用同态滤波复原图像的研究 由于我是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);
[M N]=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');
以上就是小弟的问题 希望高手指出  主要就是要减去的函数的确定  希望达人解决 谢谢各位
回复
分享到:

使用道具 举报

 楼主| 发表于 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);
[M N]=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 编辑 ]
发表于 2009-6-2 22:10 | 显示全部楼层
如果是真彩图像,
[M N]=size(Img);        %得大小
会出问题,

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

评分

2

查看全部评分

 楼主| 发表于 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);
[M N]=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.

请您指点 谢谢
发表于 2009-6-3 13:49 | 显示全部楼层
据我之前验证的情况看,
hImg=FImg.-H; 这条命令多一个点,应改为hImg=FImg-H;
还有就是FImg和D的维数不一致也会出问题。

评分

1

查看全部评分

 楼主| 发表于 2009-6-3 13:56 | 显示全部楼层
谢谢 您的指点
hImg=FImg.-H; 改为hImg=FImg-H; 之后
图像怎么变成黑屏了呢??
出现这个Warning: Divide by zero.
您知道如何解决么??
发表于 2009-6-3 14:09 | 显示全部楼层
至于图像成了黑屏,这跟你所用的算法有关,我没做研究,至于出现警告,可能是D矩阵里面有0元素。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-22 10:35 , Processed in 0.059129 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表