使用Rmagick降低Ruby中的RGB颜色强度

时间:2016-03-18 19:15:47

标签: ruby image-processing rmagick

我正在翻译一个用MATLAB创建的函数,它使用Rmagick将图像扇区的颜色强度降低到Ruby

for i=round(f/3):f 
        for j=1:round(c)
            for k=1:p
            A(i,j,k) = B(i,j,k) - a;
            end
        end
    end

    for i=1:round(2*f/3)

这会将所有3个RGB矩阵的颜色强度降低一些值(a)。试图用ruby代码重现这一点产生了这个:

(0..imagen.columns).each do |x|
  ((2 * imagen.rows) / 3..imagen.rows).each do |y|
    imagen.pixel_color(x, y, 'pink')
  end
end

我可以将图像的下三分之一更改为设置颜色(在本例中为粉红色)。

尝试使用每种颜色的方法将每个组件减少一些值(atenuacion)将不起作用,它将返回相同的图像。

(0..imagen.columns).each do |x|
  ((2 * imagen.rows) / 3..imagen.rows).each do |y|
    pixel = imagen.pixel_color(x, y)
    pixel.red - atenuacion
    pixel.green - atenuacion
    pixel.blue - atenuacion
    imagen.pixel_color(x, y, pixel)
  end
end

欢迎任何提示或建议,提前谢谢:D

1 个答案:

答案 0 :(得分:0)

问题在于:

pixel.red - atenuacion
pixel.green - atenuacion
pixel.blue - atenuacion

您没有更改pixel.red等的值。您只是从atenuacion的值中减去pixel.red,然后对结果不做任何操作。试试这个:

pixel.red -= atenuacion
pixel.green -= atenuacion
pixel.blue -= atenuacion

在上文中,pixel.red -= atenuacionpixel.red = pixel.red - atenuacion的简写。我只是猜测pixel.red等人是定居者和吸气者。如果没有,你可能需要做这样的事情:

pixel = imagen.pixel_color(x, y)

new_color = Magick::Pixel.new(
              pixel.red - atenuacion,
              pixel.green - atenuacion,
              pixel.blue - atenuacion,
              pixel.opacity)

imagen.pixel_color(x, y, new_color)