如何在MATLAB中删除图像的颜色背景

Ima*_*eck 4 rgb matlab image-processing hsv canny-operator

扳手的图片有绿色背景

我想删除此图像中的绿色像素,并将其替换为白色背景,作为对此图片进行精确检测的初步步骤,以仅检测扳手.我把它转换成hsv并认为h没有绿色如下,但是没有用.请帮忙.

image = imread('F:\03.jpg');
hsv = rgb2hsv(image);
hChannel = hsv(:, :, 1);
sChannel = hsv(:, :, 2);
vChannel = hsv(:, :, 3);
newH = hsv(:,:,1) > 0.25 & hsv(:,:,1) < 0.41;
newV = (0.1) * vChannel;    % I am trying to change brightness
newHSVImage = cat(3, newH, sChannel, newV);
newRGBImage = hsv2rgb(newHSVImage);
imshow(newRGBIMage)
Run Code Online (Sandbox Code Playgroud)

dro*_*rco 7

您的解决方案有两个主要问题:

  1. 由于一些背景像素不是绿色(其中一些是黑色),因此需要进行后处理形态学操作.

  2. 在rgb空间上添加白色背景会更容易.

我建议以下解决方案:

%generates mask of forground
fgMask = ~(hsv(:,:,1) > 0.25 & hsv(:,:,1) < 0.41);
CC = bwconncomp(fgMask);
numOfPixels = cellfun(@numel,CC.PixelIdxList);
[~,indexOfMax] = max(numOfPixels);
fgMask = zeros(size(fgMask));
fgMask(CC.PixelIdxList{indexOfMax}) = 1;

%morphological operations
fgMask = imopen(fgMask,strel('disk',2));
fgMask = imclose(fgMask,strel('disk',5));

%updating image in RGB space
rChannel = image(:, :, 1); rChannel(~fgMask) = 255;
gChannel = image(:, :, 2); gChannel(~fgMask) = 255;
bChannel = image(:, :, 3); bChannel(~fgMask) = 255;
image = cat(3, rChannel, gChannel, bChannel);

%display image
imshow(image)
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述