求T值的方法如下:取某个灰度值k,将图像所有N个像素分成两类,灰度值小于k的作为背景像素,灰度值大于等于k的作为前景像素,统计两类像素的个数分别为N1、N2,计算灰度值的均值分别为μ1、μ2,利用公式计算出两类像素的差异值。当该值最大时,k即为要找的最佳灰度值T。若某区间段内有连续多个T满足要求,则T取中间值。

例如:图a所示图像像素的灰度值仅为0~5,统计0~5灰度值像素的个数依次为8、7、2、6、9、4,如图b所示。当k=2时,N1=15,N2=21,μ1=(0*8+1*7)/(8+7),μ2=(2*2+3*6+4*9+5*4)/(2+6+9+4),计算出差异值为2.5635。依此类推,计算差异值如图c所示。可知,当k=3时差异值最大,3是最佳灰度值T。
编写VB程序,实现如上功能。读取图像所有像素的灰度值后,单击按钮Command1,在标签Label1上显示T值。
(1)在上例中,取k=3,则背景像素的个数N1为
(2)实现上述功能的VB程序如下,请在划线处填入合适的代码。
ConstN= 32 * 24
Dim a(1 To N) As Integer 'a数组存储图像所有像素的灰度值
Private Sub Form_ Load)
读取图像中的所有像素的灰度值存入a数组,代码略
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, k As Integer
Dim sum As Long, suml As Long, N1 As Long, N2 As Long
Dim μl As Double, μ2 As Double, diff As Double, max_var As Double
Dim tl As Integer, t2 As Integer, T As Integer
Dim h(255)As Long
Dim c(255) As Long
max_ var=0:tl= 0:t2=0:N1 =0:N2= 0: sum= 0: suml = 0
For i=0 To 255
h(i)= 0:c(i)= 0
Next i
For i= 1 To N
h(a(i))= h(a(i))+ 1
Next i
c(0)= h(0)
For i= 1 To 255
sum = sum+ i* h(i)
Next i
For k= 1 To 255
N1=c(k-1)
N2=N-N1
If N1<>0 And N2<>0 Then
μl=suml/NI.
μ2 = (sum- suml)/N2
dif=N1/N*N2/N*(μl-μ2)^2
diff = Round(diff, 4) 'Round函数的作用是对diff保留四位小数
If diff>= max_ var Then
tl =k
If diff> max_ var Then
max_ var= diff
End If
End If
Next k
T=(t1 + t2)\2
Labell .Caption = "将该图像分割为前景与背景两部分的最佳灰度值为: "& T
End Sub

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

