Первый шаг - это векторизация вашего кода. Вместо следующего блока кода:
background = zeros(480,640,3);
for j=1:480
for i=1:640
tmpR = zeros(1,10);
tmpG = zeros(1,10);
tmpB = zeros(1,10);
for k=1:10
tmpR(k) = images(j,i,1,k*10);
tmpG(k) = images(j,i,2,k*10);
tmpB(k) = images(j,i,3,k*10);
end
background(j,i,1) = floor(median(tmpR));
background(j,i,2) = floor(median(tmpG));
background(j,i,3) = floor(median(tmpB));
end
end
запись:
subimages = images(:, :, :, 1:10:end);
background = median(subimages, 4);
Теперь, как и прежде, используйте imshow с опцией [], чтобы показать ваше изображение:
imshow(background, []);
если вы все еще видите белое изображение, то, возможно, вы имеете дело с матрицей двойных значений, которые не находятся между [0, 1]. Изображения в Matlab обычно относятся к классу double или single со значениями от 0 до 1 или к классу uint8 или uint16 со значениями между 0, 255 или 0, 65535 соответственно. Если ваши значения находятся в диапазоне от 0 до 255, но class (subimages) возвращает double или single, перед использованием imshow () сделайте следующее:
subimages = uint8(subimages);