[PYTHON] Versuchen Sie, dem Bild die Verzerrung des Fischaugenobjektivs hinzuzufügen

Bibouroku http://www.sanko-shoko.net/note.php?id=wvb7


import numpy as np
import open3d as o3d
import cv2
import math

#Gitterlänge pro Eins
CONST_IMG_PER_WIDTH = 10
CONST_IMG_PER_HEIGHT = 10

#Anzahl der Gitter
CONST_IMG_NUM_WIDTH = 100
CONST_IMG_NUM_HEIGHT = 100

RGB_WHITE = [255,255,255]
RGB_BLACK = [0,0,0]

def write_point_cloud(path,pcl):
    assert o3d.io.write_point_cloud(path, pcl),"error : fail to write pointcloud  = " + path

def exportPLYfromNumpy(nplist, colorList, outputPath):
    pcd = o3d.geometry.PointCloud()
    pcd.points = o3d.utility.Vector3dVector(nplist)
    pcd.colors = o3d.utility.Vector3dVector(colorList)
    write_point_cloud(outputPath, pcd)
    return pcd

def TransformPointI2C(uv,depth,K):
    X = float(float(uv[0] - K[0][2]) * depth / K[0][0])
    Y = float(float(uv[1] - K[1][2]) * depth / K[1][1])
    Z = depth
    CameraPos3D = np.array([[X], [Y], [Z]])
    return CameraPos3D

width_whole = (CONST_IMG_PER_WIDTH+1)*(CONST_IMG_NUM_WIDTH)+1
img_parallel_grid = []
img_parallel_grid.append([RGB_BLACK] * width_whole)
hrange = range((CONST_IMG_PER_HEIGHT+1)*(CONST_IMG_NUM_HEIGHT))

h_cnt=0
for h in hrange:
    h_cnt += 1
    if h_cnt == CONST_IMG_PER_HEIGHT+1:
        tmpimg = [RGB_BLACK] * width_whole
        h_cnt=0
    else:
        tmpimg = [RGB_WHITE] * width_whole

    for w in range(width_whole):
        if CONST_IMG_PER_WIDTH*w+w < len(tmpimg):
            tmpimg[CONST_IMG_PER_WIDTH*w+w] = RGB_BLACK
    img_parallel_grid.append(tmpimg)

img_parallel_grid=np.array(img_parallel_grid)
print(img_parallel_grid.shape)

print(img_parallel_grid)
cv2.imwrite('grid_img.png', img_parallel_grid)

print(img_parallel_grid.shape)
img_height = img_parallel_grid.shape[0]
img_width = img_parallel_grid.shape[1]
f = 10
ch = img_height/2
cw = img_width/2
K = np.array([[f,0,ch],
              [0,f,cw],
              [0,0,1]])

depth = 10 #Fester Wert
pointcloud=[]
colorList=[]
for h in range(img_height):
    for w in range(img_width):
        if img_parallel_grid[h][w].tolist() == RGB_BLACK:
            XYZ = TransformPointI2C([h,w], depth , K)
            pointcloud.append(XYZ.tolist())
            colorList.append(RGB_BLACK)
pcd = exportPLYfromNumpy(pointcloud, colorList, 'grid_pcl.ply')

# http://www.sanko-shoko.net/note.php?id=wvb7
points = pcd.points
k1 = 0.0
k2 = 0.0
k3 = 0.0
k4 = 0.0

#Bereiten Sie ein Bild eines rein weißen Himmels vor
img_disto = np.full(img_parallel_grid.shape,255)

pointcloud=[]
colorList=[]
for point in points:
    X = point[0]
    Y = point[1]
    Z = point[2]

    a = float(X/Z)
    b = float(Y/Z)
    r = math.sqrt(a**2 + b**2)
    tht = np.arctan(r)
    tht2 = tht**2
    tht4 = tht**4
    tht6 = tht**6
    tht8 = tht**8
    theta_d = tht * (1 + k1*tht2 + k2*tht4 + k3*tht6 + k4*tht8)

    u_d = (a*theta_d)/r
    v_d = (b*theta_d)/r

    u = (u_d-ch)/f
    v = (v_d-cw)/f

    pointcloud.append([u,v,f])
    colorList.append(RGB_BLACK)
pcd = exportPLYfromNumpy(pointcloud, colorList, 'disto_pcl.ply')

#
#     img_disto[u_d][v_d]=np.array(RGB_BLACK)
# cv2.imwrite('disto_img.png', img_disto)


Recommended Posts

Versuchen Sie, dem Bild die Verzerrung des Fischaugenobjektivs hinzuzufügen
Punkt entsprechend dem Bild
Versuchen Sie, das Thema Pelican vorzustellen
Probieren Sie Cython in kürzester Zeit aus
Versuchen Sie, das Bild mit opencv2 zu verwischen
Der schnellste Weg, EfficientNet auszuprobieren
Der einfachste Weg, PyQtGraph auszuprobieren
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
Versuchen Sie, sich der Teilsumme zu stellen
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
Versuchen Sie, die Höhendaten des National Land Research Institute mit Python abzubilden
Python Amateur versucht die Liste zusammenzufassen ①
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Versuchen Sie, Pfeffer ein externes Modul hinzuzufügen. Vorerst in Anfragen.
Bis Sie versuchen, DNN mithilfe von Colab die Wahrheit des Bildes mitteilen zu lassen
Wenn Sie mit der Maus über Matplotlib fahren, wird das entsprechende Bild angezeigt.
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Schneiden Sie das Bild mit Pythonista auf abgerundete Ecken
Versuchen Sie, die Daimyo-Prozession in Tucker zu zerlegen
Versuchen Sie, das Problem der Python-Klassenvererbung zu lösen
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Versuchen Sie zum ersten Mal, in Qiita zu posten
Versuchen Sie zu normalisieren Schneiden Sie das Bild mit einem Scikit-Bild aus (obwohl es unterwegs wütend wird)
Fischaugenlinsenkorrektur
Laden Sie das durch Anfragen heruntergeladene Bild direkt in S3 hoch
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Python-Anfänger versucht, dem Administrator von Django eine grundlegende Authentifizierung hinzuzufügen
Wenden wir die Markenbildfarbe auf die Farbkarte von matplotlib an!
[Python] Versuchen Sie, die coole Antwort auf das FizzBuzz-Problem zu lesen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Versuchen Sie, SSH (Exscript) von der Software auf den Router einzustellen
Versuchen Sie, NETCONF (ncclient) von der Software zum Router einzustellen
Versuchen Sie, die Probleme des "Matrix-Programmierers" zu lösen (Kapitel 1).
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Molekulardynamiksimulation vorerst versuchen
Speichern Sie das von pyqtgraph gezeichnete Diagramm in einem Bild
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Konvertieren Sie das Bild in .zip mit Python in PDF
Versuchen Sie, das Bild in einen separaten Thread zu laden (OpenCV-Python).
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
[Neo4J] ④ Versuchen Sie, die Diagrammstruktur mit Cypher zu handhaben
Versuchen Sie, die in Firefox gespeicherten Anmeldedaten zu entschlüsseln
Ändern Sie die Größe des Bildes auf die angegebene Größe und schwärzen Sie die Ränder
Python Open CV hat versucht, das Bild im Text anzuzeigen.
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren