【发布时间】:2016-12-31 10:34:58
【问题描述】:
我想在 Matlab 中将 peppers.png 图像中的 green 颜色像素更改为 gold 颜色。
我怎样才能完成这项任务?非常感谢您的帮助
【问题讨论】:
我想在 Matlab 中将 peppers.png 图像中的 green 颜色像素更改为 gold 颜色。
我怎样才能完成这项任务?非常感谢您的帮助
【问题讨论】:
简介
使用 HSV 颜色空间可以更好地直观地检测某种色调并对其进行操作。欲了解更多信息,read the following answer。
解决方案
给定一张 hsv 格式的图像,每种颜色都有一个可以驻留的范围。在辣椒图像中,青椒的色调通道在 [40/360,180/360] 范围内(或多或少)。此外,可以通过 0.125 的色调值和 0.8 的“V”值来识别金色。因此,在某张图片中将绿色变为金色的好方法如下:
*comment: 与其把绿色像素的第三个通道全部改成0.8,不如将原来存储的值取0.8取平均值,效果更自然(见下方代码)。
代码
%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 上使用形态学操作。
【讨论】: