Вопрос похож, но не такой же, как и в Matrix reorganizationРеорганизовать матрица, полученная из PNG изображения с R
У меня есть некоторые PNG файлов и хотите сделать некоторый анализ пикселя. Использование PNG библиотеки можно легко прочитать изображение:
myImage <- readPNG("4colorpattern_15.png",native=FALSE)
str(myImage)
Выход на
## num [1:483, 1:483, 1:3] 0 0 0 0 0 0 0 0 0 0 ...
Я хотел бы, чтобы он реорганизовал как нечто вроде
X Y R G B A
0 0 0 0 0 0
1 0 0 0 0 0
...
X, Y является координаты, RGB - значения для красного, зеленого и синего для этого пикселя, А - альфа (если у него есть изображение).
Я читал о переделке и расплаве, кажется, что это не случай. У меня нет навыков R, чтобы создать функцию mapply для этого. Я бы хотел избежать создания вложенных fors, которые могли бы работать, но были бы неэффективными.
Редактировать массив, кажется, сделать трюк:
nrow <- dim(myImage)[1]
ncol <- dim(myImage)[2]
nbands <- dim(myImage)[3]
array(myImage,dim=c(nrow*ncol,nbands))
Я до сих пор, чтобы проверить, правильно ли заказ, но я до сих пор думаю, что одна из функций, применимых могли бы сделать. Кроме того, это решение не дает мне координат X и Y.
Edit 2
Я добавил очень маленький PNG - жаль, что это так трудно нажать на него! Это 9x4 PNG с 3x2 рисунком 3x2 пикселей. В верхнем ряду цвета - черный, красный, зеленый, нижний ряд цветов - синий, желтый, пурпурный.
С этим образом я бы ожидать, чтобы получить кадр данных, похожий на
X Y R G B (no A in this case)
0 0 0 0 0
1 0 0 0 0
2 0 0 0 0
3 0 1 0 0
4 0 1 0 0
5 0 1 0 0
6 0 0 1 0
7 0 0 1 0
8 0 0 1 0
...
0 2 0 0 1
1 2 0 0 1
2 2 0 0 1
3 2 1 1 0
4 2 1 1 0
5 2 1 1 0
6 2 1 0 1
7 2 1 0 1
8 2 1 0 1
(многие опущены)
Вот большая версия изображения для справки, но результаты основаны на 9x4.
Пожалуй 'do.call (rbind, lapply (сл (затемнение (myImage) [3]), функция (I) myImage [,, я])) ' – akrun
Сделайте небольшой массив для демонстрационных целей и покажите, каков должен быть результат. Я думаю, что есть очень простое решение (абсолютно нет для циклов), но я хочу проверить его и предоставить тестовый пример - ваша ответственность. (Во-первых, я не понял, что такое «A».) –
@BondedDust Предположительно, A будет каналом альфа (прозрачности) изображения. – WhiteViking