我想在Matlab中将green
颜色像素更改为gold
图像中的peppers.png
颜色。
我该怎么做这个任务?非常感谢您的帮助
答案 0 :(得分:3)
<强>简介强>
使用HSV色彩空间可以更好地直观地检测某种色调并对其进行操作。有关详细信息,请read the following answer。
<强>解决方案强>
给定hsv格式的图像,每种颜色都有一定的范围可以驻留。在辣椒图像中,青椒的色调通道在[40 / 360,180 / 360]范围内(或多或少)。此外,可以通过色调值0.125和“V”来识别彩色金。值0.8。因此,在某张图片中将绿色变为黄金的好方法如下:
*评论:不是将绿色像素的第三个通道完全更改为0.8,而是最好使用原始存储的值执行0.8的平均值,以获得更自然的效果(请参阅下面的代码)。 p>
<强>代码强>
%reads the image. converts it to hsv.
I = imread('peppers.png');
hsv = rgb2hsv(I);
%locate pixels with green color
GREEN_RANGE = [40,180]/360;
greenAreasMask = hsv(:,:,1)>GREEN_RANGE(1) & hsv(:,:,1) < GREEN_RANGE(2);
%change their hue value to 0.125
HUE_FOR_GOLD = 0.12;
V_FOR_GOLD = 0.8;
goldHsv1 = hsv(:,:,1);
goldHsv1(greenAreasMask)=HUE_FOR_GOLD;
goldHsv3 = hsv(:,:,3);
goldHsv3(greenAreasMask)=V_FOR_GOLD;
newHsv = hsv;
newHsv(:,:,1) = goldHsv1;
newHsv(:,:,3) = newHsv(:,:,3) + goldHsv3 / 2;
%transform back to RGB
res = hsv2rgb(newHsv);
<强>结果强>
正如你所看到的,绿色像素变得更加金黄色。 还有改进的余地,但我认为这对你来说是一个好的开始。要改善结果,您可以修改绿色和黄金HSV值,并在greenAreasMask上使用形态学操作。