Unverified Commit a06cf129 authored by Kelvin Rodriguez's avatar Kelvin Rodriguez Committed by GitHub
Browse files

Fixed Hillshade being off by 2 pixels. (#5047)

* testing things out

* cleaning up

* more cleanup

* even more cleanup

* tests

* updated changelog
parent cb6c01bc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ release.
### Fixed

- Fixed bugs in downloadIsisData script [#5024](https://github.com/USGS-Astrogeology/ISIS3/issues/5024) 
- Fixed shadow shifting image by 2 pixels to the upper left corner. [#5035](https://github.com/USGS-Astrogeology/ISIS3/issues/5035)

## [7.1.0] - 2022-07-27

+3 −3
Original line number Diff line number Diff line
@@ -392,15 +392,15 @@ namespace Isis {

          Hillshade hillshade(azimuth, elevation, elevationModelProjection->Resolution());

          Portal portal(3, 3, m_inputDem->pixelType(), -1.5, -1.5);
          portal.SetPosition(sample + 1, line + 1, input.Band());

          Portal portal(3, 3, m_inputDem->pixelType(), -0.5, -0.5);
          portal.SetPosition(sample, line, input.Band());

          if (!portal.CopyOverlapFrom(input)) {
            m_inputDem->read(portal);
          }

          double shadedValue = hillshade.shadedValue(portal);

          if (shadedValue > 0) {
            bool shadowed = m_enableShadowCalculations && couldBeShadowed &&
                isShadowed(rayStartPointInBodyFixed, sample + 1, line + 1,
+0 −1
Original line number Diff line number Diff line
@@ -280,7 +280,6 @@ namespace Isis {
      double numerator = 1.0 + p0 * p + q0 * q;

      double denominator = sqrt(1 + p * p + q * q) * sqrt(1 + p0 * p0 + q0 * q0);

      result = numerator / denominator;
    }

+34 −34
Original line number Diff line number Diff line
@@ -37,10 +37,10 @@ TEST_F(DemCube, FunctionalTestShadowMatch) {
  EXPECT_DOUBLE_EQ(double(shadowStats["MinimumElevation"]), 90.0);
  EXPECT_DOUBLE_EQ(double(shadowStats["MaximumElevation"]), 90.0);

  EXPECT_EQ(int(shadowStats["NumRays"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRays"]), 5551);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5551);
  EXPECT_DOUBLE_EQ(double(shadowStats["AverageRayDemIntersectionsPerRay"]), 1.0);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5388);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5551);
  EXPECT_EQ(int(shadowStats["NumShadowedPixels"]), 0);
  EXPECT_EQ(int(shadowStats["NumSpecialPixels"]), 2800);
  EXPECT_EQ(int(shadowStats["NumPixelsShadowedByRays"]), 0);
@@ -49,10 +49,10 @@ TEST_F(DemCube, FunctionalTestShadowMatch) {

  std::unique_ptr<Histogram> hist (shadowCube.histogram());

  EXPECT_NEAR(hist->Average(), 0.000870468438, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6900839445906222, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5388);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010127599253911463, 1e-11);
  EXPECT_NEAR(hist->Average(), 0.00084506527240706553, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6909573271316205, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5551);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010084740620921499, 1e-11);
}

TEST_F(DemCube, FunctionalTestShadowTime) {
@@ -76,10 +76,10 @@ TEST_F(DemCube, FunctionalTestShadowTime) {
  EXPECT_DOUBLE_EQ(double(shadowStats["MinimumElevation"]), 54.185416336220001);
  EXPECT_DOUBLE_EQ(double(shadowStats["MaximumElevation"]), 55.260883777776002);

  EXPECT_EQ(int(shadowStats["NumRays"]), 9409);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 9926);
  EXPECT_DOUBLE_EQ(double(shadowStats["AverageRayDemIntersectionsPerRay"]), 1.0549473907960001);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 9305);
  EXPECT_EQ(int(shadowStats["NumRays"]), 9604);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 10177);
  EXPECT_DOUBLE_EQ(double(shadowStats["AverageRayDemIntersectionsPerRay"]), 1.0596626405664);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 9500);
  EXPECT_EQ(int(shadowStats["NumShadowedPixels"]), 104);
  EXPECT_EQ(int(shadowStats["NumSpecialPixels"]), 2800);
  EXPECT_EQ(int(shadowStats["NumPixelsShadowedByRays"]), 104);
@@ -88,10 +88,10 @@ TEST_F(DemCube, FunctionalTestShadowTime) {

  std::unique_ptr<Histogram> hist (shadowCube.histogram());

  EXPECT_NEAR(hist->Average(), 0.57758065374995482, 1e-11);
  EXPECT_NEAR(hist->Sum(), 5374.3879831433296, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 9305);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0026649128709642098, 1e-11);
  EXPECT_NEAR(hist->Average(), 0.57755590112585775, 1e-11);
  EXPECT_NEAR(hist->Sum(), 5486.7810606956482, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 9500);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0027122379225963896, 1e-11);
}

TEST_F(DemCube, FunctionalTestShadowNoShadow) {
@@ -116,7 +116,7 @@ TEST_F(DemCube, FunctionalTestShadowNoShadow) {

  EXPECT_EQ(int(shadowStats["NumRays"]), 0);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 0);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5388);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5551);
  EXPECT_EQ(int(shadowStats["NumShadowedPixels"]), 0);
  EXPECT_EQ(int(shadowStats["NumSpecialPixels"]), 2800);
  EXPECT_EQ(int(shadowStats["NumPixelsShadowedByRays"]), 0);
@@ -125,10 +125,10 @@ TEST_F(DemCube, FunctionalTestShadowNoShadow) {

  std::unique_ptr<Histogram> hist (shadowCube.histogram());

  EXPECT_NEAR(hist->Average(), 0.000870468438, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6900839445906222, 1e-11);
  EXPECT_EQ(hist->ValidPixels(), 5388);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010127599253911463, 1e-11);
  EXPECT_NEAR(hist->Average(), 0.00084506527240706553, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6909573271316205, 1e-11);
  EXPECT_EQ(hist->ValidPixels(), 5551);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010084740620921499, 1e-11);
}

TEST_F(DemCube, FunctionalTestShadowAccurate) {
@@ -149,10 +149,10 @@ TEST_F(DemCube, FunctionalTestShadowAccurate) {
  EXPECT_DOUBLE_EQ(double(shadowStats["MinimumElevation"]), 90.0);
  EXPECT_DOUBLE_EQ(double(shadowStats["MaximumElevation"]), 90.0);

  EXPECT_EQ(int(shadowStats["NumRays"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRays"]), 5551);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5551);
  EXPECT_DOUBLE_EQ(double(shadowStats["AverageRayDemIntersectionsPerRay"]), 1.0);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5388);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5551);
  EXPECT_EQ(int(shadowStats["NumShadowedPixels"]), 0);
  EXPECT_EQ(int(shadowStats["NumSpecialPixels"]), 2800);
  EXPECT_EQ(int(shadowStats["NumPixelsShadowedByRays"]), 0);
@@ -161,10 +161,10 @@ TEST_F(DemCube, FunctionalTestShadowAccurate) {

  std::unique_ptr<Histogram> hist (shadowCube.histogram());

  EXPECT_NEAR(hist->Average(), 0.000870468438, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6900839445906222, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5388);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010127599253911463, 1e-11);
  EXPECT_NEAR(hist->Average(), 0.00084506527240706553, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6909573271316205, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5551);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010084740620921499, 1e-11);
}

TEST_F(DemCube, FunctionalTestShadowCustom) {
@@ -185,10 +185,10 @@ TEST_F(DemCube, FunctionalTestShadowCustom) {
  EXPECT_DOUBLE_EQ(double(shadowStats["MinimumElevation"]), 90.0);
  EXPECT_DOUBLE_EQ(double(shadowStats["MaximumElevation"]), 90.0);

  EXPECT_EQ(int(shadowStats["NumRays"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5388);
  EXPECT_EQ(int(shadowStats["NumRays"]), 5551);
  EXPECT_EQ(int(shadowStats["NumRayDemIntersections"]), 5551);
  EXPECT_DOUBLE_EQ(double(shadowStats["AverageRayDemIntersectionsPerRay"]), 1.0);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5388);
  EXPECT_EQ(int(shadowStats["NumLightedPixels"]), 5551);
  EXPECT_EQ(int(shadowStats["NumShadowedPixels"]), 0);
  EXPECT_EQ(int(shadowStats["NumSpecialPixels"]), 2800);
  EXPECT_EQ(int(shadowStats["NumPixelsShadowedByRays"]), 0);
@@ -197,10 +197,10 @@ TEST_F(DemCube, FunctionalTestShadowCustom) {

  std::unique_ptr<Histogram> hist (shadowCube.histogram());

  EXPECT_NEAR(hist->Average(), 0.000870468438, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6900839445906222, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5388);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010127599253911463, 1e-11);
  EXPECT_NEAR(hist->Average(), 0.00084506527240706553, 1e-11);
  EXPECT_NEAR(hist->Sum(), 4.6909573271316205, 1e-11);
  ASSERT_EQ(hist->ValidPixels(), 5551);
  EXPECT_NEAR(hist->StandardDeviation(), 0.0010084740620921499, 1e-11);
}

TEST_F(DemCube, FunctionalTestShadowErrors) {