这是具有更好视觉的原始图像:我们可以在主骨架周围看到很多噪声,圆形物体,我想要将它们移除,并且不会影响主骨架。我不确定它是否叫噪音
我正在对图像进行去模糊处理,此图像是运动模糊内核,用于识别相机捕获图像时的相机运动。
ps:这个图像是一个案例的内核,我需要的是这里的一般方法。谢谢你的帮助
CVPR2014中有一篇名为“可分离内核的图像去模糊”的论文,谈到这一点,我想提取图像的主要骨架,使内核更加健壮,对不起在这里解释,因为我的英语不好< / p>
这里是真彩色灰度图像:
我希望它是这样的:
如何使用Matlab进行操作?
这里有一些其他内核映像:
答案 0 :(得分:2)
正如 @rayryeng 所解释的那样,中值滤波是清除图像中噪声的最佳选择,我在研究图像恢复时就意识到了这一点。但是,在您的情况下,您需要做的就是清除图像中的噪点。您希望更有可能消除图像中的火花。
我只是将单个阈值应用到您的嘈杂图像中以消除火花。
试试这个:
desIm = imread('http://i.stack.imgur.com/jyYUx.png'); % // Your expected (desired) image
nIm = imread('http://i.stack.imgur.com/pXO0p.png'); % // Your original image
nImgray = rgb2gray(nIm);
T = graythresh(nImgray)*255; % // Thereshold value
S = size(nImgray);
R = zeros(S) + 5; % // Your expected image bluish so I try to close it
G = zeros(S) + 3; % // Your expected image bluish so I try to close it
B = zeros(S) + 20; % // Your expected image bluish so I try to close it
logInd = nImgray > T; % // Logical index of pixel exclude spark component
R(logInd) = nImgray(logInd); % // Get original pixels without sparks
G(logInd) = nImgray(logInd); % // Get original pixels without sparks
B(logInd) = nImgray(logInd); % // Get original pixels without sparks
rgbImage = cat(3, R, G, B); % // Concatenating Red Green Blue channels
figure,
subplot(1, 3, 1)
imshow(nIm); title('Original Image');
subplot(1, 3, 2)
imshow(desIm); title('Desired Image');
subplot(1, 3, 3)
imshow(uint8(rgbImage)); title('Restoration Result');
我得到的是:
答案 1 :(得分:1)
我唯一可以看到的是两个图像之间不同的是,在对象的周边存在一些量化噪声/误差。这类似于salt and pepper noise,消除噪音的最佳方法是使用median filtering。中值滤波器基本上分析图像中的局部重叠像素邻域,对强度进行排序,并选择中值作为每个像素邻域的输出。盐和胡椒噪声通过随机选择像素并将其强度设置为黑色(胡椒)或白色(盐)来破坏图像像素。通过使用中值滤波器,对强度进行排序会将这些噪声像素放在较低端和较高端,通过选择中值,您将获得可能存在的最佳强度。
要在MATLAB中进行中值滤波,请使用medfilt2
函数。假设您已安装图像处理工具箱。如果你不这样做,那么我提出的建议是行不通的。假设你有它,你可以用以下方式调用它:
out = medfilt2(im, [M N]);
im
将是imread
中加载的图片,M
和N
是要分析的像素邻域大小的行和列。通过选择7 x 7像素邻域(即M = N = 7
),并直接从StackOverflow读取图像,这是我得到的结果:
将此图片与原始图片进行比较:
如果您还查看所需的输出,这或多或少会模仿您想要的内容。
另外,我使用的代码如下......只有三行!
im = rgb2gray(imread('http://i.stack.imgur.com/pXO0p.png'));
out = medfilt2(im, [7 7]);
imshow(out);
第一行我必须将图像转换为灰度,因为原始图像实际上是RGB。我不得不使用rgb2gray
来做到这一点。第二行使用7 x 7邻域对图像执行中值滤波,最后一行使用imshow
在单独的窗口中显示图像。
如果您想了解如何自己编写中值过滤算法,请查看我最近的帖子。提问者要求在不使用medfilt2
的情况下实施过滤机制,我提供了答案。
希望这有帮助。
祝你好运!