python图像分割重组_Python中基于图的图像分割

Python中基于图的图像分割

问题定义和基本思想(摘自本文)

令G =(V,E)是一个无向图,其中顶点vi∈V,待分割的元素集,并且边缘(vi,vj)∈E对应于成对的相邻顶点。每个边缘(vi,vj)∈E具有对应的权重w((vi,vj)),这是相邻元素vi和vj之间相异性的非负度量。

在图像分割的情况下,V中的元素是像素,边缘的权重是对该边缘连接的两个像素之间相异程度的某种度量(例如,强度,颜色,运动,位置或其他局部属性)。

特别是对于实施这里所描述的,边缘权重函数基于所述绝对强度差(在YIQ由边缘连接的像素之间的空间),  W((六,VJ))= | I(PI) - I(PJ) | 。

在基于图的方法中,分段S是将V划分为多个分量的过程

,以使每个分量(或区域)C∈S对应

于图中G0 =(V,E0)的连接分量,其中E0?E。

换句话说,任何分割都是由E中边缘的子集引起的。测量分割质量的方法有很多,但总的来说,我们希望组件中的元素相似,而不同组件中的元素不相似。

这意味着同一组件中两个顶点之间的边缘应具有较低的权重,而不同组件中两个顶点之间的边缘应具有较高的权重。

下图显示了算法中的步骤。该算法与用于计算无向图的MST的Kruskal算法非常相似。

f17.png

阈值函数τ控制两个组件之间的差异必须大于其内部差异的程度,以便在它们之间有边界的证据。

对于小组件,Int(C)不能很好地估计数据的局部特征。在极端情况下,当| C | = 1,Int(C)=0。因此,基于组件大小的阈值函数 τ(C)= k / | C |。需要使用, 其中| C | 表示C的大小,k是一些常数。

也就是说,对于小零件,我们需要更强有力的边界证据。实际上,k设置观察范围,因为较大的k会导致对较大分量的偏好。

通常, 为了补偿数字化伪像,在计算边缘权重之前,先使用高斯滤波器稍微平滑图像。我们始终使用σ= 0.8的高斯,它不会对图像产生任何可见变化,但有助于消除伪影。

以下python代码显示了如何创建图形。

1个

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18岁

19

20

21

22

23

24

25

26

27

28

29

30

import numpy as np

from scipy import signal

import matplotlib.image as mpimg

def gaussian_kernel(k

# generate a (2k+1)x(2k+1) gaussian kernel with mean=0 and sigma = s

probs = [exp(-z*z/(2*s*s))/sqrt(2*pi*s*s) for z in range(-k

return np.outer(probs

def create_graph(imfile

# create the pixel graph with edge weights as dissimilarities

rgb = mpimg.imread(imfile)[:

gauss_kernel = gaussian_kernel(sz

for i in range(3):

rgb[:

yuv = rgb2yiq(rgb)

(w

edges = {}

for i in range(yuv.shape[0]):

for j in range(yuv.shape[1]):

#compute edge weight for nbd pixel nodes for the node i

for i1 in range(i-1

for j1 in range(j-1

if i1 == i and j1 == j: continue

if i1 >= 0 and i1 = 0 and j1 < h:

wt = np.abs(yuv[i

n1

edges[n1

return edges

一些结果

图像取自纸张本身或互联网。下图和动画显示了根据组件内部差异,通过迭代合并组件(通过选择最小权重边缘)进行分割的结果。

尽管作者在论文中将参数k的最佳值描述为300左右,但是由于在此实现中,像素RGB值被规范化(值在0 – 1之间),然后转换为YIQ值和YIQ强度用于计算权重(通常很小),在这种情况下效果最好的k值为0.001-0.01。

从下面的结果可以看出,参数k的值越高,最终分量的大小越大,结果中的分量数越少。

还显示了最小生成树的创建,图中显示的红色边缘 是算法选择的用于合并组件的边缘。

输入图像

player.png

参数k的两个不同值的输出图像

player_k_0.001.gif

player_k_0.01.gif

out_ 0.001player.png

out_ 0.010player.png

经过几次迭代后创建的森林

mst1

输入图像

爬坡道

参数k的两个不同值的输出图像

hill_k_0.01

out_ 0.010hill.png

hill_k_0.001

out_ 0.001hill.png

经过几次迭代后创建的森林

mst3.png

输入图像

鹦鹉

输出分割图像

鹦鹉_k_0.001out_ 0.001parrot_Dark2.pngout_ 0.001parrot_hot.png

输入图像

道路2

分段输出图像

road2_k_0.01

out_ 0.001road2_Set1.png

输入图像

参数k的两个不同值的输出图像

road_k_0.001

out_ 0.001road.png

road_k_0.01out_ 0.010road.png

经过几次迭代后创建的森林

mst2.png

输入图像(UMBC)

umbc.png

分段输出图像

umbc_k_0.001out_ 0.001umbc.png

我NPUT图片

nj.png

k = 0.001的分段输出图像

out_ 0.001nj.png

我NPUT图片

k = 0.001的分段输出图像

ring_k_0.001

我NPUT图片

鲜花2

k = 0.001的分段输出图像

out_ 0.001flowers2.png

我NPUT图片(肝)

分段输出图像

out_ 0.001liver.pngout_ 0.010liver.png

我NPUT图片

建造

具有不同k值的分段输出图像

building_k_0.01

out_ 0.001building.png out_ 0.010building.png

我NPUT图片

框号056

分割输出图像

out_ 0.001frame056.png

我NPUT图片

维克

不同k的分段输出图像

题库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值