Обработка изображений: средние изображения в градациях серого - PullRequest
0 голосов
/ 01 февраля 2019

Я бы хотел усреднить два изображения в градациях серого (оба файла png одинакового размера), используя R.

Рассмотрим приведенные ниже изображения в качестве примера:

img1.png

enter image description here

img2.png

enter image description here

img3.png

enter image description here

Среднее значение img1.png и img2.png должно привести к чему-то вроде img3.png.Я безуспешно изучал пакеты magick и imager .

1 Ответ

0 голосов
/ 04 февраля 2019

Конечно, есть несколько решений этой проблемы.Вот тот, который ясно показывает, что происходит, и обеспечивает большую гибкость.

Давайте загрузим ваши два примера изображений.

library(png)
img1 <- readPNG("owzUE.png")
img2 <- readPNG("HMka0.png")

Бывает, что они не одинакового размера:

dim(img1)
# [1] 145 190   4
dim(img2)
# [1] 144 191   4

Итак, давайте сделаем размер одинаковым с

img1 <- img1[1:144, 1:190, 1:4]
img2 <- img2[1:144, 1:190, 1:4]

Каждое изображение состоит из четырех матриц, первые три соответствуют каналам RGB, а последняя - альфа.Давайте определим результирующее изображение как

img3 <- img1 * 0

, которое красиво дает массив того же размера, что и img1 и img2.

Тесно связанная концепция - альфа-смешение но формулы не совсем то, что вам нужно;там отношения между изображениями не кажутся симметричными.Что мы можем сделать, это рассмотреть средневзвешенное значение для каждого канала RGB, где веса соответствуют соответствующим альфа-значениям:

for(d in 1:3)
  img3[, , d] <- (img1[, , d] * img1[, , 4]  + img2[, , d] * img2[, , 4] ) / (img1[, , 4] + img2[, , 4])

Поскольку в некоторых случаях оба альфа-значения равны 0, мы фиксируем эти случаи с помощью

img3[is.nan(img3)] <- 0

Наконец, мы устанавливаем альфа-значение для большего из двух изображений с помощью

img3[, , 4] <- pmax(img1[, , 4], img2[, , 4])

и сохраняем результат

writePNG(img3, "img3.png")

enter image description here

Таким образом, этот метод также применим к цветным изображениям и позволяет экспериментировать с формулой, меняя вес и т. Д.

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