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

📄 process_gaode.c

📁 DSP link 测试
💻 C
字号:
#include "math.h"
#include "../target.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];

#define SIZE         11 //模板大小为5
#define HALFSIZE     6

//根据输入原始图像,统计直方图,寻找分割门限及max,min
void findthrehold(short *image, int Row, int Col,short *max,short *min,short *threhold)
{
  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]++;
  	}
  }  	

	temp = 0;
	for( i=threnum-1;i>=0;i--)
  	{
		temp += str[i];
		if(temp >3000) 
			break;
  	}	
	*threhold = i-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 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] = ~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>=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] = ~pImgdata[y1*col + i];
			pImgdata[y2*col + i] = ~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 ] = ~pImgdata[i*col + x1 ];
			pImgdata[i*col + x2 ] = ~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];
  
}


void ContiDet1(unsigned short *image, int Row, int Col,unsigned short threhold,volatile target *objtemp)
{
	int i,j,px,py;
	int miny,minx,maxy,maxx;
	 
    int value = 0;
	int robjx = 320,robjy = 240;
	
	int incs = 1;	
	//int flag = 0;
	
	int max = -3000000;

   	miny = SIZE;	maxy = Row-SIZE-5;
   	minx = SIZE;	maxx = Col-SIZE-5;
   	  	
    for (py=miny;py<maxy;py+=incs)
	{

       for (px=minx;px<maxx;px+=incs)
	   {
			
			if(image[py*Col+px]>threhold)
			{
				value = 0;
				for (i=-HALFSIZE;i<=HALFSIZE;i++)              
				{
					for (j=-HALFSIZE;j<=HALFSIZE;j++) 
					{
					 
					 value += image[(py-i)*Col+px-j];
					
					}
				}
 			
			    if (value > max)
			    {
			    	max = value;
			    	robjx = px;
			    	robjy = py;
			    }	
     
       		        }
      	   }
   	}
	
	      objtemp->objx = robjx;	
	      objtemp->objy = robjy;  
}



void manhattan(unsigned short *result_img,int Row, int Col,int *pmanhattan)
{
 int i,j;
 //int temp;
 short str[1024];
 unsigned int m = 0;
 int manhattan_value = 0;
 
 for(i=0;i<1024;i++)
  	str[i] = 0;
  	    
  for(i=1;i<Row-5;i++)   
  {
  	for(j=1;j<Col-5;j++)   
  	{ 	   
  	   str[result_img[i*Col+j]]++; 	   
  	   m += result_img[i*Col+j]; 	
  	}
  }
 
  m = m/73476;
      
  for(i=0;i<1024;i++)
  {    
      manhattan_value += str[i]*abs(i-m);
  }
  
  //*pmanhattan = manhattan_value/73476;
  *pmanhattan = manhattan_value;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -