Skip to main content

增長(Dilation)(VB 6.0)

增長(Dilation)(VB 6.0)

增長(Dilation)(VB 6.0)

介紹

增長就是當周邊有任一點為黑點時,該點則為黑點。思考一下,當有一個點,存在於矩陣中,當開始以3×3遮罩掃描時,該點的四周都會被包含在遮罩中,因此該點的四周也都設定為黑點。這樣看起來就會變成大了,因此以增長為名。在這裡所謂稱為鄰居,解釋為方向之意。八鄰居也就是該點的八個方向(左上、上、右上、左、原點、右、左下、下、右下);四鄰居就是四個方向(上、下、左、右)。

八鄰居增長的計算公式如下:

image.png

四鄰居增長的計算公式如下:

image.png

用法

image.png

程式碼


‘設定所有變數必須宣告才能使用
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

例外

如果執行檔不能執行,請先安裝vbrun60sp6.exe。

參考

[1] https://www.wikipedia.org/
[2] Kuo-Jen, Lien, Digital Image Processing, ISBN: 9789574998333, Scholars Books Co., Ltd.

致謝

感謝 (維基自由百科) 提供的知識。

Popular posts from this blog

Python 日期與時間的處理

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Python 日期與時間的處理

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (10. 條碼列印程式)

Image

寫作:波蘭文學習之旅:1-1. 波蘭文字母與發音(注音版)

Image

數位影像處理:最佳化處理策略之快速消除扭曲演算法

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (04. 人事考勤管理系統)

Image

用10種程式語言做影像二值化(Image binarization)

Visual Basic 6.0 (VB6) 程式語言案例學習 (07. 收據列印程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (03. 場地預約系統)

Image

Visual Basic 6.0 (VB6) 程式語言案例學習 (11. 生產線拍照程式)

Image

Visual Basic .Net (VB.Net) 程式語言案例學習 (06. 題庫測驗系統)

Image