📄 main_cache3.c
字号:
#include <stdlib.h>
#include <stdio.h>
#include <csl.h>
#include <csl_dat.h>
#include <csl_cache.h>
#define NUM 4096
#define ELE 4
#define M 64//定义图像大小
#define N 64
#define thread 60 //阈值
int data1[NUM];//读入像素值
int data2[NUM];
int image_in[M][N];//腐蚀前后的图像像素
int image_out[M+1-ELE][N+1-ELE];
int two_dim1[M][N];//一维转化为二维
int two_dim2[M][N];
int two[M][N];
void imerode(); //腐蚀操作
void main()
{
int sign_show=0;
int i=0,j=0,k1,k2;
k1=0;
k2=0;
//一维数组转化为二维数组并对两个图像数组作差取绝对值,把得到的数据输入到文本文件的一列中
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
two_dim1[i][j]=data1[k1++];
two_dim2[i][j]=data2[k2++];
image_in[i][j]=two_dim1[i][j]-two_dim2[i][j];
if(image_in[i][j]<0)
image_in[i][j]=-image_in[i][j];
}
imerode();
//统计有没有靶点
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(image_out[i][j] ==1 )
{
sign_show=1;
break;
}
}
if(sign_show)
break;
}
if(sign_show)
puts("图像中有新靶点!");
else
puts("图像中没有新靶点!");
}
void imerode() //腐蚀操作
{
int length,s,t;
int radius,square;
int i,j,p2,k;
int sum=0;
//图像二值化处理
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
if( image_in[i][j] >= thread )
{
two[i][j]=1;
}
else
{
two[i][j]=0;
}
}
//腐蚀操作前的预处理
s=M+1-ELE; //s、t为循环长度
t=N+1-ELE;
length=ELE-1;
radius=length/2;
square=ELE*ELE;
// 腐蚀操作
for(i=0;i<s;i++)
for(j=0;j<t;j++)
{
for(k=i;k<=i+length;k++)
for(p2=j;p2<=j+length;p2++)
{
sum+=two[k][p2];
}
if(sum==square)
{
image_out[i+radius][j+radius]=1;
}
else
{
image_out[i+radius][j+radius]=0;
}
sum=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -