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