wisescootering / infrareddrone

Aerial infrared photography
GNU Affero General Public License v3.0
15 stars 4 forks source link

Facteur focal de la camera pour ODM #31

Open AlainNeveu opened 2 years ago

AlainNeveu commented 2 years ago

Avec l'option --use-fixed-camera-params pour le mapping avec ODM il est intéressant de rentrer une valeur plus précise du facteur focal k que la valeur arrondie déduite des données Exif. Pour notre caméra 0.74473279 au lieu de 0.75.

le fichier irdrone_multispectral.json est placé dans le dossier du projet irdrone/odm_data

{
    "irdrone multispectral 3892 2892 brown 0.74473279": {
        "projection_type": "brown",
        "width": 3892,
        "height": 2892,
        "focal_x": 0.74473279,
        "focal_y": 0.74473279,
        "c_x": 0.0,
        "c_y": 0.0,
        "k1": 0.0,
        "k2": 0.0,
        "p1": 0.0,
        "p2": 0.0,
        "k3": 0.0
    }
}

La formule de calcul est : feqv-35mm = fpix * lx_35mm / (Nx_Ird) k = fIRd_35mm/lx_35mm = fpix_IRd/(Nx_Ird) où fpix est la focale calibrée (en pixels) et Nx_Ird la dimension de l'image alignée rognée (en pixels)

lu par

def lectureCameraIrdrone():
    odm_camera_conf = Path(__file__).parent / ".." / "odm_data" / "irdrone_multispectral.json"
    # print('le fichier de calibration de la caméra du dji est dans : ', odm_camera_conf)
    file = open(odm_camera_conf, 'r')
    dicCameraIRdrone = json.load(file)
    for inpkey in dicCameraIRdrone.keys():
        list = inpkey.split()
        camera_make = list[0]
        camera_type = list[1]
        width_capteur = int(list[2])
        height_capteur = int(list[3])
        projection = list[4]
        focal_factor =float(list[5])
    odm_camera_calibration = Path(__file__).parent / ".." / "calibration" / "DJI_RAW" / "calibration.json"
    file = open(odm_camera_calibration, 'r')
    dicCameraIRdroneCalibration = json.load(file)
    focalPix = round((dicCameraIRdroneCalibration['mtx'][0][0]+ dicCameraIRdroneCalibration['mtx'][1][1])/2 ,1)
    focal2436 = float(focal_factor) * 36.
    focal_factor = focalPix / width_capteur

    return camera_make, camera_type, width_capteur, height_capteur, focal_factor, focalPix 

Il faudrait introduire un fichier de paramètres (.json) contenant toutes les valeurs "constantes" ...