我在Genetic Algorithms (GA)
问题上使用image processing
(图像分割更精确)。在这种情况下,individual
表示像素块(即一组像素坐标)。我需要鼓励contiguous
像素的人。
鼓励连续的像素块:
fitness function
中考虑个人,以鼓励individuals
具有相邻像素(最佳拟合)。因此,在进化过程中,一组坐标(即个体)的连续性将影响这个人的适应性。我面临的问题是如何在一组像素坐标(x,y)上测量此特征(contiguous
多少?)?
如下图所示,右侧的个人(黑色像素组)显然更多"连续" (因此更健康)比左边的个人:
答案 0 :(得分:1)
我想我理解你在问什么,我的建议是计算像素之间共享“墙”的数量:
我认为,从左到右,个体的连续性正在下降。
计算墙的数量并不难编码,但可能比我在这里实施它的方式慢。
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
这个问题的一个主要问题是,如果像素位置发生变化而不会改变共享墙的数量,则不会影响分数。也许你描述的距离方法和共享墙方法的组合最好。