You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.6 KiB
58 lines
1.6 KiB
5 years ago
|
import numpy as np
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
from . import geometry
|
||
|
|
||
|
def image_matrix(ims, bgval=0):
|
||
|
n = ims.shape[0]
|
||
|
m = int( np.ceil(np.sqrt(n)) )
|
||
|
h = ims.shape[1]
|
||
|
w = ims.shape[2]
|
||
|
mat = np.empty((m*h, m*w), dtype=ims.dtype)
|
||
|
mat.fill(bgval)
|
||
|
idx = 0
|
||
|
for r in range(m):
|
||
|
for c in range(m):
|
||
|
if idx < n:
|
||
|
mat[r*h:(r+1)*h, c*w:(c+1)*w] = ims[idx]
|
||
|
idx += 1
|
||
|
return mat
|
||
|
|
||
|
def image_cat(ims, vertical=False):
|
||
|
offx = [0]
|
||
|
offy = [0]
|
||
|
if vertical:
|
||
|
width = max([im.shape[1] for im in ims])
|
||
|
offx += [0 for im in ims[:-1]]
|
||
|
offy += [im.shape[0] for im in ims[:-1]]
|
||
|
height = sum([im.shape[0] for im in ims])
|
||
|
else:
|
||
|
height = max([im.shape[0] for im in ims])
|
||
|
offx += [im.shape[1] for im in ims[:-1]]
|
||
|
offy += [0 for im in ims[:-1]]
|
||
|
width = sum([im.shape[1] for im in ims])
|
||
|
offx = np.cumsum(offx)
|
||
|
offy = np.cumsum(offy)
|
||
|
|
||
|
im = np.zeros((height,width,*ims[0].shape[2:]), dtype=ims[0].dtype)
|
||
|
for im0, ox, oy in zip(ims, offx, offy):
|
||
|
im[oy:oy + im0.shape[0], ox:ox + im0.shape[1]] = im0
|
||
|
|
||
|
return im, offx, offy
|
||
|
|
||
|
def line(li, h, w, ax=None, *args, **kwargs):
|
||
|
if ax is None:
|
||
|
ax = plt.gca()
|
||
|
xs = (-li[2] - li[1] * np.array((0, h-1))) / li[0]
|
||
|
ys = (-li[2] - li[0] * np.array((0, w-1))) / li[1]
|
||
|
pts = np.array([(0,ys[0]), (w-1, ys[1]), (xs[0], 0), (xs[1], h-1)])
|
||
|
pts = pts[np.logical_and(np.logical_and(pts[:,0] >= 0, pts[:,0] < w), np.logical_and(pts[:,1] >= 0, pts[:,1] < h))]
|
||
|
ax.plot(pts[:,0], pts[:,1], *args, **kwargs)
|
||
|
|
||
|
def depthshow(depth, *args, ax=None, **kwargs):
|
||
|
if ax is None:
|
||
|
ax = plt.gca()
|
||
|
d = depth.copy()
|
||
|
d[d < 0] = np.NaN
|
||
|
ax.imshow(d, *args, **kwargs)
|