日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python实现基于八方向判断的断裂连接

發(fā)布時(shí)間:2024/8/26 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现基于八方向判断的断裂连接 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

'''

??八方向連接算法

'''

import numpy as np

import matplotlib.image as mpimg

from PIL import Image

def compute_conv(fm, kernel, judge=None, kernel_num=3):

????[h, w] = fm.shape

????k = kernel_num

????r = int(k / 2)

????padding_fm = np.zeros([h + 2, w + 2])

????rs = np.zeros([h, w])

????padding_fm[1:h + 1, 1:w + 1] = fm

????for i in range(1, h + 1):

????????for j in range(1, w + 1):

????????????if padding_fm[i, j] != 0:

????????????????rs[i - 1][j - 1] = 128

????????????????continue

????????????if judge is not None:

????????????????if judge[i, j] == 0:

????????????????????continue

????????????# (0,0),(3,3)

????????????i0 = i - r

????????????i1 = i + r + 1

????????????j0 = j - r

????????????j1 = j + r + 1

????????????roi = padding_fm[i0:i1, j0:j1]

????????????rs[i - 1][j - 1] = np.sum(roi * kernel)

????return rs

def compute_conv_plus(fm, kernel):

????[h, w] = fm.shape ?# 512?,?512

????k = 5

????r = int(k / 2) ?# 2

????padding_fm = np.zeros([h + 4, w + 4]) ?# 516?,?516

????print(padding_fm.shape)

????rs_plus = np.zeros外匯跟單gendan5.com([h, w]) ?# 512?,?512

????padding_fm[2:h + 2, 2:w + 2] = fm ?#?存儲(chǔ)原像素值

????for i in range(2, h + 2):

????????for j in range(2, w + 2):

????????????# (0,0),(4,4)

????????????i0 = i - r

????????????i1 = i + r + 1

????????????j0 = j - r

????????????j1 = j + r + 1

????????????roi = padding_fm[i0:i1, j0:j1]

????????????print("roi.shape({})".format(roi.shape))

????????????print("kernel.shape({})".format(kernel.shape))

????????????rs_plus[i - 2][j - 2] = np.sum(roi * kernel)

????????????#?為什么最后一個(gè)輸出的?roi?大小是(?5?,?4?)

????return rs_plus

def kernel_i():

????weights_data = [

????????[1, 1, 1],

????????[1, 0, 1],

????????[1, 1, 1]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_j():

????weights_data = [

????????[1, 1, 1, 1, 1],

????????[1, 1, 1, 1, 1],

????????[1, 1, 0, 1, 1],

????????[1, 1, 1, 1, 1],

????????[1, 1, 1, 1, 1]

????]

????weights = np.asarray(weights_data)

????return weights

#?上方向

def kernel_up():

????weights_data = [

????????[1, 1, 1],

????????[0, 0, 0],

????????[0, 0, 0]

????]

????weights = np.asarray(weights_data)

????return weights

#?下方向

def kernel_down():

????weights_data = [

????????[0, 0, 0],

????????[0, 0, 0],

????????[1, 1, 1]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_left():

????weights_data = [

????????[1, 0, 0],

????????[1, 0, 0],

????????[1, 0, 0]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_right():

????weights_data = [

????????[0, 0, 1],

????????[0, 0, 1],

????????[0, 0, 1]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_left_up():

????weights_data = [

????????[1, 1, 0],

????????[1, 0, 0],

????????[0, 0, 0]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_right_down():

????weights_data = [

????????[0, 0, 0],

????????[0, 0, 1],

????????[0, 1, 1]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_right_up():

????weights_data = [

????????[0, 1, 1],

????????[0, 0, 1],

????????[0, 0, 0]

????]

????weights = np.asarray(weights_data)

????return weights

def kernel_left_down():

????weights_data = [

????????[0, 0, 0],

????????[1, 0, 0],

????????[1, 1, 0]

????]

????weights = np.asarray(weights_data)

????return weights

def main():

????for i in range(c):

????????l1 = temp[:, :, i]

????????kernel_1 = [kernel_up(), kernel_left(), kernel_left_up(), kernel_right_up()]

????????kernel_2 = [kernel_down(), kernel_right(), kernel_right_down(), kernel_left_down()]

????????input = np.asarray(l1)

????????#?八方向判斷

????????kernel_1_res = []

????????kernel_2_res = []

????????for weight1, weight2 in zip(kernel_1, kernel_2):

????????????kernel_1_res.append(compute_conv(input, weight1))

????????????kernel_2_res.append(compute_conv(input, weight2))

????????#?構(gòu)建判斷矩陣,用來(lái)判斷某個(gè)像素是否進(jìn)行卷積

????????judge = np.zeros((h + 2, w + 2))

????????for x in range(h):

????????????for y in range(w):

????????????????>

????????????????for w1_res, w2_res in zip(kernel_1_res, kernel_2_res):

????????????????????if (w1_res[x, y] > 0 and w2_res[x, y] <= 0) or (w1_res[x, y] == 0 and w2_res[x, y] != 0):

????????????????????????>

????????????????if not one_side:

????????????????????judge[x + 1, y + 1] = 1

????????result = compute_conv(input, kernel_i(), judge=judge)

????????for x in range(h):

????????????for y in range(w):

????????????????if result[x, y] != 0:

????????????????????result[x, y] = 128

????????????????else:

????????????????????result[x, y] = 0

????????arr[:, :, i] = result

????arr01 = np.array(arr, dtype=np.uint8)

????image = Image.fromarray(arr01, 'RGB')

????image.save(r'')

img = mpimg.imread(r'')

temp = np.asarray(img)

[h, w, c] = temp.shape

arr = np.zeros((h, w, c), int)

main()

總結(jié)

以上是生活随笔為你收集整理的python实现基于八方向判断的断裂连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。