2D Color Spaces, Lens Distortion, and Output Formats
Zivid 카메라는 색상을 3D 데이터의 일부로 출력하거나 2D 이미지로 별도로 출력할 수 있습니다. 카메라 모델마다 2D 이미지 캡처 해상도가 다릅니다. 해상도는 다음과 같습니다.
Camera |
Megapixels (MP) |
Resolution |
|---|---|---|
Zivid 3 |
8 |
2816 x 2816 |
Zivid 2+ |
5 |
2448 x 2048 |
Zivid 2 |
2.3 |
1944 x 1200 |
Color spaces
색 공간은 이미지의 색상 값이 해석되고 표현되는 방식을 정의합니다. 이미지의 색 공간은 사람의 눈에 이미지가 어떻게 보이는지, 그리고 기기가 이미지를 해석하고 표시하는 방식에 영향을 미칩니다. Zivid SDK는 2D 데이터에 대해 두 가지 색 공간을 지원합니다.
- sRGB:
모니터와 프린터 등의 장치에서 일관된 색상 재현을 보장합니다.
대부분의 가전제품과 인터넷의 기본값입니다.
사전 학습된 모델이 sRGB 이미지로 학습되므로 이미지 분류 및 객체 감지와 같은 머신 러닝 작업에 적합합니다.
감마 보정(2.2)을 포함해서 강도 값을 비선형으로 만듭니다.
- Linear RGB:
감마 보정이 없습니다. 강도 값은 광도에 직접 비례합니다.
정밀한 색상 조작 및 물리적 모델링에 적합합니다.
기존의 이미지 처리와 컴퓨터 비전에서 흔히 볼 수 있습니다.
가장 큰 차이점은 강도 값이 인코딩되는 방식입니다. 애플리케이션 요구 사항에 따라 선택하세요.
sRGB: ML 모델의 경우 이미지를 표시하고 교환합니다.
Linear RGB: 전통적인 이미지 처리에 사용됩니다.
Zivid Studio는 색상을 sRGB로 표현하지만, 데이터를 저장할 색상 공간을 결정할 수 있습니다.
참고
Zivid Studio는 색상을 sRGB로 표시합니다. 주어진 픽셀의 히스토그램과 RGB 색상 채널 값은 선형 색상 공간에 표시됩니다.
아래에서 sRGB와 선형 RGB로 저장된 동일한 이미지를 확인할 수 있습니다. 모니터는 sRGB를 인식하고 역감마 보정을 적용하여 선형 RGB 이미지를 더 어둡게 표시합니다. 이렇게 하면 선형 RGB 이미지가 모니터에 표시될 때 실제보다 더 어둡게 보입니다. 수동 평가를 위해 2D 데이터를 sRGB로 보는 것이 좋습니다.
Lens distortion
캡처에서 반환되는 2D 컬러 이미지는 왜곡된 상태입니다. 즉, 카메라의 렌즈 왜곡이 보정되지 않은 상태입니다. 이는 2D 캡처(capture2D())에서 얻은 이미지와 포인트 클라우드(capture2D3D() 또는 capture3D())에서 추출한 컬러 이미지 모두에 적용됩니다. 그 결과, 장면의 직선이 이미지에서 약간 휘어져 보일 수 있으며, 가장자리로 갈수록 이러한 현상이 더 눈에 띄게 나타납니다.
3D 포인트 클라우드는 이러한 영향을 받지 않습니다(포인트 클라우드를 생성할 때 렌즈 왜곡이 이미 보정되기 때문입니다). 2D 이미지와 정렬된(organized) 3D 포인트 클라우드 간의 1:1 대응 관계를 유지하기 위해 2D 이미지는 왜곡된 상태로 유지됩니다. 이 왜곡은 애플리케이션이 2D 이미지의 기하 구조에 의존하는 경우, 예를 들어 직선을 검출하는 경우에만 문제가 됩니다. 이 경우 카메라 내부 파라미터(camera intrinsics)를 사용하여 이미지의 왜곡을 보정할 수 있습니다(Camera Intrinsics 참조).
const auto cameraIntrinsicsCV =
use2D ? reformatCameraIntrinsics(Zivid::Experimental::Calibration::intrinsics(camera, settings2D))
: reformatCameraIntrinsics(Zivid::Experimental::Calibration::intrinsics(camera, settings));
const auto distortionCoefficients = cameraIntrinsicsCV.distortionCoefficients;
const auto cameraMatrix = cameraIntrinsicsCV.cameraMatrix;
const auto size = bgr.size();
const auto optimalCameraMatrix =
cv::getOptimalNewCameraMatrix(cameraMatrix, distortionCoefficients, size, 1, size);
cv::Mat bgrUndistorted;
cv::Mat bgrUndistortedFull;
cv::undistort(bgr, bgrUndistorted, cameraMatrix, distortionCoefficients);
cv::undistort(bgr, bgrUndistortedFull, cameraMatrix, distortionCoefficients, optimalCameraMatrix);
if use_2d:
camera_matrix, distortion_coefficients = _reformat_camera_intrinsics(
zivid.experimental.calibration.intrinsics(camera, settings_2d)
)
else:
camera_matrix, distortion_coefficients = _reformat_camera_intrinsics(
zivid.experimental.calibration.intrinsics(camera, settings)
)
size = (bgr.shape[1], bgr.shape[0])
optimal_camera_matrix = cv2.getOptimalNewCameraMatrix(camera_matrix, distortion_coefficients, size, 1, size)[0]
bgr_undistorted = cv2.undistort(bgr, camera_matrix, distortion_coefficients)
bgr_undistorted_full = cv2.undistort(bgr, camera_matrix, distortion_coefficients, None, optimal_camera_matrix)
2D color output formats
Zivid Studio에서 다음 형식으로 컬러 이미지를 저장할 수 있습니다(File → Save Color Image):
Version History
SDK |
변화 |
|---|---|
2.17.0 |
Zivid 3 XL250에 대한 지원 추가 |