Dilation (增长) (VB 6.0)
Dilation (增长) (VB 6.0)
介绍
增长就是当周边有任一点为黑点时,该点则为黑点。思考一下,当有一个点,存在于矩阵中,当开始以3×3屏蔽扫描时,该点的四周都会被包含在屏蔽中,因此该点的四周也都设定为黑点。这样看起来就会变成大了,因此以增长为名。在这里所谓称为邻居,解释为方向之意。八邻居也就是该点的八个方向(左上、上、右上、左、原点、右、左下、下、右下);四邻居就是四个方向(上、下、左、右)。
八邻居增长的计算公式如下:
四邻居增长的计算公式如下:
用法
‘设定所有变量必须宣告才能使用
Option
Explicit
‘窗体起始加载事件
Private Sub
Form_Load()
‘picture1加载影像
Picture1.Picture = LoadPicture(App.Path
& "\Lai, Tai-Yu.bmp")
‘宣告巡览X轴变量
Dim lngX As Long
‘宣告巡览Y轴变量
Dim lngY As Long
‘宣告结果像素变量
Dim intS
‘宣告矩阵第一列变量
Dim intA, intB, intC
‘宣告矩阵第二列变量
Dim intD, intE, intF
‘宣告矩阵第三列变量
Dim intG, intH, intI
‘设定picture1控件采用像素为单位
Picture1.ScaleMode = 3
‘使picture1控件的自动重绘有效
Picture1.AutoRedraw = True
‘设定picture2控件采用像素为单位
Picture2.ScaleMode = 3
‘使picture2控件的自动重绘有效
Picture2.AutoRedraw = True
‘巡览picture1的Y轴
For lngY = 0 To Picture1.ScaleHeight
‘巡览picture1的X轴
For lngX = 0 To Picture1.ScaleWidth
‘让计算机有多余时间处理其他事件
DoEvents
‘像素值减去255,是代表当遇到白色的时候,回传值为零
‘反之若遇到黑色则为-255
intA = (Picture1.Point(lngX - 1,
lngY - 1) And &HFF) - 255
intB = (Picture1.Point(lngX, lngY -
1) And &HFF) - 255
intC = (Picture1.Point(lngX + 1,
lngY - 1) And &HFF) - 255
intD = (Picture1.Point(lngX - 1,
lngY) And &HFF) - 255
intE = (Picture1.Point(lngX, lngY)
And &HFF) - 255
intF = (Picture1.Point(lngX + 1,
lngY) And &HFF) - 255
intG = (Picture1.Point(lngX - 1,
lngY + 1) And &HFF) - 255
intH = (Picture1.Point(lngX, lngY +
1) And &HFF) - 255
intI = (Picture1.Point(lngX + 1,
lngY + 1) And &HFF) – 255
‘将所有变量值加总起来,取绝对值
intS = Abs(intA + intB + intC +
intD + intE + intF + intG + intH + intI)
‘倘若大于零,则代表周围像素有一个为黑色
If intS > 0 Then
‘设定结果像素变量为黑色
intS = 0
‘反之则代表周围像素没有黑色
Else
‘设定结果像素变量为白色
intS = 255
‘结束If判断
End If
‘依据结果像素变量,设定picture2的颜色
Picture2.PSet (lngX, lngY),
RGB(intS, intS, intS)
‘跳回X轴循环下一次
Next lngX
‘跳回Y轴循环下一次
Next lngY
‘结束事件子程序
End Sub
下载原始档及执行档:
例外
1. 如果执行档不能执行,请先安装vbrun60sp6.exe。
参考
[2] Kuo-Jen,
Lien, Digital Image Processing, ISBN: 9789574998333, Scholars Books Co., Ltd.
致谢
感谢 (维基自由百科) 提供的知识。