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

📄 form1.cs

📁 matlab计算的自适应阈值分隔
💻 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 + -