📄 bip.cpp
字号:
// Bip.cpp: implementation of the CBip class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Bip.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBip::CBip()
{
}
CBip::~CBip()
{
}
//////灰度求反:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::InvertData(BYTE *lpbuf, int bonum, int w, int h,int bons)
{
BYTE **originimage;
int i,j;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
originimage[i][j*bonum+bons-1]=255-originimage[i][j*bonum+bons-1];
delete [] originimage;
return TRUE;
}
//////灰度二值化:图像数据,波段数,宽度,高度,处理波段,门限
BOOL CBip::BiValue(BYTE *lpbuf, int bonum, int w, int h, int bons, int threshold)
{ BYTE **originimage;
int i,j;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
if(originimage[i][j*bonum+bons-1]>threshold)
originimage[i][j*bonum+bons-1]=255;
else
originimage[i][j*bonum+bons-1]=0;
}
delete [] originimage;
return TRUE;
}
//////图像水平翻转:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::HorzMirror(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=0;i<h;i++)
for(j=0;j<w;j++)
lpTemp[i*w+j]=originimage[i][(w-j-1)*bonum+bons-1];
for(i=0;i<h;i++)
for(j=0;j<w;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete lpTemp;
delete [] originimage;
return TRUE;
}
//////图像垂直翻转:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::VertMirror(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=0;i<h;i++)
for(j=0;j<w;j++)
lpTemp[i*w+j]=originimage[h-i-1][j*bonum+bons-1];
for(i=0;i<h;i++)
for(j=0;j<w;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete lpTemp;
delete [] originimage;
return TRUE;
}
//////图像水平投影:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::ProjHorz(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,num;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
{
num=0;
for(j=0;j<w;j++)
if(originimage[i][j*bonum+bons-1]==255)
{
num++;
originimage[i][j*bonum+bons-1]=0;
}
for(j=0;j<num;j++)
originimage[i][j*bonum+bons-1]=255;
}
delete [] originimage;
return TRUE;
}
//////图像垂直投影:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::ProjVert(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,num;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(j=0;j<w;j++)
{
num=0;
for(i=0;i<h;i++)
if(originimage[i][j*bonum+bons-1]==255)
{
num++;
originimage[i][j*bonum+bons-1]=0;
}
for(i=num;i<h;i++)
originimage[i][j*bonum+bons-1]=255;
}
delete [] originimage;
return TRUE;
}
//////图像直方图均衡:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::HistogramEq(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,tem;
long data[256];
long s[256];
for(i=0;i<256;i++)
{
data[i]=0;
s[i]=0;
}
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
tem=originimage[i][j*bonum+bons-1];
data[tem]++;
}
s[0]=data[0];
for(i=1;i<256;i++)
{
s[i]=s[i-1];
s[i]+=data[i];
}
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
tem=originimage[i][j*bonum+bons-1];
originimage[i][j*bonum+bons-1]=s[tem]*255/w/h;
}
delete [] originimage;
return TRUE;
}
//////求图像最大灰度值:图像数据,波段数,宽度,高度,处理波段
int CBip::MaxData(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,max;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
max=0;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
if(originimage[i][j*bonum+bons-1]>max)
{
max=originimage[i][j*bonum+bons-1];
}
delete [] originimage;
return max;
}
//////求图像最小灰度值:图像数据,波段数,宽度,高度,处理波段
int CBip::MinData(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,min;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
min=255;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
if(originimage[i][j*bonum+bons-1]<min)
{
min=originimage[i][j*bonum+bons-1];
}
delete [] originimage;
return min;
}
//////图像33均值滤波:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::Mean33(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,sun;
int x1,y1;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
sun=0;
for(y1=-1;y1<=1;y1++)
for(x1=-1;x1<=1;x1++)
sun+=originimage[i+y1][(j+x1)*bonum+bons-1];
lpTemp[i*w+j]=(int)(sun/9);
}
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete [] originimage;
return TRUE;
}
//////图像55均值滤波:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::Mean55(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,sun;
int x1,y1;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=2;i<h-2;i++)
for(j=2;j<w-2;j++)
{
sun=0;
for(y1=-2;y1<=2;y1++)
for(x1=-2;x1<=2;x1++)
sun+=originimage[i+y1][(j+x1)*bonum+bons-1];
lpTemp[i*w+j]=(int)(sun/25);
}
for(i=2;i<h-2;i++)
for(j=2;j<w-2;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete [] originimage;
return TRUE;
}
//////图像33滤波:图像数据,波段数,宽度,高度,处理波段,输出第几大
BOOL CBip::Sort33(BYTE *lpbuf, int bonum, int w, int h, int bons, int in)
{
BYTE **originimage;
int i,j,x,y;
int P[9],s;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
P[0]=originimage[i-1][(j-1)*bonum+bons-1];
P[1]=originimage[i][(j-1)*bonum+bons-1];
P[2]=originimage[i+1][(j-1)*bonum+bons-1];
P[3]=originimage[i-1][j*bonum+bons-1];
P[4]=originimage[i][j*bonum+bons-1];
P[5]=originimage[i+1][j*bonum+bons-1];
P[6]=originimage[i-1][(j+1)*bonum+bons-1];
P[7]=originimage[i][(j+1)*bonum+bons-1];
P[8]=originimage[i+1][(j+1)*bonum+bons-1];
for(x=0;x<5;x++)
for(y=x+1;y<9;y++)
if (P[y]>P[x])
{
s=P[y];
P[y]=P[x];
P[x]=s;
}
lpTemp[i*w+j]=P[in];
}
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete [] originimage;
return TRUE;
}
//////图像自己定义33滤波:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::Filter33(BYTE *lpbuf, int *a, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,sun,he;
int x1,y1;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
he=0;
for(i=0;i<9;i++)
he+=*(a+1);
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
sun=0;
for(y1=-1;y1<=1;y1++)
for(x1=-1;x1<=1;x1++)
{
sun+=(*(a+3*(y1+1)+x1+1))*originimage[i+y1][(j+x1)*bonum+bons-1];
}
if(he>0)
lpTemp[i*w+j]=(int)(sun/he);
else
lpTemp[i*w+j]=sun;
}
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete [] originimage;
return TRUE;
}
//////图像自己定义33滤波:图像数据,波段数,宽度,高度,处理波段,输出第几大
BOOL CBip::FilterSort33(BYTE *lpbuf, int *a, int bonum, int w, int h, int bons, int in)
{
BYTE **originimage;
int i,j,x,y;
int P[9],s;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
BYTE *lpTemp=new BYTE[w*h];
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
P[0]=originimage[i-1][(j-1)*bonum+bons-1]*(*a);
P[1]=originimage[i][(j-1)*bonum+bons-1]*(*(a+3));
P[2]=originimage[i+1][(j-1)*bonum+bons-1]*(*(a+6));
P[3]=originimage[i-1][j*bonum+bons-1]*(*(a+1));
P[4]=originimage[i][j*bonum+bons-1]*(*(a+4));
P[5]=originimage[i+1][j*bonum+bons-1]*(*(a+7));
P[6]=originimage[i-1][(j+1)*bonum+bons-1]*(*(a+2));
P[7]=originimage[i][(j+1)*bonum+bons-1]*(*(a+5));
P[8]=originimage[i+1][(j+1)*bonum+bons-1]*(*(a+8));
for(x=0;x<5;x++)
for(y=x+1;y<9;y++)
if (P[y]>P[x])
{
s=P[y];
P[y]=P[x];
P[x]=s;
}
lpTemp[i*w+j]=P[in];
}
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
originimage[i][j*bonum+bons-1]=lpTemp[i*w+j];
delete [] originimage;
return TRUE;
}
//////图像直方图数据:图像数据,波段数,宽度,高度,处理波段
long * CBip::HistogramData(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,s;
long data[256];
for(i=0;i<256;i++)
data[i]=0;
long *p=data;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
s=originimage[i][j*bonum+bons-1];
data[s]++;
}
delete [] originimage;
return p;
}
//////图像拉伸到0-255:图像数据,最大灰度,最小灰度,波段数,宽度,高度,处理波段
BOOL CBip::To0255(BYTE *lpbuf,int max,int min, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j,s;
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
s=originimage[i][j*bonum+bons-1];
originimage[i][j*bonum+bons-1]=(int)(255*(s-min)/(max-min));
}
delete [] originimage;
return max;
}
//////图像加入随机噪声:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::RandomNoise(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j;
int NoisePoint;
srand((unsigned)time(NULL));
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
NoisePoint=rand()/1024;
originimage[i][j*bonum+bons-1]=originimage[i][j*bonum+bons-1]*224/256+ NoisePoint;
}
delete [] originimage;
return TRUE;
}
//////图像加入椒盐噪声:图像数据,波段数,宽度,高度,处理波段
BOOL CBip::SaltNoise(BYTE *lpbuf, int bonum, int w, int h, int bons)
{
BYTE **originimage;
int i,j;
srand((unsigned)time(NULL));
originimage=new BYTE*[h];
for(i=0;i<h;i++)
originimage[i]=lpbuf+i*bonum*w;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
if(rand()>31500)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -