[已解决] 运动模糊逆滤波代码问题

[复制链接]
Praony 发表于 2018-1-11 21:37:14
I = im2double(imread('lena.tif'));
subplot(1,3,1), imshow(I);
LEN = 30;
THETA = 0;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'circular', 'conv');
subplot(1,3,2), imshow(blurred);
R = deconvwnr(blurred,PSF);
subplot(1,3,3), imshow(R);
按照书上的代码,是把原本清晰的图像,转换成模糊,再通过逆滤波复原。
可是,在不知道原图的情况下,只有模糊图像,已知模糊长度,角度(把原图通过PSF模糊后保存,知道LEN,THETA),怎么通过逆滤波复原回来?
以下是我自己写的代码,恢复出来的图片看不了,
I = im2double(imread('lena_color_30_0.jpg'));
subplot(1,2,1), imshow(I);
LEN = 30;
THETA = 0;
PSF = fspecial('motion', LEN, THETA);
R = deconvwnr(I,PSF);
subplot(1,2,2), imshow(R);
请给我一点思路,谢谢。

最佳答案


zhangqinghao 发表于 2018-1-16 09:18:09
Praony 发表于 2018-1-15 23:05
我发现,如果是清晰-模糊-复原,R = deconvwnr(I,PSF);这个式子算出的R,是归一化的值,
而如果是把图片 ...

对于你从网上找的图像,你不可能知道具体参数,只能靠猜,怎么能猜准呢?
对于你保存的图像,double型变为uint8型,精确度降低,效果也会受到一些影响。
至于运动模糊用什么方法,你应该去查论文,而不是问我,不过我已经说过,逆滤波肯定不可行,你别在退化函数上费工夫了。

12 条回复


Angla2016 发表于 2018-1-12 09:54:01
思路挺对的

Praony 发表于 2018-1-14 23:20:34

能给我讲讲错在哪里吗?

Praony 发表于 2018-1-15 00:04:27

%% 读取原始图像
I=imread('lena_gray.jpg');
%% 运动模糊图像
LEN = 30;
THETA = 0;
%建立二维仿真线性运动滤波器
PSF = fspecial('motion', LEN, THETA);
%用PSF产生退化图像
J = imfilter(I, PSF, 'conv', 'circular');
figure, imshow(J);
%% 保存图片
imwrite(J,'lena_gray_30_0.jpg');
我是这样保存图片的,是因为保存的格式问题使得图片的数据丢失,才导致恢复不了图片吗?

Angla2016 发表于 2018-1-15 08:25:11
图像归一化后再保存

zhangqinghao 发表于 2018-1-15 09:15:32
逆滤波需要精确地知道退化函数,而且噪声也被忽略掉了,所以针对实际情况,很难精确地知道退化函数,而且很可能噪声不可忽略,所以逆滤波效果很差,这只是个理论上的处理方法,实际情况中没什么用处,你运行一下例程看看效果就好。

Praony 发表于 2018-1-15 22:44:42
zhangqinghao 发表于 2018-1-15 09:15
逆滤波需要精确地知道退化函数,而且噪声也被忽略掉了,所以针对实际情况,很难精确地知道退化函数,而且很 ...

请问下运动模糊的退化函数应该用哪个?可以直接用PSF吗?我是直接将清晰图片通过PSF得到模糊图片,所以知道len和theta,但是运行的时候,只有清晰-模糊-复原,可以恢复,把模糊的保存下来,通过 模糊-复原,就恢复不了,能告诉我为什么吗?

Praony 发表于 2018-1-15 22:54:31
Angla2016 发表于 2018-1-15 08:25
图像归一化后再保存

这样进行归一化后保存,对吗?
J = im2double(J);
figure, imshow(J);
%% 保存图片
imwrite(J,'lena_gray_15_0.jpg');
然后继续使用之前的代码进行复原。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

Angla2016 发表于 2018-1-15 22:58:26
对,自己多试试,这个函数什么意思,你查一下,不需要啥都问别人

Praony 发表于 2018-1-15 23:05:41
Angla2016 发表于 2018-1-15 22:58
对,自己多试试,这个函数什么意思,你查一下,不需要啥都问别人

我发现,如果是清晰-模糊-复原,R = deconvwnr(I,PSF);这个式子算出的R,是归一化的值,
而如果是把图片保存下来,或者是在网上找的运动模糊的图片,即 模糊-复原,R = deconvwnr(I,PSF);这个式子算出的R带有负数。好像也不能对这个R进行归一化处理。

alexyau 发表于 2018-1-16 08:07:34
清晰-模糊-复原,意味着你是知道真实的PSF的,所以你后面在复原时的效果相对会比较好
而当你在用网上找到的运动模糊的图片时,你是不知道真实的PSF,此时你若还用上面由“清晰-模糊-复原”得到的PSF,自然不会有好结果

zhangqinghao 发表于 2018-1-16 09:18:09
Praony 发表于 2018-1-15 23:05
我发现,如果是清晰-模糊-复原,R = deconvwnr(I,PSF);这个式子算出的R,是归一化的值,
而如果是把图片 ...

对于你从网上找的图像,你不可能知道具体参数,只能靠猜,怎么能猜准呢?
对于你保存的图像,double型变为uint8型,精确度降低,效果也会受到一些影响。
至于运动模糊用什么方法,你应该去查论文,而不是问我,不过我已经说过,逆滤波肯定不可行,你别在退化函数上费工夫了。
回复此楼

queliang 发表于 2018-5-31 14:05:54
Praony 发表于 2018-1-14 23:20
能给我讲讲错在哪里吗?

你这个确定不是维纳滤波吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表