Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. void filtroMediana(C_Image &imagen, int tamVentana) {
  2.  
  3.     // Límites de la matriz
  4.     int primeraFila = imagen.FirstRow();
  5.     int ultimaFila = imagen.LastRow();
  6.     int primeraCol = imagen.FirstCol();
  7.     int ultimaCol = imagen.LastCol();
  8.     // Tamaño de la matriz
  9.     int numFilas = imagen.RowN();
  10.     int numCols = imagen.ColN();
  11.     // Indices
  12.     int indFila;
  13.     int indColumna;
  14.     // Máscara
  15.     int radVentana = tamVentana / 2;
  16.    
  17.     int auxFila = 0;
  18.     int auxColumna = 0;
  19.  
  20.  
  21.     C_Image imagenSalida = imagen;
  22.     //imagenSalida.palette.Read("paletagris.txt");
  23.     printf("\tProcesando...\n");
  24.     imagenSalida = imagen;
  25.     for (int filas = primeraFila; filas <= numFilas; filas++) {
  26.         for (int cols = primeraCol; cols <= numCols; cols++) {
  27.             vector<float> valores;
  28.             for (int mFila = 0; mFila < tamVentana; mFila++) {
  29.                 for (int mCol = 0; mCol < tamVentana; mCol++) {
  30.                     indFila = filas + mFila - radVentana;
  31.                     indColumna = cols + mCol - radVentana;
  32.                     if (imagen.In(indFila, indColumna)) {
  33.                         valores.push_back(imagen(indFila, indColumna));
  34.                     }
  35.                     else {
  36.                         if (indFila < 1)
  37.                             indFila = primeraFila;
  38.                         else if (indFila > numFilas)
  39.                             indFila = numFilas;
  40.                         if (indColumna < 1)
  41.                             indColumna = primeraCol;
  42.                         else if (indColumna > numCols)
  43.                             indColumna = numCols;
  44.  
  45.                         valores.push_back(imagen(indFila, indColumna));
  46.                     }
  47.                 }
  48.             }
  49.             stable_sort(&valores[0], &valores[valores.size() - 1]);
  50.             imagenSalida(filas, cols) = valores[(int)(valores.size() / 2)];
  51.             if (imagenSalida(filas, cols) == 0) {
  52.                 auxFila = filas;
  53.                 auxColumna = cols;
  54.                 printf("%d, %d\n\n", filas, cols);
  55.             }
  56.         }
  57.     }
  58.     printf("\tSe ha completado el filtrado de la imagen\n");
  59.     printf("\tSe ha creado la imagen Mediana.bmp\n");
  60.     imagenSalida.WriteBMP("Mediana.bmp");
  61.     imagenSalida.Free();
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement