Я работаю над программой, которая наилучшим образом комбинирует два изображения.Допустим, у меня есть два двумерных массива, содержащих «пиксельные» структуры, которые составляют эти два изображения.
Я уже написал алгоритм, который определяет где , чтобы объединить изображения относительно большего издва изображения в терминах «x» и «y», где x - столбец, а y - строка двумерного массива большего изображения.Точка, в которой они должны быть соединены, инкапсулирована в структуру «соответствия», которая выглядит следующим образом:
typedef struct {
int overlap; // used in algorithm to determine where to combine
int x; // column of larger image
int y; // row of larger image
int overlapWidth; // width of the overlap between the two images
int overlapHeight; // height of the overlap between the two images
} match;
Обратите внимание, что точка сопоставления может быть отрицательной (x, y или оба) по отношению кувеличенное изображение.
Пиксели, содержащиеся в перекрытии, усредняются, и любые пиксели за пределами двух изображений (но все еще в новых измерениях) являются белыми.
Пример
+---+---+ image1
| | |
+---+---+---+ image2
| | X | |
+---+---+---+
| | |
+---+---+
X
представляет точку совпадения для этих двух изображений, поэтому ее состояние выглядит следующим образом:
x = 1у = 1overlapWidth = 1overlapHeight = 1
Новое изображение для этого случая будет 3x3.
Предполагая, таким образом, что у меня есть «соответствие», в котором объединяются два изображения, вычисленная новая ширина иВысота результирующего изображения и выделенный 2D-массив для результирующего изображения на основе этих новых размеров. Мне интересно, как я могу поместить соответствующие пиксели в новое изображение.Ниже приведен некоторый псевдокод, который представляет то, что я пытаюсь сделать.
Псевдокод
FOREACH row in new_height
FOREACH col in new_width
IF larger_image AND smaller_image do not contain (row,col)
add white pixel
ELSE IF overlap contains (row,col)
add average of pixels
ELSE IF only larger_image contains (row,col)
add larger_image pixel
ELSE
add smaller_image pixel
Мне трудно найти способ сделатьэтот.Я не обязательно ищу код, я просто ищу идеи о том, как я могу сделать то, о чем я говорю.Любые мысли будут оценены.