【问题标题】:How to change green pixels to gold color in peppers image with matlab?如何使用matlab将辣椒图像中的绿色像素更改为金色?
【发布时间】:2016-12-31 10:34:58
【问题描述】:

我想在 Matlab 中将 peppers.png 图像中的 green 颜色像素更改为 gold 颜色。 我怎样才能完成这项任务?非常感谢您的帮助

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    简介

    使用 HSV 颜色空间可以更好地直观地检测某种色调并对其进行操作。欲了解更多信息,read the following answer

    解决方案

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

    1. 将图像转换为 hsv。
    2. 通过识别范围 [40/360,180/360] 之间的色调值来定位绿色。
    3. 将其第一个通道更改为 0.125,将其第二个通道更改为 0.8。
    4. 转换回 rgb。

    *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 上使用形态学操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2016-10-07
      • 2015-02-04
      • 1970-01-01
      • 2016-12-27
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多