Optimizing Color Image
Introduction
이 튜토리얼은 Zivid 카메라에서 캡처한 컬러 이미지 품질을 최적화하는 데 도움이 되는 것을 목표로 합니다. 먼저 좋은 색상 정보를 얻기 위한 필수 도구인 획득(Acquisition) 및 색상 설정 조정에 대해 설명합니다. 그런 다음 가장 일반적인 문제(Blooming/over-saturation 및 HDR의 색상 불일치)를 해결하고 이를 극복하는 방법에 대한 권장 사항을 제공합니다.
팁
Zivid 2+ cameras have higher resolution and utilize a better demosaicing algorithm than Zivid 2 cameras; thus, Zivid 2+ outputs higher quality 2D images.
Adjusting Acquisition Settings
Zivid 카메라에서 얻는 컬러 이미지의 품질은 획득 설정에 따라 다릅니다. 이 튜토리얼에서는 원하는 다이내믹 레인지를 얻기 위해 노출 설정(노출 시간, 조리개, 밝기 및 게인)의 조합을 찾는 방법을 다루지 않습니다. 노출 설정에 대한 내용을 확인하고 싶으시면 Getting the Right Exposure for Good Point Clouds 을 확인해주십시오. 이 튜토리얼은 컬러 이미지 품질에 영향을 미치는 특정 획득 설정을 조정하는 데 중점을 둡니다.
노출 시간과 프로젝터 밝기는 컬러 이미지 품질에 영향을 미치지 않습니다. 반면에 흐릿한 컬러 이미지를 피하려면 조리개 값이 높을수록 좋습니다. 아래 그림을 참조하십시오. 아래의 그림에서 볼 수 있듯 5.66 이상의 f-number(더 작은 조리개)에서 이미지가 선명합니다. 자세한 설명 및 안내는 다음을 참조하십시오. Depth of Focus 및 Depth of Focus Calculator.
Single acquisition capture with aperture 10.37 |
Single acquisition capture with aperture 3.67 |
참고
위의 이미지는 최적의 이미징 거리 밖에서 캡처되어 큰 조리개 값에 대한 아웃포커스 효과를 강조합니다. 이미지는 최적의 범위에서 캡처될 때 덜 흐릿합니다.
높은 Gain 값은 이미지 노이즈(세분성) 수준을 증가시켜 2D 이미지 품질을 저하시키므로 낮은 Gain 값(예: 1-2)을 사용하는 것이 좋습니다. 아래 그림을 참조하십시오.
Single acquisition capture with gain 1 |
Single acquisition capture with gain 16 |
우리는 종종 포인트 클라우드 품질에 먼저 초점을 맞춰 필요한 다이나믹 레인지와 캡처 시간에 도달하도록 수집 설정을 조정합니다. 이러한 접근 방식에서 컬러 이미지 품질은 주어진 캡처 시간으로 3D 품질에 최적화된 설정의 함수입니다. 이 접근 방식의 단점은 항상 좋은 색상 이미지 품질을 제공하지 않는다는 것입니다. 그러나 사실은 고품질 컬러 이미지(낮은 블러, 낮은 노이즈 및 균형 잡힌 조명)가 고품질 포인트 클라우드를 생성한다는 것입니다. 이를 염두에 두고 위의 미세 조정 지침을 따라 컬러 이미지 품질을 개선하면 3D 품질도 향상된다는 것이 분명합니다. 이를 달성하기 위한 핵심은 노출 시간과 프로젝터 밝기 값을 증가시켜 낮은 Gain과 조리개(높은 f number)를 보정하는 것입니다.
Adjusting Color Settings
조리개 및 Gain 외에도 색상 이미지 품질은 Gamma, Color Balance 및 Color Mode 설정에 따라 다릅니다. 이 섹션에서는 이러한 설정을 최적화하여 컬러 이미지에서 원하는 색상 품질을 얻는 방법에 대한 통찰력을 제공하는 것을 목표로 합니다. 색상 설정에 대한 자세한 내용은 Processing Settings 에서 확인할 수 있습니다.
Gamma
카메라는 사람의 눈과 다르게 휘도를 인코딩합니다. 인간의 눈은 스펙트럼의 어두운 쪽을 강조하지만 카메라는 선형 스케일로 휘도를 인코딩합니다. 이 효과를 보상하기 위해 감마 보정을 적용하여 이미지를 어둡게 또는 밝게 하여 사람의 인식에 더 가깝게 만듭니다.
참고
Zivid 카메라의 경우 감마 보정 값 범위는 0.25에서 1.5 사이입니다.
감마 값이 낮을수록 장면이 더 밝게 나타납니다. 감마 값을 높이면 장면이 더 어둡게 나타납니다.
Image captured with Gamma set to 0.6 |
Image captured with Gamma set to 1.3 |
머신 비전 알고리즘의 이미지 품질을 최적화하기 위해 감마 보정이 필요한지 여부는 의문입니다. 그럼에도 불구하고 사람이 초점 및 입자/노이즈 수준과 같은 컬러 이미지 품질의 특정 측면을 평가하는 데 도움이 됩니다.
구현 예를 보려면 다음을 확인하십시오. Gamma Correction. 이 튜토리얼은 구성 가능한 감마 보정으로 2D 이미지를 캡처하는 방법을 보여줍니다.
Color Balance
주변광의 color temperature 는 컬러 이미지의 외관에 영향을 미칩니다. 적색, 녹색, 청색 채널에 대한 디지털 게인을 조정하여 컬러 이미지를 자연스럽게 보이게 할 수 있습니다. 아래에서 색상 균형을 맞추기 전과 후의 이미지를 볼 수 있습니다. 설정에 대한 색상 균형을 자동으로 찾으려면 Color Balance tutorial. 을 확인하십시오.
참고
Zivid 카메라의 경우 색상 균형가 1.0에서 8.0 사이입니다.
색상 균형을 수행하면 강하고 다양한 주변 조명 조건에서 유용할 수 있습니다. 프로젝터 없이 또는 낮은 프로젝터 밝기 값으로 캡처를 사용할 때 색상 균형이 필요합니다. 즉, 주변광이 카메라에 보이는 빛의 상당 부분을 차지하는 경우입니다. 프로젝터가 있거나 없는 두 가지 기본 색상 균형 설정이 있습니다. 프로젝터 밝기를 0 또는 끄기로 설정하면 색상 균형이 산업 환경에서 일반적으로 4500K로 보정됩니다. 프로젝터 밝기 값이 0보다 크면 색상 균형이 프로젝터 조명의 색온도에 맞게 보정됩니다.
구현 예는 다음 튜토리얼을 참조하십시오. Adjusting Color Balance . 이 튜토리얼은 루프에서 흰색 표면(종이, 벽 또는 이와 유사한 것)의 이미지를 촬영하여 2D 이미지의 색상 균형을 맞추는 방법을 보여줍니다.
Color Mode
색상 모드 설정은 색상 이미지가 계산되는 방식을 제어합니다. 색상 모드 설정은 다음과 같습니다.
ToneMapping
UseFirstAcquisition
Automatic
ToneMapping
모든 획득을 사용하여 하나의 병합되고 정규화된 컬러 이미지를 생성합니다. Multi-acquisition HDR 캡처의 경우 캡처된 이미지의 동적 범위는 일반적으로 8비트 컬러 이미지 범위보다 높습니다. 톤 매핑은 배율 인수를 적용하여 HDR 색상 데이터를 8비트 색상 출력 범위에 매핑합니다. 단일 획득 캡처에 톤 매핑을 사용하여 캡처한 컬러 이미지를 전체 8비트 출력으로 정규화할 수도 있습니다. ToneMapping
을 사용할 때 장면에서 개체를 이동, 추가 또는 제거하면 반복되는 캡처에서 색상 값이 일치하지 않을 수 있습니다. 색상을 최대한 제어하려면 UseFirstAcquisition
모드를 사용하십시오.
UseFirstAcquisition
은 제공된 첫 번째 획득에서 획득한 색상 데이터를 사용합니다. 캡처가 둘 이상의 획득으로 구성된 경우 나머지 획득은 컬러 이미지에 사용되지 않습니다. 톤 매핑이 수행되지 않습니다. 이 옵션은 컬러 이미지에 대한 대부분의 제어를 제공하며 색상 값은 동일한 설정으로 반복 캡처하는 동안 일관됩니다.
Automatic
이 기본 옵션입니다.Automatic
은 단일 획득 캡처 및 모든 획득에 동일한(중복된) 획득 설정이 있는 다중 획득 캡처에 대한UseFirstAcquisition
과 동일합니다.Automatic
은 획득 설정이 다른 다중 획득 HDR 캡처에 대한ToneMapping
과 동일합니다.
참고
SDK 2.7부터 Color Mode에 UseFirstAcquisition
을 설정하여 HDR 캡처에 대한 톤 매핑을 비활성화할 수 있습니다.
단일 획득 캡처의 경우 ToneMapping을 사용하여 어두운 이미지를 밝게 할 수 있습니다.
Single acquisition capture with Color Mode set to |
Single acquisition capture with Color Mode set to |
다중 획득의 경우 HDR 톤 매핑을 사용하여 높은 동적 범위 색상을 보다 제한된 동적 범위 출력에 매핑할 수 있습니다.
Single acquisition capture of the first of three HDR acquisitions with Color Mode set to |
Single acquisition capture of the second of three HDR acquisitions with Color Mode set to |
Single acquisition capture of the third of three HDR acquisitions with Color Mode set to |
HDR with three acquisitions with Color Mode set to |
HDR capture with UseFirstAcquisition
다중 획득 HDR에 톤 매핑을 사용하지 않고 대신 획득 중 하나의 컬러 이미지를 사용하는 것이 가능합니다. 색상을 사용하려는 획득을 식별합니다. 그런 다음 획득이 HDR 캡처에 대한 획득 설정 시퀀스의 첫 번째인지 확인하고 색상 모드를 UseFirstAcquisition
으로 설정합니다. 위의 예에서 결과 컬러 이미지는 세 가지 HDR 획득 중 첫 번째를 사용하여 단일 캡처의 컬러 이미지처럼 보입니다.
힌트
… → Move to top 을 클릭하여 Zivid Studio에서 1번째 획득으로 바꿔주십시오.
HDR 캡처가 컬러 이미지를 가져오는 획득을 변경하려면 획득 설정을 재정렬하기만 하면 됩니다. UseFirstAcquisition
색상 모드는 반복된 캡처에서 색상을 일관되게 유지하는 데 권장되며, 예를 들어 2D 이미지의 색상 또는 질감을 기반으로 객체를 분류하는 데 유용합니다. 구현 예에 대한 자세한 설명은 How to deal with Color Inconsistency from HDR 을 참조하십시오.
감마, 색상 균형 및 색상 모드를 포함하여 Zivid SDK로 processing settings 을 설정하는 방법을 확인하십시오.
std::cout << "Configuring settings for capture:" << std::endl;
Zivid::Settings settings{
Zivid::Settings::Engine::phase,
Zivid::Settings::Sampling::Color::rgb,
Zivid::Settings::Sampling::Pixel::blueSubsample2x2,
Zivid::Settings::RegionOfInterest::Box::Enabled::yes,
Zivid::Settings::RegionOfInterest::Box::PointO{ 1000, 1000, 1000 },
Zivid::Settings::RegionOfInterest::Box::PointA{ 1000, -1000, 1000 },
Zivid::Settings::RegionOfInterest::Box::PointB{ -1000, 1000, 1000 },
Zivid::Settings::RegionOfInterest::Box::Extents{ -1000, 1000 },
Zivid::Settings::RegionOfInterest::Depth::Enabled::yes,
Zivid::Settings::RegionOfInterest::Depth::Range{ 200, 2000 },
Zivid::Settings::Processing::Filters::Smoothing::Gaussian::Enabled::yes,
Zivid::Settings::Processing::Filters::Smoothing::Gaussian::Sigma{ 1.5 },
Zivid::Settings::Processing::Filters::Noise::Removal::Enabled::yes,
Zivid::Settings::Processing::Filters::Noise::Removal::Threshold{ 7.0 },
Zivid::Settings::Processing::Filters::Noise::Suppression::Enabled::yes,
Zivid::Settings::Processing::Filters::Noise::Repair::Enabled::yes,
Zivid::Settings::Processing::Filters::Outlier::Removal::Enabled::yes,
Zivid::Settings::Processing::Filters::Outlier::Removal::Threshold{ 5.0 },
Zivid::Settings::Processing::Filters::Reflection::Removal::Enabled::yes,
Zivid::Settings::Processing::Filters::Reflection::Removal::Mode::global,
Zivid::Settings::Processing::Filters::Cluster::Removal::Enabled::yes,
Zivid::Settings::Processing::Filters::Cluster::Removal::MaxNeighborDistance{ 10 },
Zivid::Settings::Processing::Filters::Cluster::Removal::MinArea{ 100 },
Zivid::Settings::Processing::Filters::Experimental::ContrastDistortion::Correction::Enabled::yes,
Zivid::Settings::Processing::Filters::Experimental::ContrastDistortion::Correction::Strength{ 0.4 },
Zivid::Settings::Processing::Filters::Experimental::ContrastDistortion::Removal::Enabled::no,
Zivid::Settings::Processing::Filters::Experimental::ContrastDistortion::Removal::Threshold{ 0.5 },
Zivid::Settings::Processing::Filters::Hole::Repair::Enabled::yes,
Zivid::Settings::Processing::Filters::Hole::Repair::HoleSize{ 0.2 },
Zivid::Settings::Processing::Filters::Hole::Repair::Strictness{ 1 },
Zivid::Settings::Processing::Resampling::Mode::upsample2x2,
Zivid::Settings::Processing::Color::Balance::Red{ 1.0 },
Zivid::Settings::Processing::Color::Balance::Green{ 1.0 },
Zivid::Settings::Processing::Color::Balance::Blue{ 1.0 },
Zivid::Settings::Processing::Color::Gamma{ 1.0 },
Zivid::Settings::Processing::Color::Experimental::Mode::automatic
};
std::cout << settings << std::endl;
Console.WriteLine("Configuring settings for capture:");
var settings = new Zivid.NET.Settings()
{
Engine = Zivid.NET.Settings.EngineOption.Phase,
Sampling = { Color = Zivid.NET.Settings.SamplingGroup.ColorOption.Rgb, Pixel = Zivid.NET.Settings.SamplingGroup.PixelOption.BlueSubsample2x2 },
RegionOfInterest = { Box = {
Enabled = true,
PointO = new Zivid.NET.PointXYZ{ x = 1000, y = 1000, z = 1000 },
PointA = new Zivid.NET.PointXYZ{ x = 1000, y = -1000, z = 1000 },
PointB = new Zivid.NET.PointXYZ{ x = -1000, y = 1000, z = 1000 },
Extents = new Zivid.NET.Range<double>(-1000, 1000),
},
Depth =
{
Enabled = true,
Range = new Zivid.NET.Range<double>(200, 2000),
}
},
Processing = { Filters = { Smoothing = { Gaussian = { Enabled = true, Sigma = 1.5 } },
Noise = { Removal = { Enabled = true, Threshold = 7.0 },
Suppression = { Enabled = true },
Repair ={ Enabled = true } },
Outlier = { Removal = { Enabled = true, Threshold = 5.0 } },
Reflection = { Removal = { Enabled = true, Mode = ReflectionFilterModeOption.Global} },
Cluster = { Removal = { Enabled = true, MaxNeighborDistance = 10, MinArea = 100} },
Hole = { Repair = { Enabled = true, HoleSize = 0.2, Strictness = 1 } },
Experimental = { ContrastDistortion = { Correction = { Enabled = true,
Strength = 0.4 },
Removal = { Enabled = true,
Threshold = 0.5 } } } },
Resampling = { Mode = Zivid.NET.Settings.ProcessingGroup.ResamplingGroup.ModeOption.Upsample2x2},
Color = { Balance = { Red = 1.0, Green = 1.0, Blue = 1.0 },
Gamma = 1.0,
Experimental = { Mode = ColorModeOption.Automatic } } }
};
Console.WriteLine(settings);
print("Configuring settings for capture:")
settings = zivid.Settings()
settings.engine = zivid.Settings.Engine.phase
settings.sampling.color = zivid.Settings.Sampling.Color.rgb
settings.sampling.pixel = zivid.Settings.Sampling.Pixel.blueSubsample2x2
settings.region_of_interest.box.enabled = True
settings.region_of_interest.box.point_o = [1000, 1000, 1000]
settings.region_of_interest.box.point_a = [1000, -1000, 1000]
settings.region_of_interest.box.point_b = [-1000, 1000, 1000]
settings.region_of_interest.box.extents = [-1000, 1000]
settings.region_of_interest.depth.enabled = True
settings.region_of_interest.depth.range = [200, 2000]
filters = settings.processing.filters
filters.smoothing.gaussian.enabled = True
filters.smoothing.gaussian.sigma = 1.5
filters.noise.removal.enabled = True
filters.noise.removal.threshold = 7.0
filters.noise.suppression.enabled = True
filters.noise.repair.enabled = True
filters.outlier.removal.enabled = True
filters.outlier.removal.threshold = 5.0
filters.reflection.removal.enabled = True
filters.reflection.removal.mode = zivid.Settings.Processing.Filters.Reflection.Removal.Mode.global_
filters.cluster.removal.enabled = True
filters.cluster.removal.max_neighbor_distance = 10
filters.cluster.removal.min_area = 100
filters.experimental.contrast_distortion.correction.enabled = True
filters.experimental.contrast_distortion.correction.strength = 0.4
filters.experimental.contrast_distortion.removal.enabled = False
filters.experimental.contrast_distortion.removal.threshold = 0.5
filters.hole.repair.enabled = True
filters.hole.repair.hole_size = 0.2
filters.hole.repair.strictness = 1
resampling = settings.processing.resampling
resampling.mode = zivid.Settings.Processing.Resampling.Mode.upsample2x2
color = settings.processing.color
color.balance.red = 1.0
color.balance.blue = 1.0
color.balance.green = 1.0
color.gamma = 1.0
settings.processing.color.experimental.mode = zivid.Settings.Processing.Color.Experimental.Mode.automatic
print(settings)
Dealing with Blooming
Blooming - Bright Spots in the Point Cloud 에서 논의한 바와 같이, 블루밍은 한 지점이나 영역의 극도로 강한 빛이 이미징 센서에 닿아 과포화(Over-saturation) 상태가 될 때 발생하는 효과입니다. 이 기사에서는 장면에서 블루밍을 피하는 방법에 대해 설명합니다.
Blooming을 처리하는 방법에는 여러 가지가 있습니다. 이 튜토리얼에서 다루는 방법은 배경 변경, 카메라 위치 및 방향 변경, HDR 활용, 색상 모드 활용 및 추가 2D 캡처입니다.
Change the background
배경이 blooming의 원인인 경우 배경 재료를 더 확산되고 흡수하는 재료로 변경합니다(Optical Properties of Materials).
Scene with white background with blooming |
Same scene with black background and effect from blooming removed from the point cloud |
Angle the camera
카메라 위치와 방향을 변경하는 것은 블루밍을 처리하는 간단하고 효율적인 방법입니다. 프로젝터 및 기타 광원이 카메라에 직접 반사되지 않도록 카메라를 오프셋하고 기울이는 것이 좋습니다. 이것은 아래 이미지의 오른쪽에 표시됩니다.
단순히 카메라를 기울이면 위 이미지의 오른쪽과 같이 과포화 영역에서 손실된 데이터를 복구할 수 있습니다. 아래 왼쪽 이미지는 카메라를 표면에 수직으로 장착했을 때 찍은 포인트 클라우드이고, 오른쪽 이미지는 약간 기울어진 상태에서 찍은 장면입니다.
간단한 경험 법칙은 아래 이미지와 같이 관심 영역이 카메라 앞에 오도록 카메라를 장착하는 것입니다.
HDR capture
Blooming 하이라이트를 덮기 위해 하나 이상의 3D 획득을 추가하여 다중 획득 3D HDR을 사용합니다. 캡처 시간이 추가되는 비용이 발생한다는 점을 염두에 두십시오.
Scene with blooming (single acquisition) |
Same scene with effect from blooming removed from the point cloud (multi-acquisition HDR) |
위의 단계를 따르면 Blooming 효과로 인해 포인트 클라우드에서 누락된 포인트를 복구할 가능성이 가장 큽니다. 그러나 컬러 이미지에 과포화(over-saturated) 영역이 남아 있을 가능성이 여전히 있습니다.
3D 포인트 클라우드 품질에만 관심이 있다면 컬러 이미지의 과도한 채도는 문제가 되지 않을 수 있습니다. 그러나 컬러 이미지에 머신 비전 알고리즘(예: 템플릿 일치)을 사용하는 경우 과채도가 문제가 될 수 있습니다.
참고
기본 색상 모드는 Automatic으로, 획득 설정이 다른 다중 획득 HDR 캡처에 대한 ToneMapping과 동일합니다. HDR 캡처에 사용되는 색상 병합(톤 매핑) 알고리즘은 색상 이미지의 과도한 채도의 원인입니다. 이 알고리즘은 다양한 동적 범위의 컬러 이미지를 제한된 동적 범위의 하나의 컬러 이미지로 매핑하는 어려운 문제를 해결합니다. 그러나 톤 매핑 알고리즘에는 과포화 문제라는 한계가 있습니다.
HDR capture with UseFirstAcquisition Color Mode
참고
이 솔루션은 SDK 2.7 이상에서만 사용할 수 있습니다. SDK 2.6 이하에 대한 솔루션을 보려면 왼쪽 상단에서 KB를 이전 버전으로 변경하십시오.
과포화를 극복하기 위한 시도는 장면에서 가장 밝은 물체에 최적화된 획득을 식별하거나 찾는 것입니다. 그런 다음 해당 수집을 수집 설정에서 첫 번째로 설정합니다. 마지막으로 색상 모드를 UseFirstAcquisition으로 설정하여 HDR을 캡처합니다.
힌트
… → Move to top 을 클릭하여 Zivid Studio에서 1번째 획득으로 바꿔주십시오.
어떤 경우에는 과포화를 제거하거나 최소한 크게 줄일 수 있습니다.
이미징 대상의 재료가 정반사면 이 방법은 과포화를 제거하지 못할 수 있습니다. 이 경우 프로젝터를 끈 상태에서 추가 캡처를 고려해 볼 가치가 있습니다. 다음 잠재적 솔루션을 참조하십시오(프로젝터 제외).
Additional capture
컬러 이미지의 과포화를 극복하기 위한 대안 솔루션은 별도의 캡처를 추가하고 특히 이 이미지 아티팩트를 피하기 위해 설정을 최적화하는 것입니다. 이 접근 방식은 기본 캡처의 포인트 클라우드 데이터와 추가 캡처의 컬러 이미지를 사용한다고 가정합니다. 추가 캡처는 프로젝터가 있거나 없는 2D 또는 3D 캡처일 수 있습니다. 3D 캡처를 사용하는 경우 톤 매핑이 없어야 합니다(색상 모드 설정이 UseFirstAcquisition으로 설정됨).
참고
기본 캡처 전후에 추가 캡처를 수행합니다. 예를 들어 2D 이미지와 3D 포인트 클라우드를 활용하는 알고리즘에 서로 다른 스레드를 사용할 경우 알고리즘 실행 시간을 기준으로 결정합니다.
팁
별도의 2D 이미지를 캡처하면 컬러 이미지 품질에 대한 수집 설정을 최적화할 수 있습니다(대부분의 경우 우수한 포인트 클라우드 품질에 대한 설정을 최적화합니다).
With the projector
어떤 경우에는 사용 중인 프로젝터로 과포화를 제거할 수 있습니다.
Without the projector
이미징 대상이 프로젝터으 빛을 정반사 한다면 과포화가 제거될 가능성이 적습니다. 따라서 프로젝터를 끄는 것을 고려해 볼 가치가 있습니다.
프로젝터 없이 촬영하는 경우 카메라에 충분한 빛이 들어오는지 확인해야 합니다. 옵션은 더 긴 노출 시간, 더 높은 이득 값, 더 낮은 조리개 값으로 설정을 사용하거나 장면에 추가 광원을 추가하는 것입니다. 추가 조명을 사용하고 컬러 이미지 획득 중에만 켭니다. 주요 획득 중에 켜진 경우 추가 광원으로 인해 포인트 클라우드 품질이 저하될 수 있습니다.
Without the projector with color balance
색상 균형은 프로젝터를 사용하지 않을 때도 가장 필요합니다. 구현 예는 다음 튜토리얼을 참조하십시오. Adjusting Color Balance . 이 튜토리얼은 루프에서 흰색 표면(종이, 벽 또는 이와 유사한 것)의 이미지를 촬영하여 2D 이미지의 색상 균형을 맞추는 방법을 보여줍니다.
Dealing with Color Inconsistency from HDR
Color Mode 이 ToneMapping 또는 Automatic(기본값)으로 설정된 경우 다중 획득 HDR 캡처의 컬러 영상은 톤 매핑의 결과입니다. 톤 매핑은 특정 캡처를 위해 색상을 최적화하는 어려운 문제를 해결하지만 단점이 있습니다. 씬(scene)의 기능이기 때문에 톤 매핑 기법은 씬(scene)의 변경과 함께 색 불일치를 유도합니다. 다음 예제는 이 현상을 설명합니다.
상대적으로 어두운 장면(검은 바탕 위의 배)이 있다고 가정해 보겠습니다. 충분히 넓은 다이내믹 레인지를 포괄하는 획득 설정을 찾고 다중 획득 HDR 캡처를 수행합니다(왼쪽 그림). 그런 다음 장면에 밝은 개체(바나나)를 추가하고 동일한 설정으로 다시 캡처합니다(오른쪽 그림).
HDR capture of a dark scene (Color Mode: Automatic or ToneMapping) |
HDR capture with the same settings of the same scene but with an additional bright object added |
출력 컬러 이미지(오른쪽 그림)와 특히 처음에 장면의 어두운 개체(배 또는 검은색 표면)를 살펴보겠습니다. 장면에 밝은 개체(바나나)를 추가하기 전과 후에 이러한 개체의 RGB 값이 다릅니다.
RGB 값의 변경은 색상 정보를 기반으로 개체를 분류하는 알고리즘을 사용하는 응용 프로그램과 같은 일부 응용 프로그램에서 문제가 될 수 있습니다. 그 이유는 이러한 알고리즘이 반복된 캡처에 대해 RGB 값이 동일하게(일관적으로) 유지될 것으로 예상하기 때문입니다.
HDR capture with UseFirstAcquisition Color Mode
참고
이 솔루션은 SDK 2.7 이상에서만 사용할 수 있습니다. SDK 2.6 이하에 대한 솔루션을 보려면 왼쪽 상단에서 KB를 이전 버전으로 변경하십시오.
HDR의 색상 불일치를 극복하려면 HDR 캡처에서 얻은 획득 중 어떤 것이 가장 좋은 색상을 제공하는지 식별하십시오. 포화(Saturation)를 피하기 위해 장면에서 가장 밝은 물체에 최적화된 획득을 권장합니다. 그런 다음 해당 수집(Acquisition)을 수집 설정에서 첫 번째로 설정합니다. 마지막으로 색상 모드를 UseFirstAcquisition으로 설정하여 HDR을 캡처합니다.
예제를 통해 프로세스를 안내해 드리겠습니다. 두 개의 획득이 있는 HDR이 있다고 가정해 보겠습니다. 첫 번째 획득은 어두운 물체(배)에 최적화되어 있습니다. 두 번째는 밝은 물체(바나나)에 최적화되어 있습니다. 색상 모드에 대해 UseFirstAcquisition을 사용하여 HDR을 캡처하면 다음과 같은 결과가 나타납니다.
HDR capture of a dark scene (Color Mode: UseFirstAcquisition) |
HDR capture with the same settings of the same scene but with an additional bright object added |
어두운 물체(배)의 색상은 두 이미지에서 동일합니다. 색상 일관성이 유지됩니다.
그러나 첫 번째 획득이 어두운 물체에 최적화되어 있기 때문에 장면에서 가장 밝은 물체(바나나)가 포화됩니다. 채도는 예를 들어 색상을 기반으로 개체를 분류하려는 경우 문제를 일으킬 수 있습니다. 이 문제를 극복하기 위해 획득 설정을 재정렬할 수 있습니다. 첫 번째 획득을 위해 장면에서 가장 밝은 물체(바나나)에 최적화된 것을 선택합니다. 두 번째는 어두운 개체(배)에 최적화되어 있습니다. 이제 함께 혹은 별도로 캡처한 밝고 어두운 개체로 색상 일관성이 유지되는 것을 볼 수 있습니다. 또한 가장 밝은 물체(바나나)는 포화되지 않습니다.
HDR capture of a dark scene (Color Mode: UseFirstAcquisition) |
HDR capture with the same settings of the same scene but with an additional bright object added |
HDR capture with the same settings of the same scene but only with the bright object |
참고
최상의 색상을 제공하는 획득은 탁월한 획득입니다. 장면에서 가장 밝은 물체에 최적화되어 있으므로 해당 물체에 대해 매우 우수한 SNR을 제공합니다. HDR의 색상 불일치를 처리하기 위해 추가 획득이 필요하지 않습니다. 해당 획득은 이미 HDR 획득 설정의 일부일 수 있습니다.
컬러 이미지가 너무 어두우면 Gamma 설정으로 수정할 수 있습니다.
조심
Capture Assistant가 반환하는 첫 번째 획득은 컬러 이미지에 가장 적합하지 않을 수 있습니다. 따라서 컬러 모드에 Capture Assistant 및 UseFirstAcquisition을 사용하는 경우 획득을 다시 정렬해야 할 수도 있습니다.
힌트
… → Move to top 을 클릭하여 Zivid Studio에서 1번째 획득으로 바꿔주십시오.
Additional Capture
참고
This solution should be used only if you have to use Automatic or ToneMapping Color Mode for your HDR capture.
HDR의 색상 불일치를 극복하기 위한 대체 솔루션은 기본 캡처 외에 별도의 캡처를 수행하는 것입니다. 이 접근 방식은 포인트 클라우드 데이터를 가져오기 위해 기본 캡처를 사용하고 컬러 이미지를 가져오기 위해 추가 캡처를 사용한다고 가정합니다. 추가 캡처는 프로젝터가 있거나 없는 2D 또는 3D 캡처일 수 있습니다. 3D 캡처를 사용하는 경우 톤 매핑이 없어야 합니다(색상 모드 설정이 UseFirstAcquisition으로 설정됨).
Single acquisition capture of a dark scene with Color Mode set to UseFirstAcquisition or Automatic |
Single acquisition capture with the same settings of the same scene but with an additional bright object added (Color Mode set to UseFirstAcquisition or Automatic) |
Further reading
How to Get Good 3D Data on a Pixel of Interest 에 대해서 알아보십시오.