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

📄 kltransdlg.cpp

📁 模式识别变换程序源码处理影响的六个波段格式
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp=a[0][1]*(*lpsr1)+a[1][1]*(*lpsr2)+a[2][1]*(*lpsr3)
					+a[3][1]*(*lpsr4)+a[4][1]*(*lpsr5)+a[5][1]*(*lpsr6);
				*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
			}
		}
        m_pBitsField+=14;
		fileFen2.Write(m_pBitsField,widthTM1*heightTM1);
	}
	if(m_n[2]==1)
	{
		fileFen3.Open(m_strFenliang3,
			CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
		BITMAPFILEHEADER bmfhdr;
		BITMAPINFOHEADER bmphdr;
		RGBQUAD rgb[256];
		bmfhdr.bfType='MB';
		bmfhdr.bfReserved1=0;
		bmfhdr.bfReserved2=0;
		
		bmphdr.biSize=40;
		bmphdr.biWidth=widthTM1;
		bmphdr.biHeight=heightTM2;
		bmphdr.biPlanes=1;
		bmphdr.biCompression=BI_RGB;
		bmphdr.biXPelsPerMeter=0;
		bmphdr.biYPelsPerMeter=0;
		bmphdr.biClrUsed=0;
		bmphdr.biClrImportant=0;
		bmphdr.biBitCount=8;
		bmfhdr.bfOffBits=1078;
		bmphdr.biSizeImage=(((widthTM1*8)+31)/32*4)*heightTM1;
		bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
		for(int i=0;i<256;i++)
		{
            rgb[i].rgbBlue=i;
            rgb[i].rgbGreen=i;
            rgb[i].rgbRed=i;
            rgb[i].rgbReserved=0;
		}
		fileFen3.Write(&bmfhdr,sizeof(bmfhdr));
		fileFen3.Write(&bmphdr,sizeof(bmphdr));
		fileFen3.Write(rgb,sizeof(RGBQUAD)*256);
		long size;
		unsigned char *m_pBitsField;
		size=widthTM1*heightTM1;
		m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
		unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
		double temp;
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp=a[0][2]*(*lpsr1)+a[1][2]*(*lpsr2)+a[2][2]*(*lpsr3)
					+a[3][2]*(*lpsr4)+a[4][2]*(*lpsr5)+a[5][2]*(*lpsr6);
				temp=(-temp);
				*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
			}
		}
        m_pBitsField+=14;
		fileFen3.Write(m_pBitsField,widthTM1*heightTM1);
	}
	if(m_n[3]==1)
	{
		fileFen4.Open(m_strFenliang4,
			CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
		BITMAPFILEHEADER bmfhdr;
		BITMAPINFOHEADER bmphdr;
		RGBQUAD rgb[256];
		bmfhdr.bfType='MB';
		bmfhdr.bfReserved1=0;
		bmfhdr.bfReserved2=0;
		
		bmphdr.biSize=40;
		bmphdr.biWidth=widthTM1;
		bmphdr.biHeight=heightTM2;
		bmphdr.biPlanes=1;
		bmphdr.biCompression=BI_RGB;
		bmphdr.biXPelsPerMeter=0;
		bmphdr.biYPelsPerMeter=0;
		bmphdr.biClrUsed=0;
		bmphdr.biClrImportant=0;
		bmphdr.biBitCount=8;
		bmfhdr.bfOffBits=1078;
		bmphdr.biSizeImage=(((widthTM1*8)+31)/32*4)*heightTM1;
		bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
		for(int i=0;i<256;i++)
		{
            rgb[i].rgbBlue=i;
            rgb[i].rgbGreen=i;
            rgb[i].rgbRed=i;
            rgb[i].rgbReserved=0;
		}
		fileFen4.Write(&bmfhdr,sizeof(bmfhdr));
		fileFen4.Write(&bmphdr,sizeof(bmphdr));
		fileFen4.Write(rgb,sizeof(RGBQUAD)*256);
		long size;
		unsigned char *m_pBitsField;
		size=widthTM1*heightTM1;
		m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
		unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
		double temp;
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp=a[0][3]*(*lpsr1)+a[1][3]*(*lpsr2)+a[2][3]*(*lpsr3)
					+a[3][3]*(*lpsr4)+a[4][3]*(*lpsr5)+a[5][3]*(*lpsr6);
				temp=(-temp);
				*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
			}
		}
        m_pBitsField+=14;
		fileFen4.Write(m_pBitsField,widthTM1*heightTM1);
	}
	if(m_n[4]==1)
	{
		fileFen5.Open(m_strFenliang5,
			CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
		BITMAPFILEHEADER bmfhdr;
		BITMAPINFOHEADER bmphdr;
		RGBQUAD rgb[256];
		bmfhdr.bfType='MB';
		bmfhdr.bfReserved1=0;
		bmfhdr.bfReserved2=0;
		
		bmphdr.biSize=40;
		bmphdr.biWidth=widthTM1;
		bmphdr.biHeight=heightTM2;
		bmphdr.biPlanes=1;
		bmphdr.biCompression=BI_RGB;
		bmphdr.biXPelsPerMeter=0;
		bmphdr.biYPelsPerMeter=0;
		bmphdr.biClrUsed=0;
		bmphdr.biClrImportant=0;
		bmphdr.biBitCount=8;
		bmfhdr.bfOffBits=1078;
		bmphdr.biSizeImage=(((widthTM1*8)+31)/32*4)*heightTM1;
		bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
		for(int i=0;i<256;i++)
		{
            rgb[i].rgbBlue=i;
            rgb[i].rgbGreen=i;
            rgb[i].rgbRed=i;
            rgb[i].rgbReserved=0;
		}
		fileFen5.Write(&bmfhdr,sizeof(bmfhdr));
		fileFen5.Write(&bmphdr,sizeof(bmphdr));
		fileFen5.Write(rgb,sizeof(RGBQUAD)*256);
		long size;
		unsigned char *m_pBitsField;
		size=widthTM1*heightTM1;
		m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
		unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
		double temp;
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp=a[0][4]*(*lpsr1)+a[1][4]*(*lpsr2)+a[2][4]*(*lpsr3)
					+a[3][4]*(*lpsr4)+a[4][4]*(*lpsr5)+a[5][4]*(*lpsr6);
				temp=(-temp);
				*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
			}
		}
        m_pBitsField+=14;
		fileFen5.Write(m_pBitsField,widthTM1*heightTM1);
	}
	if(m_n[5]==1)
	{
		fileFen6.Open(m_strFenliang6,
			CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
		BITMAPFILEHEADER bmfhdr;
		BITMAPINFOHEADER bmphdr;
		RGBQUAD rgb[256];
		bmfhdr.bfType='MB';
		bmfhdr.bfReserved1=0;
		bmfhdr.bfReserved2=0;
		
		bmphdr.biSize=40;
		bmphdr.biWidth=widthTM1;
		bmphdr.biHeight=heightTM2;
		bmphdr.biPlanes=1;
		bmphdr.biCompression=BI_RGB;
		bmphdr.biXPelsPerMeter=0;
		bmphdr.biYPelsPerMeter=0;
		bmphdr.biClrUsed=0;
		bmphdr.biClrImportant=0;
		bmphdr.biBitCount=8;
		bmfhdr.bfOffBits=1078;
		bmphdr.biSizeImage=(((widthTM1*8)+31)/32*4)*heightTM1;
		bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
		for(int i=0;i<256;i++)
		{
            rgb[i].rgbBlue=i;
            rgb[i].rgbGreen=i;
            rgb[i].rgbRed=i;
            rgb[i].rgbReserved=0;
		}
		fileFen6.Write(&bmfhdr,sizeof(bmfhdr));
		fileFen6.Write(&bmphdr,sizeof(bmphdr));
		fileFen6.Write(rgb,sizeof(RGBQUAD)*256);
		long size;
		unsigned char *m_pBitsField;
		size=widthTM1*heightTM1;
		m_pBitsField=(unsigned char*)malloc(size*sizeof(int));
		unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
		double temp;
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp=a[0][5]*(*lpsr1)+a[1][5]*(*lpsr2)+a[2][5]*(*lpsr3)
					+a[3][5]*(*lpsr4)+a[4][5]*(*lpsr5)+a[5][5]*(*lpsr6);
				*(m_pBitsField+OutLineBytes*i+j)=(int)(temp+0.5);
			}
		}
        m_pBitsField+=14;
		fileFen6.Write(m_pBitsField,widthTM1*heightTM1);
	}
	if(m_n[6]==1)
	{
		int l1=120;
		double a1[3][3];
		double var1[3][3];
		double eps1=0.0000001;
		for(i=0;i<3;i++)
		{
             for(j=0;j<3;j++)
			 {
                  var1[i][j]=varTM[i][j];
			 }
		}
		
		k=eejcb(var1[0],3,a1[0],eps1,l1);
		if(k<=0)
		{
			AfxMessageBox("选择的TM影象不对!");
			return ;
		}
		for(i=0;i<2;i++)
		{
			for(j=0;j<3-i-1;j++)
			{
				if(var1[j][j]<var1[j+1][j+1])
				{
					for(s=0;s<3;s++)
					{
						temp=a1[s][j];
						a1[s][j]=a1[s][j+1];
						a1[s][j+1]=temp;
					}
				}
			}
		}

		int l2=120;
		double a2[2][2];
		double var2[2][2];
		double eps2=0.0000001;
		for(i=5;i<7;i++)
		{
             for(j=5;j<7;j++)
			 {
                  var2[i-5][j-5]=varTM[i][j];
			 }
		}
		
		k=eejcb(var2[0],2,a2[0],eps2,l2);
		if(k<=0)
		{
			AfxMessageBox("选择的TM影象不对!");
			return ;
		}
		if(var2[0][0]<var2[1][1])
		{
			for(s=0;s<2;s++)
			{
				temp=a2[s][j];
				a2[s][j]=a2[s][j+1];
				a2[s][j+1]=temp;				
			}
		}

		fileFen7.Open(m_strFenliang7,
			CFile::modeCreate|CFile::modeWrite|CFile::shareExclusive,NULL);
		BITMAPFILEHEADER bmfhdr;
		BITMAPINFOHEADER bmphdr;
		bmfhdr.bfType='MB';
		bmfhdr.bfReserved1=0;
		bmfhdr.bfReserved2=0;
		
		bmphdr.biSize=40;
		bmphdr.biWidth=widthTM1;
		bmphdr.biHeight=heightTM1;
		bmphdr.biPlanes=1;
		bmphdr.biCompression=BI_RGB;
		bmphdr.biXPelsPerMeter=0;
		bmphdr.biYPelsPerMeter=0;
		bmphdr.biClrUsed=0;
		bmphdr.biClrImportant=0;
	    bmphdr.biBitCount=24;
		bmfhdr.bfOffBits=54;
		bmphdr.biSizeImage=(((widthTM1*24)+31)/32*4)*heightTM1;
		bmfhdr.bfSize=bmfhdr.bfOffBits+bmphdr.biSizeImage;
		fileFen7.Write(&bmfhdr,sizeof(bmfhdr));
		fileFen7.Write(&bmphdr,sizeof(bmphdr));
		long size;
		size=3*widthTM1*heightTM1;
		unsigned char *m_pBitsField;
		m_pBitsField=(unsigned char*)malloc(size*sizeof(unsigned char));
		unsigned char * lpsr1,*lpsr2,*lpsr3,*lpsr4,*lpsr5,*lpsr6;
		double temp1,temp2,temp3;
		for(i=0;i<heightTM1;i++)
		{
			for(j=0;j<widthTM1;j++)
			{
				lpsr1=(unsigned char*)(pTM1Bits+LineBytesTM*i+3*j);
				lpsr2=(unsigned char*)(pTM2Bits+LineBytesTM*i+3*j);
				lpsr3=(unsigned char*)(pTM3Bits+LineBytesTM*i+3*j);
				lpsr4=(unsigned char*)(pTM4Bits+LineBytesTM*i+3*j);
				lpsr5=(unsigned char*)(pTM5Bits+LineBytesTM*i+3*j);
				lpsr6=(unsigned char*)(pTM7Bits+LineBytesTM*i+3*j);
                temp1=a1[0][0]*(*lpsr1)+a1[1][0]*(*lpsr2)+a1[2][0]*(*lpsr3);
				*(m_pBitsField+LineBytesTM*i+3*j+1)=(unsigned char)(temp1+0.5);
				temp2=(*lpsr4);
				*(m_pBitsField+LineBytesTM*i+3*j+2)=(unsigned char)(temp2+0.5);
				temp3=a2[0][0]*(*lpsr5)+a2[1][0]*(*lpsr6);
				*(m_pBitsField+LineBytesTM*i+3*j)=(unsigned char)(temp3+0.5);
				
  /*              temp1=0.4569*(*lpsr1)+0.3064*(*lpsr2)+0.8351*(*lpsr3);
				if(temp1>255) temp1=255;
//				temp1=(*lpsr1);
				*(m_pBitsField+LineBytesTM*i+3*j)=(unsigned char)(temp1+0.5);
				temp2=(*lpsr4);
//				temp2=(*lpsr2);
				*(m_pBitsField+LineBytesTM*i+3*j+1)=(unsigned char)(temp2+0.5);
				temp3=0.8966*(*lpsr5)+0.4428*(*lpsr6);
//				temp3=(*lpsr3);
				*(m_pBitsField+LineBytesTM*i+3*j+2)=(unsigned char)(temp3+0.5);*///MATLAB结果
			}
		}
                                m_pBitsField+=41;
		fileFen7.Write(m_pBitsField,3*widthTM1*heightTM1);
	}
	CString str="TM影象统计结果.txt";
    FILE *fpt;
    fpt=fopen(str,"w+");
	fprintf(fpt," %40s\n","TM影象统计结果");
	fprintf(fpt,"%s\n","----------------------------------------------------------------------");
	fprintf(fpt,"%s\n","             TM1        TM2        TM3        TM4        TM5        TM7");
    fprintf(fpt,"%s%8.3f   %8.3f   %8.3f   %8.3f   %8.3f   %8.3f\n","灰度均值:  ",
		averTM1,averTM2,averTM3,averTM4,averTM5,averTM7);
	fprintf(fpt,"%s%8.3f   %8.3f   %8.3f   %8.3f   %8.3f   %8.3f\n","标准偏差:  ",
		sqrt(mvarTM[0][0]),sqrt(mvarTM[1][1]),sqrt(mvarTM[2][2]),
		sqrt(mvarTM[3][3]),sqrt(mvarTM[4][4]),sqrt(mvarTM[5][5]));
	fprintf(fpt,"%s%8.3f   %8.3f   %8.3f   %8.3f   %8.3f   %8.3f\n","特征值:",
		varTM[0][0],varTM[1][1],varTM[2][2],varTM[3][3],varTM[4][4],varTM[5][5]);
	fprintf(fpt,"%s\n","-------------------------------协方差矩阵-------------------------------");
    for(i=0;i<6;i++)
	{
		for(j=0;j<6;j++)
		{

⌨️ 快捷键说明

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