В этом примере показано, как выполнить операцию для последовательности изображений. Пример создает массив изображений и передает весь массив в 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-by-n-by-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
аргумент, прохождение 2-D района.
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