我有这样的图像:
我想删除对象边缘附近的背景(A部分)。我打算使用颜色检测,因为物体的颜色和噪点有点不同。但也许这不是一个好主意。
如果您对我有任何想法,我将不胜感激。 感谢
答案 0 :(得分:9)
如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为HSV color space更容易选择特定的颜色范围。我概述了如何在an answer I gave to a similar question中完成这类工作。您可能希望遵循的步骤如下:
我无法提供完全示例,说明如何将此分析应用于数据,因为您在问题中提供的图像实际上具有比其显示的数据更高的分辨率,但这里是使用函数RGB2HSV,IMERODE和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