测量像素块的连续程度

时间:2016-07-13 22:38:44

标签: image-processing distance pixel genetic-algorithm

我在Genetic Algorithms (GA)问题上使用image processing(图像分割更精确)。在这种情况下,individual表示像素块(即一组像素坐标)。我需要鼓励contiguous像素的人。

鼓励连续的像素块:

  • " contiguousness"需要在fitness function中考虑个人,以鼓励individuals具有相邻像素(最佳拟合)。因此,在进化过程中,一组坐标(即个体)的连续性将影响这个人的适应性。

我面临的问题是如何在一组像素坐标(x,y)上测量此特征(contiguous多少?)?

如下图所示,右侧的个人(黑色像素组)显然更多"连续" (因此更健康)比左边的个人:


                       

1 个答案:

答案 0 :(得分:1)

我想我理解你在问什么,我的建议是计算像素之间共享“墙”的数量:different types of continuity

我认为,从左到右,个体的连续性正在下降。

计算墙的数量并不难编码,但可能比我在这里实施它的方式慢。

import random

width = 5
height = 5
image = [[0 for x in range(width)] for y in range(height)]

num_pts_in_individual = 4

#I realize this may give replicate points
individual = [[int(random.uniform(0,height)),int(random.uniform(0,width))] for x in range(num_pts_in_individual)]

#Fill up the image
for point in individual:
    image[point[0]][point[1]] = 1

#Print out the image
for row in image:
    print row


def count_shared_walls(image):
    num_shared = 0
    height = len(image)
    width = len(image[0])
    for h in range(height):
        for w in range(width):
            if image[h][w] == 1:
                if h > 0 and image[h-1][w] == 1:
                    num_shared += 1
                if w > 0 and image[h][w-1] == 1:
                    num_shared += 1
                if h < height-1 and image[h+1][w] == 1:
                    num_shared += 1
                if w < width-1 and image[h][w+1] == 1:
                    num_shared += 1
    return num_shared

shared_walls = count_shared_walls(image)
print shared_walls

不同的图像和共享墙的数量:

[0, 0, 0, 0, 0]
[0, 1, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 0, 1, 1]
[0, 0, 0, 0, 0]
2


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

[0, 0, 0, 1, 1]
[0, 0, 0, 1, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
4

这个问题的一个主要问题是,如果像素位置发生变化而不会改变共享墙的数量,则不会影响分数。也许你描述的距离方法和共享墙方法的组合最好。