Skip to content

Commit dfe8951

Browse files
authored
fix(thermal_camera): Fixed Gaussian noise for thermal camera.
Signed-off-by: Martin Pecka <peci1@seznam.cz>
1 parent 6e6f3aa commit dfe8951

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

src/ThermalCameraSensor.cc

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -319,12 +319,20 @@ bool ThermalCameraSensor::CreateCamera()
319319
// Add gaussian noise to camera sensor
320320
if (noiseSdf.Type() == sdf::NoiseType::GAUSSIAN)
321321
{
322-
this->dataPtr->noises[noiseType] =
323-
NoiseFactory::NewNoiseModel(noiseSdf, "camera");
322+
// Skip applying noise if mean and stddev are 0 - this avoids
323+
// doing an extra render pass in gz-rendering
324+
// Note ImageGaussianNoiseModel only uses mean and stddev and does not
325+
// use bias parameters.
326+
if (!math::equal(noiseSdf.Mean(), 0.0) ||
327+
!math::equal(noiseSdf.StdDev(), 0.0))
328+
{
329+
this->dataPtr->noises[noiseType] =
330+
ImageNoiseFactory::NewNoiseModel(noiseSdf, "thermal_camera");
324331

325-
std::dynamic_pointer_cast<ImageGaussianNoiseModel>(
326-
this->dataPtr->noises[noiseType])->SetCamera(
327-
this->dataPtr->thermalCamera);
332+
std::dynamic_pointer_cast<ImageGaussianNoiseModel>(
333+
this->dataPtr->noises[noiseType])->SetCamera(
334+
this->dataPtr->camera);
335+
}
328336
}
329337
else if (noiseSdf.Type() != sdf::NoiseType::NONE)
330338
{

test/integration/thermal_camera.cc

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ void ThermalCameraSensorTest::ImagesWithBuiltinSDF(
132132
auto imagePtr = cameraPtr->GetElement("image");
133133
ASSERT_TRUE(cameraPtr->HasElement("clip"));
134134
auto clipPtr = cameraPtr->GetElement("clip");
135+
ASSERT_TRUE(cameraPtr->HasElement("noise"));
136+
auto noisePtr = cameraPtr->GetElement("noise");
137+
138+
EXPECT_EQ(sdf::NoiseType::GAUSSIAN, noisePtr->Type());
139+
EXPECT_FLOAT_EQ(0.0, noisePtr->Mean());
140+
EXPECT_FLOAT_EQ(0.007, noisePtr->StdDev());
135141

136142
int imgWidth = imagePtr->Get<int>("width");
137143
int imgHeight = imagePtr->Get<int>("height");
@@ -392,6 +398,12 @@ void ThermalCameraSensorTest::Images8BitWithBuiltinSDF(
392398
auto cameraPtr = sensorPtr->GetElement("camera");
393399
ASSERT_TRUE(cameraPtr->HasElement("image"));
394400
auto imagePtr = cameraPtr->GetElement("image");
401+
ASSERT_TRUE(cameraPtr->HasElement("noise"));
402+
auto noisePtr = cameraPtr->GetElement("noise");
403+
404+
EXPECT_EQ(sdf::NoiseType::GAUSSIAN, noisePtr->Type());
405+
EXPECT_FLOAT_EQ(0.0, noisePtr->Mean());
406+
EXPECT_FLOAT_EQ(0.007, noisePtr->StdDev());
395407

396408
std::string format = imagePtr->Get<std::string>("format");
397409
EXPECT_EQ("L8", format);

test/sdf/thermal_camera_sensor_8bit_builtin.sdf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
<near>0.1</near>
1717
<far>10.0</far>
1818
</clip>
19+
<noise>
20+
<type>gaussian</type>
21+
<mean>0.0</mean>
22+
<stddev>0.007</stddev>
23+
</noise>
1924
</camera>
2025
</sensor>
2126
</link>

test/sdf/thermal_camera_sensor_builtin.sdf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
<near>0.1</near>
1717
<far>10.0</far>
1818
</clip>
19+
<noise>
20+
<type>gaussian</type>
21+
<mean>0.0</mean>
22+
<stddev>0.007</stddev>
23+
</noise>
1924
</camera>
2025
</sensor>
2126
</link>

0 commit comments

Comments
 (0)