private void Close_Click(object sender, EventArgs e) { if (treeView1.SelectedNode == null || treeView1.SelectedNode.Parent != null) { MessageBox.Show("请选中父节点!"); return; } if (treeView1.SelectedNode.Parent == null) { DialogResult ReturnDlg = MessageBox.Show(this, "Be sure to Close Selected File?", "信息提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); switch (ReturnDlg) { case DialogResult.OK: //GetDataByFilename gdbf =new GetDataByFilename(); int i = new GetDataByFilename().getnumber(Form1.boduan, treeView1.SelectedNode.Text); Form1.boduan.RemoveAt(i); this.readmore.RemoveAt(i); this.treeView1.Nodes.Remove(treeView1.SelectedNode); break; case DialogResult.Cancel: break; } } }
/// <summary> /// OK按钮计算目标数据的K-T变换结果 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void button1_Click(object sender, EventArgs e) { filename = listBox1.Text; GetDataByFilename gdbf = new GetDataByFilename(); int pos = gdbf.getnumber(Form1.boduan, filename); if (listBox1.Text == "") { MessageBox.Show("无有效数据!"); this.Close(); } else if (Form1.boduan[pos].bands < 6) { MessageBox.Show("文件波段不满6!"); } else { /// <summary> ///K-T变换结果数据流初始化 /// </summary> read rd = new read(); //进行K_T变换 /// <summary> ///K-T变换计算,数据传递 /// <summary> K_Tchange ktc = new K_Tchange(pos); rd = ktc.GetResult(); rd.Bandsname = new string[3]; rd.Bandsname[0] = "Brightness" + "(" + filename + ")"; rd.Bandsname[1] = "Greenness" + "(" + filename + ")"; rd.Bandsname[2] = "Third" + "(" + filename + ")"; if (textBox1.Text == "") { rd.FileName = "KT"; } else { rd.FileName = textBox1.Text; } /// <summary> ///静态窗口available打开,将结果加入静态数据流泛型中 /// <summary> Form1.abl.readmore.Add(rd); Form1.abl.PATH = rd.FileName; Form1.boduan.Add(rd); Form1.abl.Form_Load(sender, e); Form1.abl.Show(); this.Close(); } }
public RichTextBox gethdr(string filename) { GetDataByFilename gdbf = new GetDataByFilename(); int record = gdbf.getnumber(Form1.boduan, filename); richTextBox1.Text += "Name:" + "\t" + Form1.boduan[record].FileName + "\r\n"; richTextBox1.Text += "Columns:" + "\t" + Form1.boduan[record].ColumnCounts + "\r\n"; richTextBox1.Text += "Lines:" + "\t" + Form1.boduan[record].LineCounts + "\r\n"; richTextBox1.Text += "bands:" + "\t" + Form1.boduan[record].bands + "\r\n"; richTextBox1.Text += "DataType:" + "\t" + Form1.boduan[record].DataType + "\r\n"; return(richTextBox1); }
/// <summary> /// 执行HSI转RGB操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void simpleButton1_Click(object sender, EventArgs e) { if (listBoxControl1.Text != "") { /// <summary> /// 创建新数据流 /// <summary> read rd = new read(); /// <summary> /// 索引参与运算数据 /// <summary> GetDataByFilename gdbf = new GetDataByFilename(); int N = gdbf.getnumber(Form1.boduan, listBoxControl1.Text); HSIToRGB HtR = new HSIToRGB(N); if (!HtR.isHSI) { MessageBox.Show("不是HSI数据!"); return; } rd = HtR.Getresult(); if (textEdit1.Text == "") { rd.FileName = "RGB"; } else { rd.FileName = textEdit1.Text; } rd.Bandsname[0] = "Rband"; rd.Bandsname[1] = "Gband"; rd.Bandsname[2] = "Bband"; /// <summary> /// 结果图像压入静态数据流 /// <summary> Form1.boduan.Add(rd); Form1.abl.readmore.Add(rd); /// <summary> /// availablebandlist中显示结果数据 /// <summary> Form1.abl.PATH = rd.FileName; Form1.abl.Form_Load(sender, e); this.Close(); } else { MessageBox.Show("请选择数据!"); } }
private void Save_Click(object sender, EventArgs e) { if (treeView1.SelectedNode.Parent == null) { GetDataByFilename gdbf = new GetDataByFilename(); int i = gdbf.getnumber(Form1.boduan, treeView1.SelectedNode.Text); SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = null; if (sfd.ShowDialog() == DialogResult.OK) { SaveFile sf = new SaveFile(Form1.boduan[i], sfd.FileName, Form1.boduan[i].DataType); sf.SaveDataF(); sf.Savehdr(); } } }
/// <summary> /// 进行分类操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void simpleButton1_Click(object sender, EventArgs e) { if (listBoxControl1.Text != "") { if (spinEdit1.Text == "") { MessageBox.Show("请选择分类个数!"); return; } /// <summary> /// 创建新数据流 /// <summary> read rd = new read(); /// <summary> /// 索引参与运算数据 /// <summary> GetDataByFilename gdbf = new GetDataByFilename(); int N = gdbf.getnumber(Form1.boduan, listBoxControl1.Text); Kmean Km = new Kmean(N, Convert.ToInt16(spinEdit1.Text), 7); rd = Km.GetResult(); if (textEdit1.Text == "") { rd.FileName = "classFile"; } else { rd.FileName = textEdit1.Text; } rd.Bandsname = new string[1]; rd.Bandsname[0] = "band1"; Form1.boduan.Add(rd); Form1.abl.readmore.Add(rd); Form1.abl.PATH = rd.FileName; Form1.abl.Form_Load(sender, e); Form1.abl.Show(); this.Close(); } else { MessageBox.Show("请选择数据!"); this.Close(); } }
/// <summary> /// 传递数据至image stastics窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { /// </summary> /// 根据文件名选择数据 /// </summary> if (listBox1.Text == "") { MessageBox.Show("请选择数据!"); return; } Imagestatistics imagsta = new Imagestatistics(); imagsta.FileName = listBox1.SelectedItem.ToString(); GetDataByFilename gdb = new GetDataByFilename(); int DataNumber = gdb.getnumber(Form1.boduan, imagsta.FileName); /// </summary> /// imagsta实例窗体数据初始化和赋值 /// </summary> imagsta.LineCounts = Form1.boduan[DataNumber].LineCounts; imagsta.ColumnCounts = Form1.boduan[DataNumber].ColumnCounts; imagsta.bands = Form1.boduan[DataNumber].bands; //imagsta.DataType = Form1.boduan[DataNumber].DataType; imagsta.Interleave = Form1.boduan[DataNumber].Interleave; imagsta.BandsData = new int[imagsta.bands, imagsta.ColumnCounts *imagsta.LineCounts]; imagsta.BandsDataD = new double[imagsta.bands, imagsta.ColumnCounts *imagsta.LineCounts]; imagsta.showdata = new int[imagsta.bands, imagsta.ColumnCounts *imagsta.LineCounts]; for (int i = 0; i < imagsta.bands; i++) { for (int j = 0; j < imagsta.ColumnCounts * imagsta.LineCounts; j++) { imagsta.BandsData[i, j] = Form1.boduan[DataNumber].BandsData[i, j]; imagsta.BandsDataD[i, j] = Form1.boduan[DataNumber].BandsDataD[i, j]; } } /// </summary> /// 生成0-255范围像素数据,用于联合直方图和共生矩阵 /// </summary> imagestretch ims = new imagestretch(imagsta.ColumnCounts, imagsta.LineCounts, imagsta.bands); ims.LinearShow(imagsta.showdata, imagsta.BandsDataD); imagsta.Show(); this.Close(); }
/// <summary> /// 增加节点(文件名为父节点,波段名为子节点) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void Form_Load(object sender, EventArgs e) { TreeNode root = new TreeNode(); root.Text = Path.GetFileName(PATH); treeView1.Nodes.Add(root); //获取单图像数据编号 GetDataByFilename gdb = new GetDataByFilename(); int time = gdb.getnumber(readmore, root.Text); for (int i = 0; i < readmore[time].bands; i++) { TreeNode leave = new TreeNode(readmore[time].Bandsname[i]); //leave.Text = readmore[time].Bandsname[i]; root.Nodes.Add(leave); } panel1.Show(); radioButton1.Checked = true; panel2.Hide(); panel2.Location = panel1.Location; }
/// <summary> /// 进行滤波操作! /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void simpleButton1_Click(object sender, EventArgs e) { if (listBoxControl1.Text != "" && listBoxControl2.Text != "") { /// <summary> /// 创建新数据流 /// <summary> read rd = new read(); /// <summary> /// 索引参与运算数据 /// <summary> GetDataByFilename gdbf = new GetDataByFilename(); int N = gdbf.getnumber(Form1.boduan, listBoxControl1.Text); if (comboBox1.Text == "Smoothing") { /// <summary> /// 梯度倒数加权平均 /// <summary> if (listBoxControl2.Text == "Gradient Inverse Weight") { GradientInverseWeight giw = new GradientInverseWeight(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); giw.Gradient(Form1.boduan[N].BandsDataD); rd = giw.GetResult(); if (textEdit1.Text == "") { rd.FileName = "GradientInverseWeight"; } else { rd.FileName = textEdit1.Text; } for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "GIW: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } } /// <summary> /// 选择式掩模平滑 /// <summary> else if (listBoxControl2.Text == "ChooseMask") { ChooseMask cm = new ChooseMask(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); cm.ChoseMaskPerf(Form1.boduan[N].BandsDataD); rd = cm.GetResult(); if (textEdit1.Text == "") { rd.FileName = "ChooseMask"; } else { rd.FileName = textEdit1.Text; } for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "CM: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } } /// <summary> /// 均值滤波 /// <summary> else if (listBoxControl2.Text == "Average") { Average_Median am = new Average_Median(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); am.AverSmoothing(Form1.boduan[N].BandsDataD); rd = am.GetResult(); if (textEdit1.Text == "") { rd.FileName = "AverageSmooth"; } else { rd.FileName = textEdit1.Text; } for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "Aver: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } } /// <summary> /// 中值滤波 /// <summary> else if (listBoxControl2.Text == "Median") { Average_Median am = new Average_Median(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); am.MedianSmoothing(Form1.boduan[N].BandsDataD); rd = am.GetResult(); if (textEdit1.Text == "") { rd.FileName = "MedianSmooth"; } else { rd.FileName = textEdit1.Text; } for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "Median: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } } else if (listBoxControl2.Text == "Gass Low Pass") { GassLowPass glp = new GassLowPass(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); glp.GetGassValue(Form1.boduan[N].BandsDataD, 5, 1); rd = glp.GetResult(); if (textEdit1.Text == "") { rd.FileName = "Gass Low Pass"; } else { rd.FileName = textEdit1.Text; } for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "GLP: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } } } else if (comboBox1.Text == "Sharpen") { /// <summary> /// 梯度数据 /// <summary> read rd2 = new read(); if (listBoxControl2.Text == "Laplacian") { Laplacian lpc = new Laplacian(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); lpc.Lapl(Form1.boduan[N].BandsDataD); /// <summary> /// 结果赋值 /// <summary> rd = lpc.GetResult(); rd2 = lpc.GetGrad(); /// <summary> /// 文件名 /// <summary> if (textEdit1.Text == "") { rd.FileName = "LaplacianR"; rd2.FileName = "LaplacianG"; } else { rd.FileName = textEdit1.Text; rd2.FileName = textEdit1.Text + "_G"; } /// <summary> /// 波段名 /// <summary> for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "LpR: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; rd2.Bandsname[i] = "LpG: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } /// <summary> /// 梯度图像压入静态数据流 /// <summary> Form1.boduan.Add(rd2); Form1.abl.readmore.Add(rd2); /// <summary> /// availablebandlist中显示梯度数据 /// <summary> Form1.abl.PATH = rd2.FileName; Form1.abl.Form_Load(sender, e); } if (listBoxControl2.Text == "Prewitt") { Prewitt_Sobel ps = new Prewitt_Sobel(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); ps.PrePer1(Form1.boduan[N].BandsDataD); ps.PrePer2(Form1.boduan[N].BandsDataD); /// <summary> /// 结果赋值 /// <summary> rd = ps.GetGrad1(); rd2 = ps.GetGrad2(); /// <summary> /// 文件名 /// <summary> if (textEdit1.Text == "") { rd.FileName = "PrewittGW"; rd2.FileName = "PrewittGV"; } else { rd.FileName = textEdit1.Text + "_GW"; rd2.FileName = textEdit1.Text + "_GV"; } /// <summary> /// 波段名 /// <summary> for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "PTGW: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; rd2.Bandsname[i] = "PTGV: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } /// <summary> /// 梯度图像压入静态数据流 /// <summary> Form1.boduan.Add(rd2); Form1.abl.readmore.Add(rd2); /// <summary> /// availablebandlist中显示梯度数据 /// <summary> Form1.abl.PATH = rd2.FileName; Form1.abl.Form_Load(sender, e); } else if (listBoxControl2.Text == "Sobel") { Prewitt_Sobel ps = new Prewitt_Sobel(Form1.boduan[N].ColumnCounts, Form1.boduan[N].LineCounts, Form1.boduan[N].bands); ps.SobPer1(Form1.boduan[N].BandsDataD); ps.SobPer2(Form1.boduan[N].BandsDataD); /// <summary> /// 结果赋值 /// <summary> rd = ps.GetGrad1(); rd2 = ps.GetGrad2(); /// <summary> /// 文件名 /// <summary> if (textEdit1.Text == "") { rd.FileName = "SobelGW"; rd2.FileName = "SobelGV"; } else { rd.FileName = textEdit1.Text + "_GW"; rd2.FileName = textEdit1.Text + "_GV"; } /// <summary> /// 波段名 /// <summary> for (int i = 0; i < rd.bands; i++) { rd.Bandsname[i] = "SLGW: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; rd2.Bandsname[i] = "SLGV: " + "(" + Form1.boduan[N].Bandsname[i] + ")"; } /// <summary> /// 梯度图像压入静态数据流 /// <summary> Form1.boduan.Add(rd2); Form1.abl.readmore.Add(rd2); /// <summary> /// availablebandlist中显示梯度数据 /// <summary> Form1.abl.PATH = rd2.FileName; Form1.abl.Form_Load(sender, e); } } /// <summary> /// 结果图像压入静态数据流 /// <summary> Form1.boduan.Add(rd); Form1.abl.readmore.Add(rd); /// <summary> /// availablebandlist中显示结果数据 /// <summary> Form1.abl.PATH = rd.FileName; Form1.abl.Form_Load(sender, e); this.Close(); } }
private void simpleButton1_Click(object sender, EventArgs e) { /// <summary> /// No Display 时创建imageview新实例 /// <summary> if (comboBox1.Text == "No Display") { /// <summary> /// comboBox操作,类似envi /// <summary> //windowsnum++; comboBox1.Items.Add("Display #" + 1); comboBox1.SelectedItem = "Display #" + 1; comboBox1.Items.Remove("No Display"); /// <summary> /// 定义新窗体 /// <summary> imageview imv = new imageview("Display #" + 1); imv.Text = "Display #" + 1; /// <summary> /// 选择灰度(单波段)显示 /// <summary> if (radioButton1.Checked) { if (textBox1.Text != "") { /// <summary> ///索引数据流,得到数据 /// <summary> string pathmark = Path.GetFileName(textBox1.Text); GetDataByFilename gdb = new GetDataByFilename(); int i = gdb.getnumber(readmore, pathmark); GetBandByname gbn = new GetBandByname(); int single = gbn.getnumber(readmore[i].Bandsname, this.textBox1.Text.Substring(0, this.textBox1.Text.IndexOf(pathmark) - 1) , readmore[i].bands); /// <summary> /// imv实例中各项数据初始化 /// <summary> imv.ColumnCounts = readmore[i].ColumnCounts; imv.LineCounts = readmore[i].LineCounts; imv.bands = 1; imv.showdata = new int[imv.bands, imv.ColumnCounts *imv.LineCounts]; imv.BandsDataD = new double[imv.bands, imv.ColumnCounts *imv.LineCounts]; imv.bandstemp = new int[imv.bands, imv.ColumnCounts *imv.LineCounts]; /// <summary> ///原数据存储 /// <summary> for (int j = 0; j < readmore[i].ColumnCounts * readmore[i].LineCounts; j++) { imv.BandsDataD[0, j] = readmore[i].BandsDataD[single, j]; } imv.pictureBox1.Height = imv.LineCounts; imv.pictureBox1.Width = imv.ColumnCounts; ///窗口状态初始化 imv.handleBopen(); /// <summary> ///通过LinearShow方法,将原数据拉伸至0-255用于显示 /// <summary> imagestretch images = new imagestretch(imv.ColumnCounts, imv.LineCounts, imv.bands); //images.LinearShow(imv.showdata, imv.BandsDataD); imv.showdata = images.TwoPercentStretch(imv.BandsDataD); /// <summary> ///窗口命名 /// <summary> imv.Text = textBox1.Text; /// <summary> ///显示图像 /// <summary> ImageShow ims = new ImageShow(); imv.pictureBox1.Refresh(); Bitmap map = new Bitmap(imv.pictureBox1.Width, imv.pictureBox1.Height); ims.showimage(imv.showdata, imv.ColumnCounts, imv.LineCounts, imv.bands, map); imv.pictureBox1.Image = map; imv.Show(); imv.Visible = true; } else { MessageBox.Show("请选择波段!"); } } else if (radioButton2.Checked) { if (textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "") { /// <summary> ///从list数据流中按文件名索引数据。 /// <summary> string pathmark2 = Path.GetFileName(textBox2.Text); string pathmark3 = Path.GetFileName(textBox3.Text); string pathmark4 = Path.GetFileName(textBox4.Text); GetDataByFilename gdb = new GetDataByFilename(); int i2 = gdb.getnumber(readmore, pathmark2); int i3 = gdb.getnumber(readmore, pathmark3); int i4 = gdb.getnumber(readmore, pathmark4); /// <summary> /// 按波段名索引波段号 /// <summary> GetBandByname gbn = new GetBandByname(); int Rband = gbn.getnumber(readmore[i2].Bandsname, this.textBox2.Text.Substring(0, this.textBox2.Text.IndexOf(pathmark2) - 1) , readmore[i2].bands); int Gband = gbn.getnumber(readmore[i3].Bandsname, this.textBox3.Text.Substring(0, this.textBox3.Text.IndexOf(pathmark3) - 1) , readmore[i3].bands); int Bband = gbn.getnumber(readmore[i4].Bandsname, this.textBox4.Text.Substring(0, this.textBox4.Text.IndexOf(pathmark4) - 1) , readmore[i4].bands); if (Form1.boduan[i2].ColumnCounts == Form1.boduan[i3].ColumnCounts && Form1.boduan[i2].ColumnCounts == Form1.boduan[i4].ColumnCounts && Form1.boduan[i2].LineCounts == Form1.boduan[i3].LineCounts && Form1.boduan[i2].LineCounts == Form1.boduan[i4].LineCounts) { /// <summary> /// imv实例中各项数据初始化 /// <summary> imv.LineCounts = readmore[i2].LineCounts; imv.ColumnCounts = readmore[i3].ColumnCounts; imv.bands = 3; imv.showdata = new int[imv.bands, imv.LineCounts *imv.ColumnCounts]; imv.BandsDataD = new double[imv.bands, imv.ColumnCounts *imv.LineCounts]; /// <summary> ///任意图像任意波段合成(数据传递) /// <summary> for (int j = 0; j < imv.ColumnCounts * imv.LineCounts; j++) { imv.BandsDataD[0, j] = readmore[i2].BandsDataD[Rband, j]; } for (int j = 0; j < imv.ColumnCounts * imv.LineCounts; j++) { imv.BandsDataD[1, j] = readmore[i3].BandsDataD[Gband, j]; } for (int j = 0; j < imv.ColumnCounts * imv.LineCounts; j++) { imv.BandsDataD[2, j] = readmore[i4].BandsDataD[Bband, j]; } imv.pictureBox1.Height = imv.LineCounts; imv.pictureBox1.Width = imv.ColumnCounts; ///窗口状态初始化 imv.handleBopen(); /// <summary> ///通过LinearShow方法,将原数据拉伸至0-255用于显示 /// <summary> imagestretch images = new imagestretch(imv.ColumnCounts, imv.LineCounts, imv.bands); images.LinearShow(imv.showdata, imv.BandsDataD); //imv.showdata = images.TwoPercentStretch(imv.BandsDataD); /// <summary> ///窗口命名 /// <summary> imv.Text = textBox2.Text + "&" + textBox3.Text + "&" + textBox4.Text; /// <summary> ///显示图像 /// <summary> imv.pictureBox1.Refresh(); ImageShow ims = new ImageShow(); Bitmap map = new Bitmap(imv.pictureBox1.Width, imv.pictureBox1.Height); ims.showimage(imv.showdata, imv.ColumnCounts, imv.LineCounts, imv.bands, map); imv.pictureBox1.Image = map; imv.Show(); imv.Visible = true; } else { MessageBox.Show("波段规格不匹配!"); } } else { MessageBox.Show("请输入波段!"); } } /// <summary> /// imv实例加入Wins泛型中 /// <summary> Wins.Add(imv); } /// <summary> ///对已存在的imageview窗体进行数据传递和操作 /// <summary> else { /// <summary> /// 搜索窗口 /// <summary> GetWinByName gwn = new GetWinByName(); int WinNbr = gwn.GetWinN(Wins, comboBox1.Text); if (radioButton1.Checked) { if (textBox1.Text != "") { string pathmark = Path.GetFileName(textBox1.Text); /// <summary> ///索引数据流,得到数据 /// <summary> GetDataByFilename gdb = new GetDataByFilename(); int i = gdb.getnumber(readmore, pathmark); GetBandByname gbn = new GetBandByname(); int single = gbn.getnumber(readmore[i].Bandsname, this.textBox1.Text.Substring(0, this.textBox1.Text.IndexOf(pathmark) - 1) , readmore[i].bands); /// <summary> /// imv实例中各项数据初始化 /// <summary> Wins[WinNbr].ColumnCounts = readmore[i].ColumnCounts; Wins[WinNbr].LineCounts = readmore[i].LineCounts; Wins[WinNbr].bands = 1; Wins[WinNbr].showdata = new int[Wins[WinNbr].bands, Wins[WinNbr].ColumnCounts * Wins[WinNbr].LineCounts]; Wins[WinNbr].BandsDataD = new double[Wins[WinNbr].bands, Wins[WinNbr].ColumnCounts * Wins[WinNbr].LineCounts]; /// <summary> ///原数据存储 /// <summary> for (int j = 0; j < readmore[i].ColumnCounts * readmore[i].LineCounts; j++) { Wins[WinNbr].BandsDataD[0, j] = readmore[i].BandsDataD[single, j]; } Wins[WinNbr].pictureBox1.Height = Wins[WinNbr].LineCounts; Wins[WinNbr].pictureBox1.Width = Wins[WinNbr].ColumnCounts; ///窗口状态初始化 Wins[WinNbr].handleBopen(); /// <summary> ///通过LinearShow方法,将原数据拉伸至0-255用于显示 /// <summary> imagestretch images = new imagestretch(Wins[WinNbr].ColumnCounts, Wins[WinNbr].LineCounts, Wins[WinNbr].bands); //images.LinearShow(Wins[WinNbr].showdata, Wins[WinNbr].BandsDataD); Wins[WinNbr].showdata = images.TwoPercentStretch(Wins[WinNbr].BandsDataD); /// <summary> /// 图像拉伸数据初始化和赋值 /// <summary> BandpixelInitialize bpi = new BandpixelInitialize(); bpi.Initialization(out Wins[WinNbr].bandstemp, Wins[WinNbr].showdata, Wins[WinNbr].ColumnCounts , Wins[WinNbr].LineCounts, Wins[WinNbr].bands); /// <summary> ///窗口命名 /// <summary> Wins[WinNbr].Text = textBox1.Text; /// <summary> ///显示图像 /// <summary> ImageShow ims = new ImageShow(); //ims.showimage(bandints,ColumnCounts,LineCounts) Wins[WinNbr].pictureBox1.Refresh(); Bitmap map = new Bitmap(Wins[WinNbr].pictureBox1.Width, Wins[WinNbr].pictureBox1.Height); ims.showimage(Wins[WinNbr].showdata, Wins[WinNbr].ColumnCounts, Wins[WinNbr].LineCounts, Wins[WinNbr].bands, map); Wins[WinNbr].pictureBox1.Image = map; Wins[WinNbr].Show(); Wins[WinNbr].Visible = true; } else { MessageBox.Show("请输入波段!"); } } else if (radioButton2.Checked) { if (textBox2.Text != "" && textBox3.Text != "" && textBox4.Text != "") { /// <summary> ///从list数据流中按文件名索引数据。 /// <summary> string pathmark2 = Path.GetFileName(textBox2.Text); string pathmark3 = Path.GetFileName(textBox3.Text); string pathmark4 = Path.GetFileName(textBox4.Text); GetDataByFilename gdb = new GetDataByFilename(); int i2 = gdb.getnumber(readmore, pathmark2); int i3 = gdb.getnumber(readmore, pathmark3); int i4 = gdb.getnumber(readmore, pathmark4); /// <summary> /// 按波段名索引波段号 /// <summary> GetBandByname gbn = new GetBandByname(); int Rband = gbn.getnumber(readmore[i2].Bandsname, this.textBox2.Text.Substring(0, this.textBox2.Text.IndexOf(pathmark2) - 1) , readmore[i2].bands); int Gband = gbn.getnumber(readmore[i3].Bandsname, this.textBox3.Text.Substring(0, this.textBox3.Text.IndexOf(pathmark3) - 1) , readmore[i3].bands); int Bband = gbn.getnumber(readmore[i4].Bandsname, this.textBox4.Text.Substring(0, this.textBox4.Text.IndexOf(pathmark4) - 1) , readmore[i4].bands); if (Form1.boduan[i2].ColumnCounts == Form1.boduan[i3].ColumnCounts && Form1.boduan[i2].ColumnCounts == Form1.boduan[i4].ColumnCounts && Form1.boduan[i2].LineCounts == Form1.boduan[i3].LineCounts && Form1.boduan[i2].LineCounts == Form1.boduan[i4].LineCounts) { /// <summary> /// imv实例中各项数据初始化 /// <summary> Wins[WinNbr].LineCounts = readmore[i2].LineCounts; Wins[WinNbr].ColumnCounts = readmore[i3].ColumnCounts; Wins[WinNbr].bands = 3; Wins[WinNbr].showdata = new int[3, Wins[WinNbr].LineCounts * Wins[WinNbr].ColumnCounts]; Wins[WinNbr].BandsDataD = new double[3, Wins[WinNbr].LineCounts * Wins[WinNbr].ColumnCounts]; /// <summary> ///任意图像任意波段合成(数据传递) /// <summary> for (int j = 0; j < Wins[WinNbr].ColumnCounts * Wins[WinNbr].LineCounts; j++) { Wins[WinNbr].BandsDataD[0, j] = readmore[i2].BandsDataD[Rband, j]; } for (int j = 0; j < Wins[WinNbr].ColumnCounts * Wins[WinNbr].LineCounts; j++) { Wins[WinNbr].BandsDataD[1, j] = readmore[i3].BandsDataD[Gband, j]; } for (int j = 0; j < Wins[WinNbr].ColumnCounts * Wins[WinNbr].LineCounts; j++) { Wins[WinNbr].BandsDataD[2, j] = readmore[i4].BandsDataD[Bband, j]; } Wins[WinNbr].pictureBox1.Height = Wins[WinNbr].LineCounts; Wins[WinNbr].pictureBox1.Width = Wins[WinNbr].ColumnCounts; ///窗口状态初始化 Wins[WinNbr].handleBopen(); /// <summary> ///通过LinearShow方法,将原数据拉伸至0-255用于显示 /// <summary> imagestretch images = new imagestretch(Wins[WinNbr].ColumnCounts, Wins[WinNbr].LineCounts, Wins[WinNbr].bands); //images.LinearShow(Wins[WinNbr].showdata, Wins[WinNbr].BandsDataD); Wins[WinNbr].showdata = images.TwoPercentStretch(Wins[WinNbr].BandsDataD); /// <summary> /// 图像拉伸数据初始化和赋值 /// <summary> BandpixelInitialize bpi = new BandpixelInitialize(); bpi.Initialization(out Wins[WinNbr].bandstemp, Wins[WinNbr].showdata, Wins[WinNbr].ColumnCounts , Wins[WinNbr].LineCounts, Wins[WinNbr].bands); /// <summary> ///窗口命名 /// <summary> Wins[WinNbr].Text = textBox2.Text + "&" + textBox3.Text + "&" + textBox4.Text; /// <summary> ///显示图像 /// <summary> Wins[WinNbr].pictureBox1.Refresh(); ImageShow ims = new ImageShow(); Bitmap map = new Bitmap(Wins[WinNbr].pictureBox1.Width, Wins[WinNbr].pictureBox1.Height); ims.showimage(Wins[WinNbr].showdata, Wins[WinNbr].ColumnCounts, Wins[WinNbr].LineCounts, Wins[WinNbr].bands, map); Wins[WinNbr].pictureBox1.Image = map; Wins[WinNbr].Show(); Wins[WinNbr].Visible = true; } else { MessageBox.Show("波段规格不匹配!"); } } else { MessageBox.Show("请输入波段!"); } } } }
/// <summary> /// HSI转换 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "") { /// <summary> ///从list数据流中按文件名索引数据。 /// <summary> string pathmark1 = Path.GetFileName(textBox1.Text); string pathmark2 = Path.GetFileName(textBox2.Text); string pathmark3 = Path.GetFileName(textBox3.Text); GetDataByFilename gdb = new GetDataByFilename(); int iR = gdb.getnumber(Form1.boduan, pathmark1); int iG = gdb.getnumber(Form1.boduan, pathmark2); int iB = gdb.getnumber(Form1.boduan, pathmark3); /// <summary> /// 按波段名索引波段号 /// <summary> GetBandByname gbn = new GetBandByname(); int Rband = gbn.getnumber(Form1.boduan[iR].Bandsname, this.textBox1.Text.Substring(0, this.textBox1.Text.IndexOf(pathmark1) - 1) , Form1.boduan[iR].bands); int Gband = gbn.getnumber(Form1.boduan[iG].Bandsname, this.textBox2.Text.Substring(0, this.textBox2.Text.IndexOf(pathmark2) - 1) , Form1.boduan[iG].bands); int Bband = gbn.getnumber(Form1.boduan[iB].Bandsname, this.textBox3.Text.Substring(0, this.textBox3.Text.IndexOf(pathmark3) - 1) , Form1.boduan[iB].bands); if (Form1.boduan[iR].ColumnCounts == Form1.boduan[iG].ColumnCounts && Form1.boduan[iR].ColumnCounts == Form1.boduan[iB].ColumnCounts && Form1.boduan[iR].LineCounts == Form1.boduan[iG].LineCounts && Form1.boduan[iR].LineCounts == Form1.boduan[iB].LineCounts) { read rd = new read(); /// <summary> /// RGBtoHSI /// <summary> RGBToHSI rth = new RGBToHSI(iR, iG, iB, Rband, Gband, Bband, rd); rd = rth.GetResult(); rd.Bandsname = new string[3]; rd.Bandsname[0] = "Hue" + "(" + Form1.boduan[iR].Bandsname[Rband] + ":" + pathmark1 + ")"; rd.Bandsname[1] = "Sat" + "(" + Form1.boduan[iG].Bandsname[Gband] + ":" + pathmark2 + ")"; rd.Bandsname[2] = "Iit" + "(" + Form1.boduan[iB].Bandsname[Bband] + ":" + pathmark3 + ")"; if (textBox4.Text == "") { rd.FileName = "HSI"; } else { rd.FileName = textBox4.Text; } /// <summary> ///静态窗口available打开,将结果加入静态数据流泛型中 /// <summary> Form1.abl.readmore.Add(rd); Form1.abl.PATH = rd.FileName; Form1.boduan.Add(rd); Form1.abl.Form_Load(sender, e); Form1.abl.Show(); this.Close(); } else { MessageBox.Show("波段规格不匹配!"); } } else { MessageBox.Show("无有效数据!"); } }
/// <summary> /// 四则运算 /// </summary> /// <returns>返回结果</returns> private double[] EvaluateExpression() { try { string myExp = expression + "="; //表达式。。 Stack <char> optr = new Stack <char>(myExp.Length); //存放操作符栈。。 Stack <double[]> opnd = new Stack <double[]>(myExp.Length); //存放操作数组栈。。 optr.Push('='); int index = 0; //字符索引。。 char c = myExp.ToCharArray()[index++]; //读取每一个字符。。 double[] num1, num2; while ((c != '=') || (optr.Peek() != '=')) { if (c == '"') { string band_File = ""; while (true) { if ((c = myExp.ToCharArray()[index++]) == '"') { if (band_File.IndexOf(":") == -1) { //double[] temp = opnd.Pop(); //int Length = temp.GetLength(0); //opnd.Push(temp); //double math = Convert.ToDouble(band_File); //temp = new double[Length]; //for (int i = 0; i < temp.GetLength(0); i++) // temp[i] = math; //opnd.Push(temp); //c = myExp.ToCharArray()[index++]; //break; } else { //索引数据 string FileName = Path.GetFileName(band_File); GetDataByFilename gdbf = new GetDataByFilename(); int i = gdbf.getnumber(Form1.boduan, FileName); string bandname = band_File.Substring(0, band_File.IndexOf(FileName) - 1); GetBandByname gbbn = new GetBandByname(); int j = gbbn.getnumber(Form1.boduan[i].Bandsname, bandname, Form1.boduan[i].bands); //初始化数据并赋值 double[] temp = new double[Form1.boduan[i].ColumnCounts * Form1.boduan[i].LineCounts]; for (int k = 0; k < Form1.boduan[i].ColumnCounts * Form1.boduan[i].LineCounts; k++) { temp[k] = Form1.boduan[i].BandsDataD[j, k]; } ColumnCounts = Form1.boduan[i].ColumnCounts; LineCounts = Form1.boduan[i].LineCounts; //将数据压入栈中 opnd.Push(temp); c = myExp.ToCharArray()[index++]; break; } } band_File += c; } } else if (c != '+' && c != '-' && c != '*' && c != '/' && c != '(' && c != ')' && c != '=') { string band_File = ""; band_File += c; while (true) { if (index + 1 == myExp.Length) { break; } c = myExp.ToCharArray()[index++]; if (!judge(c)) { break; } band_File += c; } double[] temp = opnd.Pop(); int Length = temp.GetLength(0); opnd.Push(temp); double math = Convert.ToDouble(band_File); temp = new double[Length]; for (int i = 0; i < temp.GetLength(0); i++) { temp[i] = math; } opnd.Push(temp); c = myExp.ToCharArray()[index++]; } else { bool isJump = false; switch (Precede(optr.Peek(), c)) { case '<': optr.Push(c); if ((index + 1) == myExp.Length) { isExpressionRight = false; isJump = true; break; } c = myExp.ToCharArray()[index++]; break; case '=': optr.Pop(); //if ((index + 1) == myExp.Length) //{ // isExpressionRight = false; // isJump = true; // break; //} c = myExp.ToCharArray()[index++]; break; case '>': num2 = opnd.Pop(); num1 = opnd.Pop(); opnd.Push(Operate(num1, optr.Pop(), num2)); if (!ishandled) { isJump = true; } break; default: break; } if (isJump) { break; } } } if (!isExpressionRight) { double[] a = new double[100]; } return(opnd.Pop()); } catch (Exception) { double[] a = new double[100]; return(a); } }