📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
Bitmap bb = new Bitmap(121, 121);
Bitmap b = new Bitmap(121, 121);
Bitmap result = new Bitmap(121, 121);
public Form1()
{
InitializeComponent();
}
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "bmp files (*.bmp)|*.txt|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
bb = new Bitmap(openFileDialog1.FileName);
}
pictureBox1.Image = bb;
pictureBox1.Size = bb.Size;
}
public int findthreshold(int[] GrayLevel)
{
int peak1, peak2, valley;
int peak1Index, peak2Index, valleyIndex;
// 取双峰
peak1 = peak2 = GrayLevel[0];
peak1Index = peak2Index = 0;
for (int i = 1; i < 256; i++)
{
// 如果产生新的高峰,则将第一峰退居第二峰,新的高峰升为第一峰
if (GrayLevel[i] > peak1)
{
peak2 = peak1;
peak2Index = peak1Index;
peak1 = GrayLevel[i];
peak1Index = i;
}
} // i
// 判断两个峰值索引
int max = peak1Index;
int min = peak2Index;
if (max < min)
{
int t = max;
max = min;
min = t;
}
// 取峰谷
valley = GrayLevel[min];
valleyIndex = min;
for (int i = min; i < max; i++)
{
if (GrayLevel[i] < valley)
{
valley = GrayLevel[i];
valleyIndex = i;
}
} // i
return valleyIndex;
}
private void 二值化ToolStripMenuItem_Click(object sender, EventArgs e)
{
grayprocess gp = new grayprocess();
b = bb;
b = gp.Gray(bb, GrayMethod.WeightAveraging);
gp.histogram(b);
int[] GrayLevel = gp.Red;
// pictureBox2.Image = b;
int valleyIndex = findthreshold(GrayLevel);
//int iii;
//Bitmap dd = new Bitmap(121,123);
result = gp.Threshold(b, valleyIndex);
pictureBox1.Image = result;
pictureBox1.Size = result.Size;
}
private void 直方图ToolStripMenuItem_Click(object sender, EventArgs e)
{
int y;
int diagramHeight = pictureBox2.Height;
grayprocess gp = new grayprocess();
b = bb;
b = gp.Gray(bb, GrayMethod.WeightAveraging);
gp.histogram(b);
int[] Probability = gp.Red;
double maxpro=0;
double[] a = new double[256];
Color color = Color.Red;
Pen pen = new Pen(color, 1);
Bitmap dstImage = new Bitmap(256, pictureBox2.Height);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dstImage);
for (int i = 0; i < 256; i++)
{
if (maxpro < Probability[i])
maxpro = Probability[i];
}
for (int i = 0; i < 256; i++)
{
// 当前亮度级与最大亮度级的比率
double percent = Probability[i] /maxpro;
y = (int)(diagramHeight * (1 - Math.Log(100 * percent + 1, 101)));
//y = (int)(diagramHeight * (1 - percent));
a[i] =y;
g.DrawLine(pen, i, y, i, diagramHeight);
}
g.Save();
g.Dispose();
pictureBox2.Image = dstImage;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -