Чтение и анализ файлов изображений

В этом примере показано, как создать datastore для набора изображений, прочитать файлы изображений и найти изображения с максимальным средним оттенком, насыщением и яркостью (HSV). Для аналогичного примера по обработке изображений с использованием mapreduce функция, см. Вычисление максимального среднего HSV изображений с MapReduce.

Идентифицируйте две директории MATLAB ® и создайте хранилище данных, содержащее изображения с .jpg, .tif, и .png расширения в этих директориях.

location1 = fullfile(matlabroot,'toolbox','matlab','demos');
location2 = fullfile(matlabroot,'toolbox','matlab','imagesci');

ds = imageDatastore({location1,location2},'FileExtensions',{'.jpg','.tif','.png'});

Инициализируйте максимальные средние значения HSV и соответствующие данные изображения.

maxAvgH = 0;
maxAvgS = 0;
maxAvgV = 0;

dataH = 0;
dataS = 0;
dataV = 0;

Для каждого изображения в наборе прочитайте файл изображения и вычислите средние значения HSV для всех пикселей изображения. Если среднее значение больше, чем у предыдущего изображения, записайте его как новый максимум (maxAvgH, maxAvgS, или maxAvgV) и запись соответствующих данных изображения (dataH, dataS, или dataV).

for i = 1:length(ds.Files)
    data = readimage(ds,i);     % Read the ith image    
    if ~ismatrix(data)          % Only process 3-dimensional color data        
        hsv = rgb2hsv(data);    % Compute the HSV values from the RGB data 
        
        h = hsv(:,:,1);         % Extract the HSV values
        s = hsv(:,:,2);            
        v = hsv(:,:,3);            

        avgH = mean(h(:));      % Find the average HSV values across the image
        avgS = mean(s(:));
        avgV = mean(v(:));
        
        if avgH > maxAvgH       % Check for new maximum average hue
           maxAvgH = avgH;
           dataH = data;
        end

        if avgS > maxAvgS       % Check for new maximum average saturation
           maxAvgS = avgS;
           dataS = data;
        end

        if avgV > maxAvgV       % Check for new maximum average brightness
           maxAvgV = avgV;
           dataV = data;
        end
    end
end

Просмотрите изображения с наибольшим средним оттенком, насыщением и яркостью.

imshow(dataH,'InitialMagnification','fit');
title('Maximum Average Hue')

Figure contains an axes. The axes with title Maximum Average Hue contains an object of type image.

figure
imshow(dataS,'InitialMagnification','fit');
title('Maximum Average Saturation');

Figure contains an axes. The axes with title Maximum Average Saturation contains an object of type image.

figure
imshow(dataV,'InitialMagnification','fit');
title('Maximum Average Brightness');

Figure contains an axes. The axes with title Maximum Average Brightness contains an object of type image.

См. также

| |

Похожие темы