⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 process_old.c

📁 DSP link 测试
💻 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 + -