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

时间:2016-04-03 01:26:47

标签: matlab image-processing feature-detection feature-extraction

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

我尝试了一种阈值处理方法,通过将图像分解为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);

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

以下代码在拆分为频道后放置,效果很好。

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表示中的饱和度进行过滤。 第二个技巧是在多个通道上进行阈值处理。 第三个技巧是过滤掉除最大对象之外的所有对象。

the onion mask