我目前正在学习计算机视觉,我想从图像中提取洋葱。这样做的最佳方法是什么?
我尝试了一种阈值处理方法,通过将图像分解为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);
答案 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表示中的饱和度进行过滤。 第二个技巧是在多个通道上进行阈值处理。 第三个技巧是过滤掉除最大对象之外的所有对象。