python矩阵变化_矩阵变换,距离函数,斜切的简单python语言numpy实现

矩阵变换,距离函数,斜切的简单python语言numpy实现

简介距离函数

基本算法原理

代码展示(原创代码)`

简介距离函数

距离函数,在图像中有较为重要的基础作用。在二值图像中,将背景以0像素表示,物体以1表示。

基本算法原理

1.将图像中的物体像素点初始化为0,而背景板初始化为无穷,可以依据实际情况设定一个较大值。在我的例子中,由于矩阵值都很小,所以设置背景初始化为100.

2.创建左上角算子

9b89c1d223e344e9baed47f6aff9d07b.jpg

点p的位置为开始的矩阵点,这也就是一个算子,AL区域为它的邻域。

计算

41eeacc1de924277ae9a1b947ca99d00.jpg

3.创建右下角算子

b59132f75ed44d87b53cc11728c0c0c6.jpg

BR为像素点p的邻域。

之后做卷积类似的处理

05f0de212fa1457cbc864a288e52faeb.jpg

代码展示(原创代码)`

#距离变换算法python语言实现

import numpy as np

#定义第一个算子,右上角算子

def sobel_rl(data):

c,d = data.shape

for i in range(c):

for j in range(d):

a = []

e = []

if c>i-1>= 0:

a.append((data[i-1,j],i-1,j))

if c>i -1>=0 and d>j-1>=0:

a.append((data[i-1,j-1],i-1,j-1))

if d>j-1>=0:

a.append((data[i,j-1],i,j-1))

if 0<=i+1j-1>=0:

a.append((data[i+1,j-1],i+1,j-1))

if len(a):

for b in a:

e.append(np.min([data[i,j],(b[0]+np.abs(i-b[1])+np.abs(j-b[2]))]))

data[i,j] = np.min(e)

return data

# a = np.zeros((3,3))

# for c1 in range(3):

# for r1 in range(c1+1,3):

# a[c1,r1] = 100

# a = a + a.transpose()

#定义第二个算子,左下角算子

def sobel_ll(data):

c,d = data.shape

for i in range(c):

for j in range(d):

a = []

e = []

i = c-i-1

j = d-j-1

if c>i+1>= 0:

a.append((data[i+1,j],i+1,j))

if c>i +1>=0 and d>j+1>=0:

a.append((data[i+1,j+1],i+1,j+1))

if d>j+1>=0:

a.append((data[i,j+1],i,j+1))

if 0<=i-1j+1>=0:

a.append((data[i-1,j+1],i-1,j+1))

if len(a):

for b in a:

e.append(np.min([data[i,j],(b[0]+np.abs(i-b[1])+np.abs(j-b[2]))]))

data[i,j] = np.min(e)

return data

a = np.array([[100,100,100,100,0,100],[100,100,100,0,100,100],[100,100,100,0,100,100],[100,100,100,100,0,100],[100,100,100,100,100,0],[100,100,100,100,100,0]])

print(a)

dataone = sobel_rl(a)

print(dataone)

datatwo = sobel_ll(dataone)

print(sobel_ll(datatwo))

``结果:

[[4 3 2 1 0 1]

[3 2 1 0 1 2]

[3 2 1 0 1 2]

[4 3 2 1 0 1]

[5 4 3 2 1 0]

[6 5 3 2 1 0]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值