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

Joh*_*ohn 3 matlab image-processing background-color computer-vision image-segmentation

我有这样的图像:

输入包含噪音的图像

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

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

gno*_*ice 9

如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为HSV颜色空间更容易选择特定的颜色范围.我概述了如何在我给出类似问题的答案中做到这一点.您可能希望遵循的步骤如下:

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

我无法给出如何将此分析应用于数据的确切示例,因为您在问题中提供的图像实际上具有比其显示的数据更高的分辨率,但这是使用RGB2HSV,IMERODE函数的一般解决方案,和IMDILATE(最后两个来自图像处理工具箱):

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述