3

我有这样的图像:

包含噪声的输入图像

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

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

4

1 回答 1

9

如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为HSV 颜色空间以选择特定的颜色范围更容易。我在对类似问题的回答中概述了如何做这种事情。您可能要遵循的步骤如下:

  • 转换为 HSV 并通过选择具有绿色范围内的色调以及具有最小饱和度和值的像素来创建二进制蒙版。
  • 将生成的掩码腐蚀一定量以去除小的虚假簇。
  • 扩大侵蚀的蒙版以使您选择的像素恢复到更平滑的边缘。

我无法给出一个确切的例子来说明如何将此分析应用于您的数据,因为您在问题中提供的图像实际上比它显示的数据具有更高的分辨率,但这里有一个使用函数RGB2HSVIMRODE的通用解决方案,和IMDILATE(最后两个来自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

在此处输入图像描述

于 2011-07-05T05:31:30.117 回答