从图像中提取特征 - 最佳方法的建议?

Extracting Feature from an Image - suggestions for best approach?

我目前正在学习计算机视觉,我想从图像中提取洋葱。执行此操作的最佳方法是什么?

我尝试了一种阈值方法,通过将图像分解为 R、G、B 通道来检测白色,但它也检测图像其他部分的光反射。我如何清理此图像以获得大致代表洋葱的蒙版?

onionRGB = imread('onion.png');
onionGRAY = rgb2gray(onionRGB);

figure, imshow(onionRGB);

% split channels
rOnion = onionRGB(:, :, 1);             % red channel
gOnion = onionRGB(:, :, 2);             % green channel
bOnion = onionRGB(:, :, 3);             % blue channel


whiteThresh = 160*3;
% detect white onion
onionDetection = double(rOnion) + double(gOnion) + double(bOnion);

% apply thresholding to segment the foreground
maskOnion = onionDetection > whiteThresh;
figure, imshow(maskOnion);

下面的代码,在拆分成频道后放置,效果很好。

onionHSV = rgb2hsv(onionRGB);
saturationOnion = onionHSV(:,:,2);
figure;
imagesc(saturationOnion);
title('Saturation');

figure;
imagesc(rOnion+bOnion); title('purple');

%apply threshold to saturation and purple brightness levels
maskOnion = and((saturationOnion < 0.645), (rOnion+bOnion >=155));
%filter out all but the largest object
maskOnion = bwareafilt(maskOnion,1);
figure, imshow(maskOnion);

第一个技巧是使用颜色的 HSV 表示的饱和度来进行过滤。 第二个技巧是对多个通道进行阈值处理。 第三个技巧是过滤掉除最大对象之外的所有对象。