📄 模拟图像边缘检测的c代码.txt
字号:
模拟图像边缘检测的C代码[原创]
做一个简单模拟。
程序思路:先把图像放大K倍,然后检测边缘。使用Roberts梯度检测法。该方法在边缘附近有失真,产生伪边缘。
/*
to enlittle an image by K times
AUTHOR:BugEyes
http://BugEyes.blog.edu.cn
*/
#define N 6
#define K 3
#define M 100
#i nclude <stdlib.h>
#i nclude <conio.h>
void init(int arr[N][N])
{
arr[1][1]=arr[1][2]=arr[1][3]=1;
arr[2][3]=arr[3][2]=arr[4][1]=1;
arr[5][1]=arr[5][2]=arr[5][3]=1;
}
void enlarge(int arr[N][N],int result[K*N][K*N])
{
int i,j,row,col;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
for(row=K*i;row<K*i+K;row++)
for(col=K*j;col<K*j+K;col++)
result[row][col]=arr[i][j];
}
void bianyuan(int arr[N*K][N*K],int result[N*K][N*K])
{
int i,j,row,col;
for(i=0;i<N*K;i++)
for(j=0;j<N*K;j++)
{
result[i][j]=abs(arr[i][j]-arr[(i+1)%(K*N)][(j+1)%(K*N)]);
result[i][j]+=abs(arr[(i+1)%(N*K)][j]-arr[i][(j+1)%(N*K)]);
}
}
void output(int arr[N][N],int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",arr[i][j]);
printf("\n\n\n");
}
}
void output1(int arr[N*K][N*K],int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%6d",arr[i][j]);
printf("\n\n\n");
}
}
main()
{
int array[N][N]={0},result[N*K][N*K]={0},result1[N*K][N*K];
init(array);
enlarge(array,result);
bianyuan(result,result1);
clrscr();
output(array,N);
printf("\n\n");
output1(result,N*K);
printf("\n\n");
output1(result1,N*K);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -