def make_numpy_grid()

in visualization/np_visualizer.py [0:0]


def make_numpy_grid(arrays_list, gridMaxWidth=2048,
                    imgMinSize=128,
                    interpolation='nearest'):

    # NCWH format
    N, C, W, H = arrays_list.shape

    arrays_list = ((arrays_list + 1.0) * 255.0 / 2.0).astype(np.uint8)

    if C == 1:
        arrays_list = np.reshape(arrays_list, (N, W, H))

    gridMaxWidth = max(gridMaxWidth, W)

    imgSize = max(W, imgMinSize)
    imgHeight = int((float(imgSize) / W) * H)
    nImgsPerRows = min(N, int(gridMaxWidth // imgSize))

    gridWidth = nImgsPerRows * imgSize

    nRows = N // nImgsPerRows
    if N % nImgsPerRows > 0:
        nRows += 1

    gridHeight = nRows * imgHeight
    if C == 1:
        outGrid = np.zeros((gridHeight, gridWidth), dtype='uint8')
    else:
        outGrid = np.zeros((gridHeight, gridWidth, C), dtype='uint8')
    outGrid += 255

    interp = {
        'nearest': Image.NEAREST, 
        'lanczos': Image.LANCZOS, 
        'bilinear': Image.BILINEAR, 
        'bicubic': Image.BICUBIC
    }

    indexImage = 0
    for r in range(nRows):
        for c in range(nImgsPerRows):

            if indexImage == N:
                break

            xStart = c * imgSize
            yStart = r * imgHeight

            img = np.array(arrays_list[indexImage])
            img = Image.fromarray(np.transpose(img, (1,2,0)))

            tmpImage = np.array(img.resize((imgSize, imgHeight), resample=interp[interpolation]))

            if C == 1:
                outGrid[yStart:(yStart + imgHeight),
                        xStart:(xStart + imgSize)] = tmpImage
            else:
                outGrid[yStart:(yStart + imgHeight),
                        xStart:(xStart + imgSize), :] = tmpImage

            indexImage += 1

    return outGrid