весь этот ответ относится только к оригинальной форме вопроса .
Предположим, что вы можете собрать все свои двоичные матрицы в большую матрицу размером n × m на 256 binaryimage(x,y,greyvalue)
. Тогда вы можете рассчитать ваше окончательное изображение как
newimage=sum(bsxfun(@times,binaryimage,reshape(0:255,1,1,[])),3)
Волшебство здесь выполняется bsxfun, который умножает двоичное изображение 3D (n x m x 256) на вектор 1 x 1 x 256, содержащий значения серого 0 ... 255. Это создает трехмерное изображение, где для фиксированных x и y вектор (y, x, :) содержит много нулей и (для одного значения серого G
, где двоичное изображение содержит 1
) он содержит значение G
. Так что теперь вам нужно только сложить по этому третьему измерению, чтобы получить n x m
изображение.
Обновление
Чтобы проверить, что это работает правильно, давайте сначала пойдем другим путем:
fullimage=floor(rand(100,200)*256);
figure;imshow(fullimage,[0 255]);
- случайное изображение в оттенках серого. Вы можете вычислить 256 двоичных матриц следующим образом:
binaryimage=false([size(fullimage) 256]);
for i=1:size(fullimage,1)
for j=1:size(fullimage,2)
binaryimage(i,j,fullimage(i,j)+1)=true;
end
end
Теперь мы можем применить решение, которое я дал выше
newimage=sum(bsxfun(@times,binaryimage,reshape(0:255,1,1,[])),3);
и убедитесь, что я возвращаю исходное изображение:
all(newimage(:)==fullimage(:))
, что дает 1
(true): -).
Обновление 2
Теперь вы упоминаете, что ваши двоичные изображения находятся в массиве ячеек, я полагаю binimg{1:256}
, где каждая ячейка содержит двоичный массив n x m. Если вы можете, возможно, имеет смысл изменить код, который генерирует эти данные, для создания трехмерного двоичного массива, который я использую выше - ячейки в основном полезны, если разные ячейки содержат данные разных типов, форм или размеров.
Если есть веские причины придерживаться массива ячеек, вы можете преобразовать его в 3D-массив, используя
binaryimage = reshape(cell2mat(reshape(binimg,1,256)),n,m,256);
с n
и m
, как указано выше. Внутренняя форма не нужна, если у вас уже есть size(binimg)==[1 256]
. Итак, чтобы подвести итог, вам нужно использовать массив ячеек binimg
для вычисления двоичного изображения трехмерной матрицы, которое затем вы можете использовать для вычисления newimage
, которое вас интересует, используя код в самом начале моего ответа.
Надеюсь, это поможет ...