【问题标题】:How to remove noise near the edge of an object in an image如何去除图像中物体边缘附近的噪点
【发布时间】:2011-09-28 12:01:40
【问题描述】:

我有这样的图像:

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

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

【问题讨论】:

  • 您可以准确说明您所感知的“噪声”和对象边缘之间的差异
  • @belisarius:感谢您的评论。我认为将其称为“噪音”并不准确。我的意思是背景(A部分),颜色是浅绿色。对象部分是深绿色的部分。

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


【解决方案1】:

如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为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

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2017-01-20
    相关资源
    最近更新 更多