?? 模擬圖像分割的c源代碼.txt
字號:
模擬圖像分割的C源代碼[原創]
簡單模擬。
/*
mo shu bang xiao guo
http://bugeyes.blog.edu.cn
*/
#define N 8
#define K 255
#i nclude <conio.h>
#i nclude <stdlib.h>
#i nclude <math.h>
float aver=0;
int count=0;
int center;
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(K);
}
void magic(int origin[N][N],int magical[N][N],int row,int col,float threshold)
{
if(row>N-1||row<0)
return;
if(col>N-1||col<0)
return;
if(magical[row][col]!=1)
return;
if(row+1<=N-1)
if(fabs((aver*count+origin[row+1][col])/(count+1)-center)<threshold&&magical[row+1][col]==0)
{
magical[row+1][col]=1;
aver=(aver*count+origin[row+1][col])/(count+1);
count++;
magic(origin,magical,row+1,col,threshold);
}
if(row-1>=0)
if(fabs((aver*count+origin[row-1][col])/(count+1)-center)<threshold&&magical[row-1][col]==0)
{
magical[row-1][col]=1;
aver=(aver*count+origin[row-1][col])/(count+1);
count++;
magic(origin,magical,row-1,col,threshold);
}
if(col-1>=0)
if(fabs((aver*count+origin[row][col-1])/(count+1)-center)<threshold&&magical[row][col-1]==0)
{
magical[row][col-1]=1;
aver=(aver*count+origin[row][col-1])/(count+1);
count++;
magic(origin,magical,row,col-1,threshold);
}
if(col+1<=N-1)
if(fabs((aver*count+origin[row][col+1])/(count+1)-center)<threshold&&magical[row][col+1]==0)
{
magical[row][col+1]=1;
aver=(aver*count+origin[row][col+1])/(count+1);
count++;
magic(origin,magical,row,col+1,threshold);
}
}
void output(int origin[N][N],int magical[N][N],int flag)
{
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
if(flag!=1)
printf("%4d",origin[i][j]);
else
if(magical[i][j]==1)
printf("%4d",origin[i][j]);
else
printf(" ");
printf("\n");
}
}
void main()
{
int origin[N][N];
int magical[N][N]={0};
int row,col;
float threshold;
init(origin);
clrscr();
output(origin,magical,0);
printf("Please input the 'row' and 'col'\n");
scanf("%d%d",&row,&col);
if(row<0||row>=N||col<0||col>=N)
{
printf("input error");
exit(0);
}
magical[row][col]=1;
center=origin[row][col];
aver=origin[row][col];
count=1;
printf("Please input the 'threshold'\n");
scanf("%f",&threshold);
magic(origin,magical,row,col,threshold);
printf("The magical image area is...\n");
output(origin,magical,1);
printf("aver:%f,count:%d",aver,count);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -