Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Calcular el HSV promedio máximo de imágenes con MapReduce

En este ejemplo se muestra cómo usar y buscar imágenes con valores máximos de matiz, saturación y brillo en una colección de imagen.ImageDatastoremapreduce

Preparar datos

Cree un almacén de datos con las imágenes en y.toolbox/matlab/demostoolbox/matlab/imagesci Las imágenes seleccionadas tienen las extensiones y..jpg.tif.png

demoFolder = fullfile(matlabroot, 'toolbox', 'matlab', 'demos'); imsciFolder = fullfile(matlabroot, 'toolbox', 'matlab', 'imagesci'); 

Cree un almacén de datos utilizando las rutas de carpeta y filtre las imágenes que se incluyen en el almacén de datos mediante el par nombre-valor.FileExtensions

ds = imageDatastore({demoFolder, imsciFolder}, ...     'FileExtensions', {'.jpg', '.tif', '.png'}); 

Encontrar HSV máximo promedio de todas las imágenes

Una forma de encontrar los valores promedio máximos de matiz, saturación y brillo en la colección de imágenes es usar dentro de un bucle for, procesando las imágenes de una en una.readimage Para obtener un ejemplo de este método, vea.Leer y analizar archivos de imagen

Este ejemplo se usa para realizar la misma tarea, sin embargo, el método es altamente escalable para colecciones más grandes de imágenes.mapreducemapreduce Aunque el método for-Loop es razonable para pequeñas colecciones de imágenes, no se escala bien a una gran colección de imágenes.

Escale a MapReduce

  • La función requiere una función de mapa y una función de reducción como entradas.mapreduce

  • La función Map recibe fragmentos de datos y genera resultados intermedios.

  • La función de reducción Lee los resultados intermedios y produce un resultado final.

Función de mapa

  • En este ejemplo, la función Map almacena los datos de imagen y los valores promedio de HSV como valores intermedios.

  • Los valores intermedios están asociados con 3 claves, y.'Average Hue''Average Saturation''Average Brightness'

 function hueSaturationValueMapper(data, info, intermKVStore) % Map function for the Hue Saturation Value MapReduce example.  % Copyright 1984-2015 The MathWorks, Inc.     if ~ismatrix(data)         hsv = rgb2hsv(data);          % Extract Hue values         h = hsv(:,:,1);          % Extract Saturation values         s = hsv(:,:,2);          % Extract Brightness values         v = hsv(:,:,3);          % Find average of HSV values         avgH = mean(h(:));         avgS = mean(s(:));         avgV = mean(v(:));          % Add intermediate key-value pairs         add(intermKVStore, 'Average Hue', struct('Filename', info.Filename, 'Avg', avgH));         add(intermKVStore, 'Average Saturation', struct('Filename', info.Filename, 'Avg', avgS));         add(intermKVStore, 'Average Brightness', struct('Filename', info.Filename, 'Avg', avgV));     end end  

Reduzca la función

  • La función de reducción recibe una lista de los nombres de los archivos de imagen junto con los valores medios HSV respectivos y encuentra los valores máximos generales de los valores de matiz, saturación y brillo promedio.

  • sólo llama a esta función de reducción 3 veces, ya que la función de mapa sólo añade tres claves únicas.mapreduce

  • La función de reducción se utiliza para agregar un par clave-valor final a la salida.add Por ejemplo, es la clave y el nombre de archivo respectivo es el valor.'Maximum Average Hue'

 function hueSaturationValueReducer(key, intermValIter, outKVSTore) % Reduce function for the Hue Saturation Value MapReduce example.  % Copyright 1984-2015 The MathWorks, Inc.      maxAvg = 0;     maxImageFilename = '';      % Loop over values for each key     while hasnext(intermValIter)         value = getnext(intermValIter);          % Compare values to determine maximum         if value.Avg > maxAvg             maxAvg = value.Avg;             maxImageFilename = value.Filename;         end      end      % Add final key-value pair     add(outKVSTore, ['Maximum ' key], maxImageFilename); end  

Ejecute MapReduce

Se utiliza para aplicar el mapa y reducir las funciones al almacén de datos,.mapreduceds

maxHSV = mapreduce(ds, @hueSaturationValueMapper, @hueSaturationValueReducer); 
******************************** *      MAPREDUCE PROGRESS      * ******************************** Map   0% Reduce   0% Map  12% Reduce   0% Map  25% Reduce   0% Map  37% Reduce   0% Map  50% Reduce   0% Map  62% Reduce   0% Map  75% Reduce   0% Map  87% Reduce   0% Map 100% Reduce   0% Map 100% Reduce  33% Map 100% Reduce  67% Map 100% Reduce 100% 

Devuelve un almacén de datos, con archivos en la carpeta actual.mapreducemaxHSV

Leer y mostrar el resultado final del almacén de datos de salida,.maxHSV Utilice y para encontrar el índice de archivo de la propiedad.findstrcmpFiles

tbl = readall(maxHSV); for i = 1:height(tbl)     figure;     idx = find(strcmp(ds.Files, tbl.Value{i}));     imshow(readimage(ds, idx), 'InitialMagnification', 'fit');     title(tbl.Key{i}); end 

Consulte también

| | |

Temas relacionados