如何在MATLAB

时间:2018-01-15 11:52:35

标签: matlab image-processing rgb hsv canny-operator

Picture of a Spanner with Green Background

我想删除此图像中的绿色像素,并将其替换为白色背景作为初步步骤,对此图片进行精确检测以仅检测扳手。我把它转换成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)

2 个答案:

答案 0 :(得分:7)

<强>解决方案

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

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

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

  3. <强>代码

    我建议采用以下解决方案:

    %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)
    

    <强>结果

    enter image description here

答案 1 :(得分:3)

你似乎不明白你在做什么。评论:

% Select only green indexes
newH = hsv(:,:,1) > 0.25 & hsv(:,:,1) < 0.41;

% Change brigthness of the whole image
newV = (0.1) * vChannel; 

您的代码所做的是,获取所有绿色像素的逻辑索引,并降低整个图像的亮度。然后,使用逻辑索引作为颜色值,因此,如果执行newV = (1) * vChannel;并绘图,您将意识到所有绿色现在都是红色(红色:HSV = 1)。

你想要的是选择绿色,并降低绿色的亮度(或任何你想做的事情)。

为此,请执行:

% Select only green indexes
green_index = hsv(:,:,1) > 0.25 & hsv(:,:,1) < 0.41;
% change the brigtness of those specific pixels
newV=vChannel;
newV(green_index)=0.1*newV(green_index);

newHSVImage = cat(3, hChannel, sChannel, newV);

enter image description here

您可能需要调整H中的绿色检测范围。