Объединить два изображения с разными каналами (R, G, B), используя C # или MATLAB - PullRequest
2 голосов
/ 09 января 2011

Как объединить (наложить) два одинаковых изображения с разными эффектами в одно изображение.У меня есть одно изображение, например natural.jpg, я добавил несколько эффектов в это естественное изображение .jpg Теперь я хочу объединить два одинаковых изображения в одно изображение, например OutNatural.jpg.

Как мне добиться этого на языке C # или в Matlab ... если есть какой-то другой способ, то ответьте мне ..

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 января 2011

Математически вы можете получить желаемый результат путем усреднения двух изображений.Если вы хотите выделить одно или другое изображение, вы можете использовать средневзвешенное значение.В MATLAB:

function imgC = AverageImages(imgA, imgB, weight)
%# AverageImages - average two input images according to a specified weight.
%# The two input images must be of the same size and data type.

    if weight < 0 || weight > 1
        error('Weight out of range.')
    end
    c = class(imgA);
    if strcmp(c, class(imgB)) != 1
        error('Images should be of the same datatype.')
    end

    %# Use double matrices for averaging so we don't lose a bit
    x = double(imgA);
    y = double(imgB);
    z = weight*x + (1-weight)*y;

    imgC = cast(z, c); %# return the same datatype as the input images

Фактическое усреднение происходит в строке z = weight*x + (1-weight)*y; Если вы укажете weight = 0.5, выходное изображение будет равным сочетанием двух входов.Если вы укажете 0.9, выходной результат будет 90% imgA и 10% imgB.

Причина приведения входных изображений к типу данных с двумя типами данных заключается в том, что изображения обычно uint8который ограничен 0..255.Простая математика здесь не должна сталкиваться с какими-либо проблемами с этим типом данных, но это хорошая привычка делать математику с плавающей точкой, а затем приводить обратно к желаемому типу данных изображения.

По эстетическим соображениямможет потребоваться усреднить различные области изображений с разным весом.Вы можете расширить функцию, чтобы принимать либо скалярную, либо двумерную матрицу для weight.В последнем случае вы просто умножаете каждый пиксель на соответствующую запись в матрице weight.

2 голосов
/ 09 января 2011

Как показано @ mtrw , одним из способов объединения изображений является использование линейной комбинации двух.Панель инструментов обработки изображений для MATLAB предоставляет две функции для этой цели, а именно IMADD и IMLINCOMB (К сожалению, пакет Image для Octave не имеет аналогичных функций, хотяне сложно реализовать самостоятельно).

Одним из преимуществ реализации MATLAB является то, что на процессорах архитектуры Intel они используют библиотеку IPP для ускорения выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...