?? 模擬圖像去噪之臨域平均法算法實(shí)現(xiàn).txt
字號(hào):
模擬圖像去噪之臨域平均法算法實(shí)現(xiàn)[原創(chuàng)]
用于消除圖像中的噪點(diǎn)。代碼有點(diǎn)繁瑣,可以大幅度優(yōu)化,有時(shí)間再加上。
/*
realization of linyu lvbo method of image processing
AUTHOR:BugEyes
http://BugEyes.blog.edu.cn
*/
#define N 10
#define M 255
#i nclude <conio.h> /* for the function 'clrscr' */
#i nclude <stdlib.h> /* for the function 'random' */
void init(int arr[N][N])
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
arr[i][j]=random(M);
}
int linyu(int arr[N][N],int row,int col,int core[3][3])
{ /* to compute the current value according to its linyu */
int result=0;
int i,j;
int count=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
count+=core[i][j];
if(row==0&&col==0)
{
result=arr[row][col]*(core[0][0]+core[0][1]+core[0][2]+core[1][0]+core[2][0]);
result+=arr[row][col]*core[1][1]+arr[row][col+1]*core[1][2];
result+=arr[row+1][col]*core[2][1]+arr[row+1][col+1]*core[2][2];
result/=count;
}
else if(row==0&&col==N-1)
{
result=arr[row][col]*(core[0][0]+core[0][1]+core[0][2]+core[1][2]+core[2][2]);
result+=arr[row][col]*core[1][1]+arr[row][col-1]*core[1][0];
result+=arr[row+1][col]*core[2][1]+arr[row+1][col-1]*core[2][0];
result/=count;
}
else if(row==N-1&&col==0)
{
result=arr[row][col]*(core[0][0]+core[1][0]+core[2][0]+core[2][1]+core[2][2]);
result+=arr[row][col]*core[1][1]+arr[row][col+1]*core[1][2];
result+=arr[row-1][col]*core[0][1]+arr[row-1][col+1]*core[0][2];
result/=count;
}
else if(row==N-1&&col==N-1)
{
result=arr[row][col]*(core[0][2]+core[1][2]+core[2][2]*core[2][0]+core[2][1]);
result+=arr[row][col]*core[1][1]+arr[row][col-1]*core[1][0];
result+=arr[row-1][col-1]*core[0][0]+arr[row-1][col]*core[0][1];
result/=count;
}
else if(row==0&&col>0&&col<N-1)
{
result=arr[row][col-1]*(core[0][0]+core[1][0]);
result+=arr[row][col]*(core[0][1]+core[1][1]);
result+=arr[row][col+1]*(core[0][2]+core[1][2]);
result+=arr[row+1][col-1]*core[2][0]+arr[row+1][col]*core[2][1];
result+=arr[row+1][col+1]*core[2][2];
result/=count;
}
else if(row>0&&row<N-1&&col==0)
{
result=arr[row-1][col]*(core[0][0]+core[0][1]);
result+=arr[row][col]*(core[1][0]+core[1][1]);
result+=arr[row+1][col]*(core[2][0]+core[2][1]);
result+=arr[row-1][col+1]*core[0][2];
result+=arr[row][col+1]*core[1][2];
result+=arr[row+1][col+1]*core[2][2];
result/=count;
}
else if(col>0&&col<N-1&&row==N-1)
{
result=arr[row-1][col-1]*core[0][0];
result+=arr[row-1][col]*core[0][1];
result+=arr[row-1][col+1]*core[0][2];
result+=arr[row][col-1]*(core[1][0]+core[2][0]);
result+=arr[row][col]*(core[1][1]+core[2][1]);
result+=arr[row][col+1]*(core[1][2]+core[2][2]);
result/=count;
}
else if(row>0&&row<N-1&&col==N-1)
{
result=arr[row-1][col-1]*core[0][0];
result+=arr[row][col-1]*core[1][0];
result+=arr[row+1][col-1]*core[2][0];
result+=arr[row-1][col]*(core[0][1]+core[0][2]);
result+=arr[row][col]*(core[1][1]+core[1][2]);
result+=arr[row+1][col]*(core[2][1]+core[2][2]);
result/=count;
}
else
{
result=arr[row-1][col-1]*core[0][0];
result+=arr[row-1][col]*core[0][1];
result+=arr[row-1][col+1]*core[0][2];
result+=arr[row][col-1]*core[1][0];
result+=arr[row][col]*core[1][1];
result+=arr[row][col+1]*core[1][2];
result+=arr[row+1][col-1]*core[2][0];
result+=arr[row+1][col]*core[2][1];
result+=arr[row+1][col+1]*core[2][2];
result/=count;
}
return result;
}
void compute(int arr[N][N],int core[3][3],int result[N][N])
{ /* to compute the result image */
int row,col;
for(row=0;row<N;row++)
for(col=0;col<N;col++)
result[row][col]=linyu(arr,row,col,core);
}
void output(int arr[N][N])
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",arr[i][j]);
printf("\n\n");
}
}
void main()
{
int array[N][N];
int result[N][N];
int core[3][3]={{1,2,1},
{2,4,2},
{1,2,1}};
int core1[3][3]={{1,1,1},
{1,1,1},
{1,1,1}};
int core2[3][3]={{2,4,2},
{4,8,4},
{2,4,2}};
clrscr();
init(array);
compute(array,core2,result);/*compute(array,core,result); or compute(array,core1,result); */
printf("\nThe original array is ...\n\n");
output(array);
printf("\nThe result array is....\n\n");
output(result);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -