📄 process_old.c
字号:
#include "math.h"
#define threnum 28001
#define halfthrenum 14000
#define CROSSSIZE 12
#define RECTSIZE 6
#pragma DATA_SECTION(str,"STORE_IN_IRAM");
short str[threnum];
#pragma DATA_SECTION(table,"STORE_IN_IRAM");
static unsigned short table[threnum];
//根据输入原始图像,统计直方图,寻找分割门限及max,min
void findthrehold(short *image, int Row, int Col,short *max,short *min)
{
int i,j;
short temp;
for(i=0;i<threnum;i++)
str[i] = 0;
for(i=5;i<Row-5;i++) {
for(j=5;j<Col-5;j++) {
temp = image[i*Col+j];
if(temp > halfthrenum ) temp = halfthrenum;
if(temp < -halfthrenum) temp = -halfthrenum;
str[temp + halfthrenum]++;
}
}
//统计%5低灰度值
temp = 0;
for( i=0; i<threnum;i++)
{
temp += str[i];
if(temp > 100) break;
}
*min = i-halfthrenum;
//统计%5高灰度值
temp = 0;
for( i=threnum-1;i>=0;i--)
{
temp += str[i];
if(temp > 500) break;
}
*max = i-halfthrenum;
}
void display(short *raw_img,unsigned short *result_img,short max,short min,int Row, int Col,int gray)
{
int i,j,data;
int gene;
float value;
value = (float)gray;
gene = (int)(value*64/(max-min));
//生成动态归一化结果表
for(i=-halfthrenum;i<= min;i++) table[i+halfthrenum] = 0;
for(i=min+1;i<max;i++)
{
data = ((i-min)*gene)>>6;
if(data>255) table[i+halfthrenum]= gray;
if(data<0) table[i+halfthrenum]= 0;
table[i+halfthrenum]= data;
}
for(i=max;i<= halfthrenum;i++) table[i+halfthrenum] = gray;
//查表得出相应灰度值的动态归一化结果
for(j=0;j<Row*Col;j++)
{
data = raw_img[j];
if(data>max) data = max;
if(data<min) data = min;
result_img[j] =(table[data+halfthrenum]);
}
}
/*
void AddCross(unsigned short *pImgdata, int row, int col, int R_X, int R_Y, int x, int y)
{
int i,x1,x2,y1,y2;
int start, end;
int rec_x=R_X/2, rec_y=R_Y/2;
start = (x>=CROSSSIZE)? (x-CROSSSIZE):0;
end = (x<(col-CROSSSIZE))? (x+CROSSSIZE): col;
for(i = start; i<=end; i++)
{
pImgdata[y*col + i] = ~pImgdata[y*col + i];
}
start = (y>=CROSSSIZE)? (y-CROSSSIZE):0;
end = (y<(row-CROSSSIZE))? (y+CROSSSIZE):row;
for(i = start; i<=end; i++)
{
pImgdata[i*col + x ] = ~pImgdata[i*col + x ];
}
start = (x>=rec_x)?(x-rec_x):0;
end = (x<(col-rec_x))? (x+rec_x): col;
y1 = y + rec_y;
y2 = y - rec_y;
for(i = start; i<=end; i++)
{
if((x-i)>1||(i-x)>1)
{
pImgdata[y1*col + i] = ~pImgdata[y1*col + i];
pImgdata[y2*col + i] = ~pImgdata[y2*col + i];
}
}
start = (y>=rec_y)? (y-rec_y):0;
end = (y<(row-rec_y))? (y+rec_y):row;
x1 = x + rec_x;
x2 = x - rec_x;
for(i = start; i<=end; i++)
{
if((y-i)>1||(i-y)>1)
{
pImgdata[i*col + x1 ] = ~pImgdata[i*col + x1 ];
pImgdata[i*col + x2 ] = ~pImgdata[i*col + x2 ];
}
}
}
*/
void AddCross(unsigned short *pImgdata, int row, int col, int x, int y)
{
int i,x1,x2,y1,y2;
int start, end;
start = (x>=CROSSSIZE)? (x-CROSSSIZE):0;
end = (x<(col-CROSSSIZE))? (x+CROSSSIZE): col;
for(i = start; i<=end; i++)
{
pImgdata[y*col + i] = 0;//~pImgdata[y*col + i];
}
start = (y>=CROSSSIZE)? (y-CROSSSIZE):0;
end = (y<(row-CROSSSIZE))? (y+CROSSSIZE):row;
for(i = start; i<=end; i++)
{
pImgdata[i*col + x ] = 0;//~pImgdata[i*col + x ];
}
start = (x>=RECTSIZE)?(x-RECTSIZE):0;
end = (x<(col-RECTSIZE))? (x+RECTSIZE): col;
y1 = y + RECTSIZE;
y2 = y - RECTSIZE;
for(i = start; i<=end; i++)
{
if((x-i)>1||(i-x)>1)
{
pImgdata[y1*col + i] = 0;//~pImgdata[y1*col + i];
pImgdata[y2*col + i] = 0;//~pImgdata[y2*col + i];
}
}
start = (y>=RECTSIZE)? (y-RECTSIZE):0;
end = (y<(row-RECTSIZE))? (y+RECTSIZE):row;
x1 = x + RECTSIZE;
x2 = x - RECTSIZE;
for(i = start; i<=end; i++)
{
if((y-i)>1||(i-y)>1)
{
pImgdata[i*col + x1 ] = 0;//~pImgdata[i*col + x1 ];
pImgdata[i*col + x2 ] = 0;//~pImgdata[i*col + x2 ];
}
}
}
void TransformData(unsigned short *pdata, int size, unsigned char bits)
{
int i;
for(i=1;i<size;i++)
pdata[i] = pdata[i]<<bits;
pdata[0] = pdata[1];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -