Я перевод функции сделали с MATLAB, которая уменьшает интенсивность цвета от сектора изображения к Ruby, используя RMagickУменьшения интенсивности цвета RGB в Руби RMagick
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 по некоторому значению (а). Пытаясь воспроизвести это с рубином кодом дали это:
(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
Благодарим за ответ. Я сделал то, что вы мне сказали, и в настоящее время работает, как вы можете видеть здесь: http://imgur.com/a/8osXN. Он искажает цвета изображения, а не только уменьшает их интенсивность, как вы можете видеть в моем примере с Matlab ... Любые предложения? – marco
Я ничего не знаю о MATLAB, а также о обработке изображений, но этот бит из вашего кода выглядит не так, как вы делаете в Ruby: 'A (i, j, k) = B (i , j, k) - a. Мне кажется, что уменьшение интенсивности цвета пикселя не совпадает с вычитанием того же значения из его красного, зеленого и синего цветов. Например, что, если ваши значения равны * (125, 38, 205) *? Если 'atenuaction' равно 128, результат будет * (- 3, -90, 77) *. Я не знаю, что делает RMagick с отрицательными значениями, но даже если он просто ограничивает их до нуля, это, вероятно, не результат, которого вы ожидали. –