我想从图像中删除噪音。我给出的图像是一个.mat文件,但它非常复杂,因为当我加载mat文件时,没有图像可以看到,然后我用imwrite使它成为jpg
imwrite(destroyedImg, 'fr.jpg');
但是当我使用imshow时,我只能在白色背景中获得彩色圆点!
有没有办法找出如何清除这张照片中的噪音?! 我不允许使用内部功能,而是自己构建一个!但我无法弄清楚那种噪音然后将其删除!我还必须以RGB格式返回“清晰图像”而不是灰度!
这是我的一些代码
clear all; close all;
load('image_destroyed.mat');
imwrite(image_destroyed, 'fraou.jpg');
img = imread('fraou.jpg');
subplot(2,2,1), imshow(img)
title('Fraou');
H = fspecial('average',[3 3]);
average = imfilter(img, H, 'replicate');
subplot(2,2,2), imshow(average);
title('average');H = fspecial('gaussian',[5 5]);
average = imfilter(img, H, 'replicate');
subplot(2,2,3); imshow(average);title('gaussian');
H = wiener2(img,[5 5]);
subplot(2,2,4); imshow(H)
title('wiener 5x5');
答案 0 :(得分:2)
请勿imwrite
使用'jpg'
来获取您的图片 - 这只会引入文物。
您的输入图片的类型为double
,其值超出范围[0..1]
,因此会产生混淆。
load('image_destroyed.mat');
image_destroyed = image_destroyed / 255.0; % back to [0..1] range
imshow( image_destroyed ); % should be meaningful now.
答案 1 :(得分:0)
以下代码(假设image_destroyed
是image_destroyed.mat
中包含的变量)可能是造成此问题的原因:
load('image_destroyed.mat');
imwrite(image_destroyed, 'fraou.jpg');
img = imread('fraou.jpg');
最佳这相当于img = image_destroyed;
,因此不需要。这种写入/读取过程实际上可能会通过不适当的缩放或剪切,压缩等方式进一步降低图像质量,这是可能的(并且很可能会出现奇怪的结果)
对于MATLAB图像处理功能,使用双精度时,应确保数据在0和1之间缩放。