Visualizzazione post con etichetta PiCam HQ. Mostra tutti i post
Visualizzazione post con etichetta PiCam HQ. Mostra tutti i post

lunedì 21 luglio 2025

Fuoco su Picam HQ

Uno delle maggiori limitazioni della PiCam HQ e' quella di avere il fuoco e l'iride manuali

Per il fuoco ho letto che il valore del laplaciano e' una forma di calcolo della nitidezza dell'immagine. Nell'esempio qui sotto viene effettuato il calcolo realtime del valore del laplaciano e si deve spostare con delicatezza (il ritardo delle immagini e' sensibile) il fuoco fino ad ottenere il valore massimo


 

 

import cv2
import subprocess
import numpy as np

width, height = 640, 480
frame_size = width * height * 3 // 2  # YUV420p format: 1.5 bytes per pixel

cmd = [
    "rpicam-vid",
    "--width", str(width),
    "--height", str(height),
    "--framerate", "30",
    "--codec", "yuv420",
    "-t", "0",
    "--output", "-"
]

proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)

try:
    while True:
        # Leggi il frame
        raw_frame = b''
        while len(raw_frame) < frame_size:
            chunk = proc.stdout.read(frame_size - len(raw_frame))
            if not chunk:
                break
            raw_frame += chunk

        if len(raw_frame) < frame_size:
            break  # Fine stream o errore

        # Converti in matrice YUV420
        yuv = np.frombuffer(raw_frame, dtype=np.uint8).reshape((height * 3 // 2, width))

        # Canale Y per misura di fuoco
        y = yuv[:height, :]

        # Calcola varianza del Laplaciano
        laplacian = cv2.Laplacian(y, cv2.CV_64F)
        variance = laplacian.var()

        # Converti YUV420 a BGR per visualizzazione
        bgr = cv2.cvtColor(yuv, cv2.COLOR_YUV2BGR_I420)

        # Visualizza risultato
        cv2.putText(bgr, f"Fuoco: {variance:.2f}", (10, 30),
                    cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow("rpicam HQ", bgr)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

finally:
    proc.terminate()
    cv2.destroyAllWindows()

 

giovedì 10 luglio 2025

Calibrazione PiCam HQ 12 Mpx

 Ho provato a calibrare la PiCam HQ 12.3 Mpx con sensore Sony IMX477

In modalita' foto la risoluzione e' 4056x3040 mentre in modalita' video parte da 640x480 30 fps


Ho usato sia una serie di foto sia un video usando lo script a link sottostante


 https://github.com/yumashino/Camera-Calibration-with-ChArUco-Board/tree/main

 


 

rispetto alla documentazione non e' piu' necessario usare libcam ma per scattare le foto si usa

 

rpicam-still --encoding png -o img_01.png

rpicam-still --raw -o 01.jpg (salva anche in DNG)

per i video

rpicam-vid  -t 10s --width 2028 --height 1080 -o test.mp4 (salva 10 secondi in h264)

 

calibration_time: "Thu 10 Jul 2025 07:32:59 CEST"
image_width: 4032
image_height: 3024
flags: 0
camera_matrix: !!opencv-matrix
   rows: 3
   cols: 3
   dt: d
   data: [ 3377.8915344697502, 0., 2032.4285452943598, 0.,
       3394.7675726553693, 1455.5140917783713, 0., 0., 1. ]
distortion_coefficients: !!opencv-matrix
   rows: 1
   cols: 5
   dt: d
   data: [ 0.24433970441928685, -1.371442972691743,
       0.0033488938962143514, -0.00060884641206734576,
       2.3798752100481146 ]
avg_reprojection_error: 2.668497308654219



Analisi MNF su spettri di riflettanza di plastica

Devo cerca di lavorare su spettri di riflettanza di plastica e la prima domanda e': quale sono le bande significative? Sono partito dal ...