使用像素数据对多边形进行分段并拟合最佳线

时间:2017-04-11 12:58:43

标签: python numpy matplotlib python-imaging-library polygons

我正在使用two intersecting pentagons的jpeg。我已经使用PIL将图像转换为像素数据,但是我在分割多边形的每个线段时遇到了问题。我想在每个线段上放置一条最佳拟合线,以处理角度和线段以比较其他数据。我目前正在设置左/右/低/高限以捕获每个段。它工作,但不捕获每个像素。必须有更好的方法来分离片段或分析多边形。任何帮助或指示都表示赞赏。

img = Image.open(path)

data = img.getdata()
height, width = img.size

pixelList = []
pix = img.load()

for x in range(height):
    for y in range(width):
        pixelList.append((x, y, pix[x,y]))

black_coords = []
x_coords = []
y_coords = []

for i in pixelList:
    if i[2][0] < 50:
        black_coords.append((i[0],i[1]))
        x_coords.append(i[0])
        y_coords.append(i[1])

plt.scatter(x_coords,y_coords)

def segment_bound(left_bound, right_bound, low_bound, high_bound):
    segX = []
    segY = []
    for i in black_coords:
        if i[0] > left_bound and i[0] < right_bound and i[1] > low_bound and 
i[1] < high_bound:
            segX.append(i[0])
            segY.append(i[1])
    return segX, segY

这是每个细分的代码,它很繁琐但有效

seg1X, seg1Y = segment_bound(147.4, 285.7, 305, 345)
startline = min(seg1X)
endline = max(seg1X)
p_coeff = np.polyfit(seg1X, seg1Y, 1)
p = np.poly1d( p_coeff )
x = np.linspace( startline, endline)
seg1m, seg1b = list(p)

0 个答案:

没有答案