Этот пример показывает, как выполнить операцию на последовательности изображений. Пример создает массив изображений и передает целый массив функции stdfilt, чтобы выполнить фильтрацию стандартного отклонения на каждом изображении в последовательности.
Создайте массив имен файлов.
fileFolder = fullfile(matlabroot,'toolbox','images','imdata'); dirOutput = dir(fullfile(fileFolder,'AT3_1m4_*.tif')); fileNames = {dirOutput.name}' numFrames = numel(fileNames)
fileNames =
10x1 cell array
{'AT3_1m4_01.tif'}
{'AT3_1m4_02.tif'}
{'AT3_1m4_03.tif'}
{'AT3_1m4_04.tif'}
{'AT3_1m4_05.tif'}
{'AT3_1m4_06.tif'}
{'AT3_1m4_07.tif'}
{'AT3_1m4_08.tif'}
{'AT3_1m4_09.tif'}
{'AT3_1m4_10.tif'}
numFrames =
10
Предварительно выделите m n p массивом и считайте изображения в массив.
I = imread(fileNames{1});
sequence = zeros([size(I) numFrames],class(I));
sequence(:,:,1) = I;
for p = 2:numFrames
sequence(:,:,p) = imread(fileNames{p});
end
Процесс каждое изображение в последовательности, выполняя фильтрацию стандартного отклонения. Обратите внимание на то, что, чтобы использовать stdfilt с последовательностью изображений, необходимо задать аргумент nhood, передав 2D окружение.
sequenceNew = stdfilt(sequence,ones(3));
Просмотрите каждое входное изображение, сопровождаемое его обработанным изображением.
figure; for k = 1:numFrames imshow(sequence(:,:,k)); title(sprintf('Original Image # %d',k)); pause(1); imshow(sequenceNew(:,:,k),[]); title(sprintf('Processed Image # %d',k)); pause(1); end
