我有这样的图像:
我想删除对象边缘附近的背景(A 部分)。我计划使用颜色检测,因为对象的颜色和噪声有点不同。但也许这不是一个好主意。
如果您对我有任何想法,我将不胜感激。谢谢
我有这样的图像:
我想删除对象边缘附近的背景(A 部分)。我计划使用颜色检测,因为对象的颜色和噪声有点不同。但也许这不是一个好主意。
如果您对我有任何想法,我将不胜感激。谢谢
如果您正在执行任何类型的基于颜色的图像分割,您可能会发现首先转换为HSV 颜色空间以选择特定的颜色范围更容易。我在对类似问题的回答中概述了如何做这种事情。您可能要遵循的步骤如下:
我无法给出一个确切的例子来说明如何将此分析应用于您的数据,因为您在问题中提供的图像实际上比它显示的数据具有更高的分辨率,但这里有一个使用函数RGB2HSV、IMRODE的通用解决方案,和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