void adaptivemedian(mmimage *image_input, int MAX)
{
int M=3;
int i, j ,k;
mmimage* image_padding;
image_padding = alloc_mmimage(image_input->height+2*(M-1),image_input->width+2*(M-1),image_input->nChannel);
mmimage* image_temp;
image_temp = alloc_mmimage(image_input->height+2*(M-1),image_input->width+2*(M-1),image_input->nChannel);
double A1,A2,B1,B2;
int padding_H = image_input->height+2*(M-1);
int padding_W = image_input->width+2*(M-1);
int index_x = 0;
int index_y = 0;
double temp = 0;
double *padding1Darray;
padding1Darray = (double*)calloc(image_input->nChannel*padding_H*padding_W,sizeof(double));
//이미지를 padding 시켜줌
for( i = 0 ; i < image_input->height ; i++)
for( j = 0 ; j< image_input->width ; j++)
for( k = 0 ; k<image_input->nChannel ; k++)
image_padding->imageArray[i+(int)M-1][j+(int)M-1][k] = image_input->imageArray[i][j][k];
//2차 배열을 1차 배열로 변경해줌
for(index_y = 0 ; index_y<padding_H-M; index_y++)
{
for(index_x = 0 ; index_x<padding_W-M; index_x++)
{
for( k = 0 ; k < image_input->nChannel ; k++)
for( i = 0 ; i < M ; i++)
for( j = 0 ; j < M ; j++)
{
if(index_x+M>padding_W && index_y+M>padding_H)
padding1Darray[i*M+j+k] = image_padding->imageArray[i+padding_H-M][j+padding_W-M][k];
if(index_x+M>padding_W)
padding1Darray[i*M+j+k] = image_padding->imageArray[i+index_y][j+padding_W-M][k];
if(index_x+M>padding_W&&index_y+M>padding_H)
padding1Darray[i*M+j+k] = image_padding->imageArray[i+padding_H-M][j+index_x][k];
padding1Darray[i*M+j+k] = image_padding->imageArray[i+index_y][j+index_x][k];
}
// 정렬 median값을 구해주기
quickSort(padding1Darray,M*M);
A1 = padding1Darray[(M*M-1)/2]-padding1Darray[0];
A2 = padding1Darray[(M*M-1)/2]-padding1Darray[M*M-1];
if(A1>0 && A2<0)
{
B1=padding1Darray[i*M+j]-padding1Darray[0];
B2=padding1Darray[i*M+j]-padding1Darray[M*M-1];
if(B1>0 && B2<0)
{
image_temp->imageArray[index_y+(M-1)/2][index_x+(M-1)/2][k]=padding1Darray[i*M+j];
M=3;
}
else
{
image_temp->imageArray[index_y+(M-1)/2][index_x+(M-1)/2][k] = padding1Darray[(M*M-1)/2];
M=3;
}
}
else
{
if(M<MAX)
{
M=M+1;
index_x--;
}
else
{
image_temp->imageArray[index_y+(M-1)/2][index_x+(M-1)/2][k]=padding1Darray[(M*M-1)/2];
M=3;
}
}
}
write_mmimage("어댑티브.jpg",image_temp);
}
이거구현할라고한건데 왜안댈까여....
선입금입니다 고갱님