虽然图像分割将是正确的方式来对待分色,如果你的形象是简单,你可以尝试去做它的蛮力。
在这里,转换为HSV将更容易处理图像。
对于图像的白色部分:
I=imread('ball.jpg');
H=rgb2hsv(I);
% separate dimensions
h=H(:,:,1);
s=H(:,:,2);
v=H(:,:,3);
% color conditions
v(v<0.8 | s>0.7 | h>0.7)=NaN;
h(isnan(v))=NaN;
s(isnan(v))=NaN;
% convert image back
W=cat(3,h,s,v);
White_image=hsv2rgb(W);
figure; imagesc(White_image);
而对于棕色部分:
% separate dimensions
h=H(:,:,1);
s=H(:,:,2);
v=H(:,:,3);
% color conditions
v(s<0.6 | v>0.8)=NaN;
h(isnan(v))=NaN;
s(isnan(v))=NaN;
% convert image back
B=cat(3,h,s,v);
Brown_image=hsv2rgb(B);
figure; imagesc(Brown_image); axis off
有许多基于颜色的图像分割方法,你可以使用kmeans [示例](https://www.mathworks.c OM /帮助/图像/示例/色基分割-使用-k均值-clustering.html)。搜索谷歌更多。 – user2999345
要多少组要分开您的照片?总是2? –
查看相关的QA:[RGB值基本颜色名称](http://stackoverflow.com/a/37476754/2521214),以便轻松入侵,但基本上您想要执行基于颜色的分割。它与洪水填充类似,但当基于2个阈值(绝对和相对)的任何一种颜色离开始点颜色或其邻居太远时停止。由于您需要投资回报率,因此您可以直接填写/标注原始图片。 – Spektre