[PYTHON] Essayez d'ajouter la distorsion de l'objectif fisheye à l'image

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


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

#Longueur du treillis par un
CONST_IMG_PER_WIDTH = 10
CONST_IMG_PER_HEIGHT = 10

#Nombre de grilles
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 #Valeur fixe
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

#Préparez une image d'un ciel d'un blanc pur
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

Essayez d'ajouter la distorsion de l'objectif fisheye à l'image
Point selon l'image
Essayez d'introduire le thème sur Pelican
Essayez Cython dans les plus brefs délais
Essayez de brouiller l'image avec opencv2
Le moyen le plus rapide d'essayer EfficientNet
La façon la plus simple d'essayer PyQtGraph
Essayez de modifier une nouvelle image à l'aide du modèle StyleGAN2 entraîné
Essayez de faire face à la somme partielle
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Python amateur tente de résumer la liste ①
Essayez de générer une image avec aliénation
Essayez d'ajouter un module externe au poivre. Pour le moment, en demandes.
Jusqu'à ce que vous essayiez de laisser DNN apprendre la vérité de l'image en utilisant Colab
Lorsque vous passez la souris sur Matplotlib, l'image correspondante s'affiche.
Essayez de résoudre le problème du fizzbuzz avec Keras
Coupez l'image aux coins arrondis avec pythonista
Essayez de décomposer la procession du daimyo en Tucker
Essayez de résoudre le problème de l'héritage de classe Python
Essayez de résoudre le diagramme homme-machine avec Python
Comment essayer l'algorithme des amis d'amis avec pyfof
J'ai essayé de corriger la forme trapézoïdale de l'image
Essayez de simuler le mouvement du système solaire
Essayez de publier sur Qiita pour la première fois
Essayez de normaliser Coupez l'image avec scikit-image (bien qu'elle se fâche en chemin)
Correction des lentilles fish-eye
Téléchargez l'image téléchargée par requêtes directement vers S3
Essayez de résoudre le livre des défis de programmation avec python3
python débutant essaie d'ajouter une authentification de base à l'administrateur de Django
Appliquons la couleur de l'image de marque à la carte des couleurs de matplotlib!
[Python] Essayez de lire la bonne réponse au problème FizzBuzz
J'ai essayé de détecter l'iris à partir de l'image de la caméra
Essayez de configurer SSH (Exscript) du logiciel au routeur
Essayez de configurer NETCONF (ncclient) du logiciel au routeur
Essayez de résoudre les problèmes / problèmes du "programmeur matriciel" (Chapitre 1)
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Simulation de dynamique moléculaire à essayer pour le moment
Enregistrer le graphique dessiné par pyqtgraph dans une image
Essayez d'estimer le nombre de likes sur Twitter
Convertissez l'image au format .zip en PDF avec Python
Essayez de charger l'image dans un thread séparé (OpenCV-Python)
Essayez d'obtenir le contenu de Word avec Golang
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
Essayez de déchiffrer les données de connexion stockées dans Firefox
Redimensionner l'image à la taille spécifiée et noircir les marges
Python Open CV a essayé d'afficher l'image sous forme de texte.
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique