扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
就是拆分字符串嘛用一个例子就知道了s=split("赵,钱,孙,李",",")s是个字符串数组,这样的话,s中就有四个元素s(0)是赵s(1)是钱s(2)是孙s(3)是李比自己一个个赋值快多了
成都创新互联2013年开创至今,是专业互联网技术服务公司,拥有项目网站设计制作、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元叶集做网站,已为上家服务,为叶集各地企业和个人服务,联系电话:028-86922220
图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果。
本文针对几种经典而常用的二值发放进行了简单的讨论并给出了其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。
(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=H0 +HB,选取使W最大的灰度级作为分割图像的阈值,这就是一维最大熵阈值图像分割法。
不需要用数组:
假设已经存在的图片文件存放在 C:\图片 文件夹里,并假设新创建的文件夹位于C:\图片 文件夹里。
在窗体上添加一个按钮,代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Long = -1
Dim P As Long = -1
Dim Pn As String
Dim MyNum As Integer = 100 '每100个文件存放在一个文件夹里
Dim MyPath As String
Dim MyFileName As String
Button1.Enabled = False
MyPath = "C:\图片\" '指定已有图片的路径
MyFileName = UCase(Dir(MyPath, FileAttribute.Normal)) ' 找寻第一项。
Do While MyFileName "" ' 开始循环。
If InStr(MyFileName, "JPG") 0 Or InStr(MyFileName, "GIF") 0 Or InStr(MyFileName, "PNG") 0 Then
n = n + 1
If n \ MyNum P Then
P = P + 1
Pn = CStr(n \ MyNum + 1)
MkDir(MyPath Pn)
End If
FileCopy(MyPath MyFileName, MyPath Pn "\" MyFileName)
End If
MyFileName = UCase(Dir()) ' 查找下一项
Loop
Button1.Enabled = True
End Sub
代码通过测试。
要解决这个问题办法很多,如何选择取决于应用环境和具体需求。
使用双重循环是最简单的办法。这个方案虽然计算成本较高,但适应性强,最容易实现。如果是有序数组,可以通过二分法迅速定位目标位置;你也可以构造一个临时数组,通过“摘除法”减少比较次数。
除此之外,预先构造一个对应表也是很有效率的方法。磨刀不误砍柴工。
如果有环境的支持,那效率和代码都要省很多。最典型的就是LinQ。如果你使用的是VB.net,并且框架是3.0版本以上,就可以得到LinQ的支持了。或者,如果你的数据是从数据库中获取的,那么使用SQL语句重新从数据库获取过滤过的数据比自己双重循环比较效率还要高。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流