當前位置:編程學習大全網 - 源碼下載 - 圖像處理之 4連接數、8連接數

圖像處理之 4連接數、8連接數

壹. 定義:

4-連接數

4-連接數用於顯示像素的狀態和附近像素的狀態。對於中心像素x_0(x,y),它的鄰域定義如下:

S的取值範圍為[0,4]:

① S=0:內部點或孤點

② S=1:端點

③ S=2:連接點

④ S=3:分支點

⑤ S=4:交叉點

對4-連接數得到的不同位置的像素點進行著色,能夠讓我們清晰地觀察到像素點所處的不同位置(可參考本文實驗結果)。

8-連接數:只需要將二值圖像的0和1進行反轉,然後進行和4-連接數壹樣的計算即可。

二. 實驗:對圖像進行4-連接數著色

源碼:

import cv2

import numpy as np

import matplotlib.pyplot as plt

# Connect 4

def connect_4(img):

# get shape

H, W, C = img.shape

# prepare temporary image

tmp = np.zeros((H, W), dtype=np.int)

# binarize

tmp[img[..., 0] > 0] = 1

# prepare out image

out = np.zeros((H, W, 3), dtype=np.uint8)

# each pixel

for y in range(H):

for x in range(W):

if tmp[y, x] < 1:

continue

S = 0

S += (tmp[y,min(x+1,W-1)] - tmp[y,min(x+1,W-1)] * tmp[max(y-1,0),min(x+1,W-1)] * tmp[max(y-1,0),x])

S += (tmp[max(y-1,0),x] - tmp[max(y-1,0),x] * tmp[max(y-1,0),max(x-1,0)] * tmp[y,max(x-1,0)])

S += (tmp[y,max(x-1,0)] - tmp[y,max(x-1,0)] * tmp[min(y+1,H-1),max(x-1,0)] * tmp[min(y+1,H-1),x])

S += (tmp[min(y+1,H-1),x] - tmp[min(y+1,H-1),x] * tmp[min(y+1,H-1),min(x+1,W-1)] * tmp[y,min(x+1,W-1)])

# 孤點

if S == 0:

out[y,x] = [0, 0, 255]

# 最外端點

elif S == 1:

out[y,x] = [0, 255, 0]

# 連接點

elif S == 2:

out[y,x] = [255, 0, 0]

# 分支點

elif S == 3:

out[y,x] = [255, 255, 0]

# 交叉點

elif S == 4:

out[y,x] = [255, 0, 255]

out = out.astype(np.uint8)

return out

# Read image

img = cv2.imread("../connect4.png").astype(np.float32)

# connect 4

out = connect_4(img)

# Save result

cv2.imwrite("out.png", out)

cv2.imshow("result", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

三. 實驗結果:

四. 實驗:對圖像進行8-連接數著色

源碼:

import cv2

import numpy as np

import matplotlib.pyplot as plt

# connect 8

def connect_8(img):

# get shape

H, W, C = img.shape

# prepare temporary

_tmp = np.zeros((H, W), dtype=np.int)

# get binarize

_tmp[img[..., 0] > 0] = 1

# inverse for connect 8

tmp = 1 - _tmp

# prepare image

out = np.zeros((H, W, 3), dtype=np.uint8)

# each pixel

for y in range(H):

for x in range(W):

if _tmp[y, x] < 1:

continue

S = 0

S += (tmp[y,min(x+1,W-1)] - tmp[y,min(x+1,W-1)] * tmp[max(y-1,0),min(x+1,W-1)] * tmp[max(y-1,0),x])

S += (tmp[max(y-1,0),x] - tmp[max(y-1,0),x] * tmp[max(y-1,0),max(x-1,0)] * tmp[y,max(x-1,0)])

S += (tmp[y,max(x-1,0)] - tmp[y,max(x-1,0)] * tmp[min(y+1,H-1),max(x-1,0)] * tmp[min(y+1,H-1),x])

S += (tmp[min(y+1,H-1),x] - tmp[min(y+1,H-1),x] * tmp[min(y+1,H-1),min(x+1,W-1)] * tmp[y,min(x+1,W-1)])

if S == 0:

out[y,x] = [0, 0, 255]

elif S == 1:

out[y,x] = [0, 255, 0]

elif S == 2:

out[y,x] = [255, 0, 0]

elif S == 3:

out[y,x] = [255, 255, 0]

elif S == 4:

out[y,x] = [255, 0, 255]

out = out.astype(np.uint8)

return out

# Read image

img = cv2.imread("../connect8.png").astype(np.float32)

# connect 8

out = connect_8(img)

# Save result

cv2.imwrite("out.png", out)

cv2.imshow("result", out)

cv2.waitKey(0)

cv2.destroyAllWindows()

五. 實驗結果:

六. 寫在最後的話:

如果您覺得本文對您有所幫助,記得點贊哦!

七. 版權聲明:

  • 上一篇:知乎網站前端使用了什麽技術和框架
  • 下一篇:58同城商用版app招財貓,我在58同城招財貓上認證營業執照時,為什麽
  • copyright 2024編程學習大全網