Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void filtroMediana(C_Image &imagen, int tamVentana) {
- // Límites de la matriz
- int primeraFila = imagen.FirstRow();
- int ultimaFila = imagen.LastRow();
- int primeraCol = imagen.FirstCol();
- int ultimaCol = imagen.LastCol();
- // Tamaño de la matriz
- int numFilas = imagen.RowN();
- int numCols = imagen.ColN();
- // Indices
- int indFila;
- int indColumna;
- // Máscara
- int radVentana = tamVentana / 2;
- int auxFila = 0;
- int auxColumna = 0;
- C_Image imagenSalida = imagen;
- //imagenSalida.palette.Read("paletagris.txt");
- printf("\tProcesando...\n");
- imagenSalida = imagen;
- for (int filas = primeraFila; filas <= numFilas; filas++) {
- for (int cols = primeraCol; cols <= numCols; cols++) {
- vector<float> valores;
- for (int mFila = 0; mFila < tamVentana; mFila++) {
- for (int mCol = 0; mCol < tamVentana; mCol++) {
- indFila = filas + mFila - radVentana;
- indColumna = cols + mCol - radVentana;
- if (imagen.In(indFila, indColumna)) {
- valores.push_back(imagen(indFila, indColumna));
- }
- else {
- if (indFila < 1)
- indFila = primeraFila;
- else if (indFila > numFilas)
- indFila = numFilas;
- if (indColumna < 1)
- indColumna = primeraCol;
- else if (indColumna > numCols)
- indColumna = numCols;
- valores.push_back(imagen(indFila, indColumna));
- }
- }
- }
- stable_sort(&valores[0], &valores[valores.size() - 1]);
- imagenSalida(filas, cols) = valores[(int)(valores.size() / 2)];
- if (imagenSalida(filas, cols) == 0) {
- auxFila = filas;
- auxColumna = cols;
- printf("%d, %d\n\n", filas, cols);
- }
- }
- }
- printf("\tSe ha completado el filtrado de la imagen\n");
- printf("\tSe ha creado la imagen Mediana.bmp\n");
- imagenSalida.WriteBMP("Mediana.bmp");
- imagenSalida.Free();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement