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

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

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

Python 日期與時間的處理

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

Image

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

Image

Python 日期與時間的處理

Image

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

Image

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

Image

修復損毀的 SQLite DB 資料庫

Image

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

解決 ValueError: If using all scalar values, you must pass an index

Image

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

Image

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

Image