kopia lustrzana https://github.com/OpenDroneMap/ODM
Attempts to figure out proper crs
rodzic
f2f73e97ea
commit
f3c167029c
|
@ -43,21 +43,30 @@ with rasterio.open(dem_path) as dem_raster:
|
||||||
|
|
||||||
r = shot.pose.get_rotation_matrix()
|
r = shot.pose.get_rotation_matrix()
|
||||||
Xs, Ys, Zs = shot.pose.get_origin()
|
Xs, Ys, Zs = shot.pose.get_origin()
|
||||||
cam_w = shot.camera.width
|
|
||||||
cam_h = shot.camera.height
|
|
||||||
img_w, img_h, num_bands = shot_image.shape
|
|
||||||
f = shot.camera.focal
|
|
||||||
|
|
||||||
|
A = np.array([[0, 1, 0], [1, 0, 0], [0, 0, 1]])
|
||||||
|
# A = np.array([[0, 0, 1], [0, 1, 0], [-1, 0, 0]])
|
||||||
|
r = (np.linalg.inv(r).dot(A)).dot(r)
|
||||||
|
|
||||||
|
# roll = [[1, 0, 0], [0, -1, 0], [0, 0, -1]]
|
||||||
|
# pitch = [[-1, 0, 0], [0, 1, 0], [0, 0, -1]]
|
||||||
|
# yaw = [[-1, 0, 0], [0, -1, 0], [0, 0, 1]]
|
||||||
|
|
||||||
|
# print(r)
|
||||||
|
# r = r.dot(pitch).dot(yaw)
|
||||||
|
# print(r)
|
||||||
|
|
||||||
|
img_h, img_w, num_bands = shot_image.shape
|
||||||
|
print("Image dimensions: %sx%s pixels" % (img_w, img_h))
|
||||||
|
f = shot.camera.focal# * max(img_h, img_w)
|
||||||
|
|
||||||
def process_pixels(step):
|
def process_pixels(step):
|
||||||
imgout = np.full((num_bands, w, h), np.nan, dtype=shot_image.dtype)
|
imgout = np.full((num_bands, w, h), np.nan, dtype=shot_image.dtype)
|
||||||
for i in range(w):
|
for i in range(w):
|
||||||
if i % max_workers == step:
|
if i % max_workers == step:
|
||||||
for j in range(h):
|
for j in range(h):
|
||||||
# i, j = (168, 442) # TODO REMOVE
|
|
||||||
|
|
||||||
# World coordinates
|
# World coordinates
|
||||||
Xa, Ya = dem_raster.xy(i, j)
|
Xa, Ya = dem_raster.xy(j, i)
|
||||||
Za = dem[j][i]
|
Za = dem[j][i]
|
||||||
|
|
||||||
# Colinearity function http://web.pdx.edu/~jduh/courses/geog493f14/Week03.pdf
|
# Colinearity function http://web.pdx.edu/~jduh/courses/geog493f14/Week03.pdf
|
||||||
|
@ -65,14 +74,23 @@ with rasterio.open(dem_path) as dem_raster:
|
||||||
dy = (Ya - Ys)
|
dy = (Ya - Ys)
|
||||||
dz = (Za - Zs)
|
dz = (Za - Zs)
|
||||||
|
|
||||||
|
# ?
|
||||||
den = r[0][2] * dx + r[1][2] * dy + r[2][2] * dz
|
den = r[0][2] * dx + r[1][2] * dy + r[2][2] * dz
|
||||||
x = 0.5 + (-f * (r[0][0] * dx + r[1][0] * dy + r[2][0] * dz) / den)
|
x = (f * (r[0][0] * dx + r[1][0] * dy + r[2][0] * dz) / den)
|
||||||
y = 0.5 + (-f * (r[0][1] * dx + r[1][1] * dy + r[2][1] * dz) / den)
|
y = (f * (r[0][1] * dx + r[1][1] * dy + r[2][1] * dz) / den)
|
||||||
|
|
||||||
# TEST
|
# den = r[2][0] * dx + r[2][1] * dy + r[2][2] * dz
|
||||||
|
# x = (img_w - 1) / 2.0 + (-f * (r[0][0] * dx + r[0][1] * dy + r[0][2] * dz) / den)
|
||||||
|
# y = (img_h - 1) / 2.0 + (-f * (r[1][0] * dx + r[1][1] * dy + r[1][2] * dz) / den)
|
||||||
if x >= 0 and y >= 0 and x <= 1.0 and y <= 1.0:
|
if x >= 0 and y >= 0 and x <= 1.0 and y <= 1.0:
|
||||||
for b in range(3):
|
for b in range(num_bands):
|
||||||
imgout[b][i][j] = 255
|
imgout[b][i][j] = 255
|
||||||
|
|
||||||
|
# if x >= 0 and y >= 0 and x <= img_w and y <= img_h:
|
||||||
|
# xi = min(round(x), img_w - 1)
|
||||||
|
# yi = min(round(y), img_h - 1)
|
||||||
|
# for b in range(num_bands):
|
||||||
|
# imgout[b][i][j] = shot_image[yi][xi][b]
|
||||||
return imgout
|
return imgout
|
||||||
|
|
||||||
with multiprocessing.Pool(max_workers) as p:
|
with multiprocessing.Pool(max_workers) as p:
|
||||||
|
@ -97,4 +115,16 @@ with rasterio.open(dem_path) as dem_raster:
|
||||||
}
|
}
|
||||||
with rasterio.open("/datasets/brighton2/odm_meshing/tmp/out.tif", 'w', **profile) as wout:
|
with rasterio.open("/datasets/brighton2/odm_meshing/tmp/out.tif", 'w', **profile) as wout:
|
||||||
for b in range(num_bands):
|
for b in range(num_bands):
|
||||||
wout.write(imgout[b], b + 1)
|
wout.write(imgout[b], b + 1)
|
||||||
|
|
||||||
|
# # TODO REMOVE
|
||||||
|
profile = {
|
||||||
|
'driver': 'GTiff',
|
||||||
|
'width': w,
|
||||||
|
'height': h,
|
||||||
|
'count': 1,
|
||||||
|
'dtype': dem.dtype.name,
|
||||||
|
'nodata': None
|
||||||
|
}
|
||||||
|
with rasterio.open("/datasets/brighton2/odm_meshing/tmp/dsm_out.tif", 'w', **profile) as wout:
|
||||||
|
wout.write(dem, 1)
|
Ładowanie…
Reference in New Issue