如何消除图像中对象边缘附近的噪声

时间:2011-07-05 03:54:30

标签: matlab image-processing computer-vision background-color image-segmentation

我有这样的图像:

Input image containing noise

我想删除对象边缘附近的背景(A部分)。我打算使用颜色检测,因为物体的颜色和噪点有点不同。但也许这不是一个好主意。

如果您对我有任何想法,我将不胜感激。 感谢

1 个答案:

答案 0 :(得分:9)

如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为HSV color space更容易选择特定的颜色范围。我概述了如何在an answer I gave to a similar question中完成这类工作。您可能希望遵循的步骤如下:

  • 转换为HSV并通过选择色调在绿色范围内且具有最小饱和度和值的像素来创建二进制遮罩。
  • 将产生的蒙版侵蚀一定量以去除小的虚假簇。
  • 扩大侵蚀的遮罩,使其返回到所选像素的更平滑边缘。

我无法提供完全示例,说明如何将此分析应用于数据,因为您在问题中提供的图像实际上具有比其显示的数据更高的分辨率,但这里是使用函数RGB2HSVIMERODEIMDILATE的一般解决方案(最后两个来自Image Processing Toolbox):

rgbImage = imread('data.jpg');  %# Load the RGB image
hsvImage = rgb2hsv(rgbImage);   %# Convert to HSV color space
hPlane = 360.*hsvImage(:,:,1);  %# Get the hue plane, scaled from 0 to 360
vPlane = hsvImage(:,:,3);       %# Get the value plane
mask = (hPlane >= 80) & (hPlane <= 140) & (vPlane >= 0.3);  %# Select a mask
SE = strel('disk',10);                 %# Create a disk-shaped element
mask = imdilate(imerode(mask,SE),SE);  %# Erode and dilate the mask

这里有一些代码可视化上述分析创建的边缘:

edgeMask = mask-imerode(mask,strel('disk',1));  %# Create an edge mask
edgeImage = zeros([size(edges) 3]);     %# Create an RGB image for the edge
edgeImage(find(edgeMask)) = 1;          %#   that's colored red
image(rgbImage);                        %# Plot the original image
hold on;
image(edgeImage,'AlphaData',edgeMask);  %# Plot the edge image over it

enter image description here