几种经典的二值化方法及其vb.net实现图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程 。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注 , 产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果 。
本文针对几种经典而常用的二值发放进行了简单的讨论并给出了其vb.net 实现 。
1、P-Tile法
Doyle于1962年提出的P-Tile (即P分位数法)可以说是最古老的一种阈值选取方法 。该方法根据先验概率来设定阈值,使得二值化后的目标或背景像素比例等于先验概率,该方法简单高效,但是对于先验概率难于估计的图像却无能为力 。
2、OTSU 算法(大津法)
OSTU算法可以说是自适应计算单阈值(用来转换灰度图像为二值图像)的简单高效方法 。1978 OTSU年提出的最大类间方差法以其计算简单、稳定有效,一直广为使用 。
3、迭代法(最佳阀值法)
(1).求出图象的最大灰度值和最小灰度值,分别记为Zl和Zk,令初始阈值为:
(2).根据阈值TK将图象分割为前景和背景,分别求出两者的平均灰度值Z0和ZB:
式中 , Z(i,j)是图像上(i,j)点的象素值 , N(i,j)是(i,j)点的权值 , 一般取1 。
【vb.net经典程序 vb net】(3).若TK=TK 1 , 则所得即为阈值,否则转2,迭代计算 。
4、一维最大熵阈值法
它的思想是统计图像中每一个灰度级出现的概率,计算该灰度级的熵 ,假设以灰度级T分割图像,图像中低于T灰度级的像素点构成目标物体(O) , 高于灰度级T的像素点构成背景(B),那么各个灰度级在本区的分布概率为:
O区: i=1,2……,t
B区: i=t 1,t 2……L-1
上式中的 ,这样对于数字图像中的目标和背景区域的熵分别为:
对图像中的每一个灰度级分别求取W=H0HB,选取使W最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法 。
VB.NET经典问题(1)这个问题看似简单,实际上包含了三个问题:
1. 5/2 的结果是 Double 类型
2. dim aa as Integer = 5/2 将 Double 类型隐式转换为 Integer 类型
3. 转换过程将小数部分 Banker 舍入
因为你这两个算式小数部分都是0.5,所以取最近的偶数 aa = 2 , bb = 4
vb.net 多次滚动抽奖的程序代码vb.net经典程序我用多线程写的vb.net经典程序 , vb.net经典程序你可以参考下 。
系统界面图如下:(注:重置功能为清除已经中奖号码vb.net经典程序,回归1-100都可以中奖状态 。)
代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
System.Threading.Thread g_Thread = null;
Listint g_list = new Listint();
int g_Num = 0;
delegate void g_delegate();
/// summary
/// 开始
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button2_Click(object sender, EventArgs e)
{
if(g_list.Count==100)
{
MessageBox.Show("所有数字已使用,请重置!");
return;
}
button3.Enabled = true;
Random r = new Random();
g_delegate dele= ChangeTxt;
g_Thread = new System.Threading.Thread(() =
{
while(this.IsDisposed==false)
{
g_Num = r.Next(1, 100);
if(g_list.Contains(g_Num))
{
g_Num =1;
}
while(g_list.Contains(g_Num))
{
g_Num;
}
this.Invoke(dele);
System.Threading.Thread.Sleep(50);
}
});
g_Thread.Start();
}
void ChangeTxt()
{
label2.Text = g_Num.ToString();
}
/// summary
/// 停止
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button3_Click(object sender, EventArgs e)
{
//if(g_Thread.ThreadState==System.Threading.ThreadState.Running)
{
g_Thread.Abort();
g_list.Add(Convert.ToInt32(label2.Text));
}
button3.Enabled = false;
}
/// summary
/// 重置
/// /summary
/// param name="sender"/param
/// param name="e"/param
private void button1_Click(object sender, EventArgs e)
{
g_list.Clear();
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
System.Environment.Exit(0);
}
}
用VB.NET编写一个程序 :编一求阶乘的函数f(n),主调程序求组合数的程序,分别调用f(n),用来计算组合数的值Private Sub Command1_Click()
Dim A, B, C
A = 10
B = 3
C = f(A) / (f(B) * f(A - B))
Print C
End Sub
Private Function f(n)
Dim I As Integer
f = 1
For I = 1 To n
f = f * I
Next I
End Function
vb.net经典程序的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vb net、vb.net经典程序的信息别忘了在本站进行查找喔 。
推荐阅读
- postgresql查看表,POSTGRESQL和mysql区别
- 商家标志怎么去掉视频号,剪映怎么把视频中的标志去掉
- 什么鱼是蓝色的视频,蓝色的鱼品种
- 如何洞察一个市场营销,市场洞察的方法包括哪些
- mysql空间类型怎么用 mysql数据库表空间使用情况
- 查正畸医生资质的小程序,查正畸医生资质的小程序叫什么
- 品牌高端网站制作,品牌高端网站制作公司
- 相乘函数Python 相乘函数的积分
- 手机上怎么看免费电视节目,怎样在手机上看免费的电视剧