Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Busca urgentemente el pseudocódigo de filtrado mediano (300 puntos)?

¿Busca urgentemente el pseudocódigo de filtrado mediano (300 puntos)?

Carácter sin firmar WINAPI GetMedianNum(carácter sin firmar * bArray, int iFilterH, int iFilterW)

{

/*Carbón sin firmar m = mid(

mid (bArray[ 0], bArray[1], bArray[2]),

mid (bArray[3], bArray[4], bArray[5]),

mid (bArray[ 6], bArray[7], bArray[8]);

Devuelve m */

//Variable de bucle

int I; >

int j;

int k;

//Variable intermedia

Carácter sin signo bTemp

int iFilterLen = iFilterH * iFilterW;

Promedio flotante = 0; //para aceleración promedio

//valor promedio

for(I = 0; i & ltiFilterLeni++)

{

promedio+= bArray[I];

}

promedio = promedio/iFilterLen;

Píxel de caracteres sin firmar _ mid

pixel _ mid = bArray[(iFilterH-1)/2 * iFilterW+(iFilterW-1)/2] //Antes del valor central de la ventana de filtro Valor de píxel

.

if (abs(average-pixel_mid)>10) //Aceleración promedio, donde "10" es la diferencia entre la mediana original y la media, y el tamaño se puede configurar de acuerdo con su situación real

.

//if(1) //Seleccione esto cuando no se requiera aceleración promedio.

{

//Método de mediana súper rápido (esencialmente un método pseudomediano)

//Disposición de filas

Si (0 )

{

for(k = 0; k & ltiFilterHk ++)

{

for(j = 0 ;j & ltiFilterH-1;j++)

{

for(I = 0;i<iFilterW-1-j;i++)

{

Número++;

if(bArray[I+iFilterH * k]& gt; bArray[i+iFilterH*k+1])

{ //Intercambio

Bt EMP = bArray[I+iFilterH * k];

bArray[I+iFilterH * k]= bArray[I+iFilterH * k+1];

bArray[ I+iFilterH * k+1]= Bt EMP;

}

}

}

}

//Disposición de las columnas

//for(k = 0; k & ltiFilterWk ++)

//{

k =(iFilterW-1) /2;

for(j = 0;j & ltiFilterH-1;j++)

{

for (I = 0;i<iFilterW-1-j ;i++)

{

número++;

if(bArray[k+iFilterW * I ]& gt; bArray[k+iFilterW*(i+1 )])

{

//Exchange

Bt EMP = bArray[k+iFilterW * I];

bArray[k +iFilterW * I]= bArray[k+iFilterW *(I+1)];

bArray[k+iFilterW *(I+1 )]= Bt EMP;

}

}

}

}

Otros

{

//Tradicional método de burbujeo para obtener el valor mediano.

if(0)

{ for(j = 0; j & ltiFilterLen-1; j ++)

{

for(I = 0;i<iFilterLen-j-1;i++)

{

número++;

if(bArray[I] & gt; bArray[i + 1])

{

//Exchange

Bt EMP = bArray[I];

bArray[I]= bArray [I+1];

bArray[I+1]= Bt EMP;

}

}

}

}

Otros

{

quickSort(bArray, 0, iFilterLen-1); //Método de clasificación rápida

}

}

}

//En caso contrario

//Calcular la mediana. Nota: Las matrices de este programa tienen un número impar de elementos.

Bt EMP = bArray[(iFilterLen-1)/2];

//Devuelve el valor intermedio

Devuelve bTemp

}

void quickSort(carácter sin firmar a[], int l, int r)

{//Ordenar a [l: r], el valor de a[r+1] es muy grande.

int t;

If (l & gt= r) return;

Int i = l, //cursor de izquierda a derecha

j = r+1; //Cursor de derecha a izquierda

Unsigned char pivot = a[l];

//Convierte el elemento izquierdo > = pivote y Derecha

mientras (verdadero) {

Hacer {//Ver = izquierda >elemento de pivote

I = I+1;

número++;

} while(a[I]<pivot);

hacer {//find

j = j-1;

Número++;

} while(a[j]& gt; pivot);

If (i & gt= j) desconectar;/ /Objeto de intercambio no encontrado.

t = a[I];

a[I] = a[j]

a[j] = t; p>}

//Establecer p i v o t

a[l]= a[j];

a[j] = pivote;

Ordenación rápida (a, l, j-1); // Ordena el segmento izquierdo

Ordenación rápida (a, j + 1, r); // Ordena el segmento derecho

}