Математически вы можете получить желаемый результат путем усреднения двух изображений.Если вы хотите выделить одно или другое изображение, вы можете использовать средневзвешенное значение.В 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
.