如何用matlab将辣椒图像中的绿色像素更改为金色?

时间:2016-12-31 10:34:58

标签: matlab image-processing

我想在Matlab中将green颜色像素更改为gold图像中的peppers.png颜色。 我该怎么做这个任务?非常感谢您的帮助

1 个答案:

答案 0 :(得分:3)

<强>简介

使用HSV色彩空间可以更好地直观地检测某种色调并对其进行操作。有关详细信息,请read the following answer

<强>解决方案

给定hsv格式的图像,每种颜色都有一定的范围可以驻留。在辣椒图像中,青椒的色调通道在[40 / 360,180 / 360]范围内(或多或少)。此外,可以通过色调值0.125和“V”来识别彩色金。值0.8。因此,在某张图片中将绿色变为黄金的好方法如下:

  1. 将图像转换为hsv。
  2. 通过识别范围[40 / 360,180 / 360]之间的色调值来定位绿色。
  3. 将第一个频道更改为0.125,将第二个频道更改为0.8。
  4. 转换回rgb。
  5. *评论:不是将绿色像素的第三个通道完全更改为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上使用形态学操作。 enter image description here