mirror of
https://git.code.sf.net/p/opencamera/code.git
synced 2024-09-19 19:42:29 +02:00
Apply improvement for low light to hdr_n().
This commit is contained in:
parent
3a7446a039
commit
72486aa87a
@ -450,7 +450,8 @@ public class InstrumentedTest {
|
||||
TestUtils.checkHDROffsets(activity, exp_offsets_x, exp_offsets_y);
|
||||
|
||||
//checkHistogramDetails(hdrHistogramDetails, 3, 43, 251);
|
||||
checkHistogramDetails(hdrHistogramDetails, 6, 42, 251);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 6, 42, 251);
|
||||
checkHistogramDetails(hdrHistogramDetails, 6, 49, 252);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1006,7 +1007,8 @@ public class InstrumentedTest {
|
||||
int [] exp_offsets_y = {0, 0};
|
||||
TestUtils.checkHDROffsets(activity, exp_offsets_x, exp_offsets_y);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 33, 78, 250);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 33, 78, 250);
|
||||
checkHistogramDetails(hdrHistogramDetails, 17, 75, 250);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1085,7 +1087,8 @@ public class InstrumentedTest {
|
||||
int [] exp_offsets_y = {0, 0, 0, 0};
|
||||
TestUtils.checkHDROffsets(activity, exp_offsets_x, exp_offsets_y);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 31, 75, 254);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 31, 75, 254);
|
||||
checkHistogramDetails(hdrHistogramDetails, 23, 74, 254);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1115,7 +1118,8 @@ public class InstrumentedTest {
|
||||
|
||||
//checkHistogramDetails(hdrHistogramDetails, 17, 81, 255);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 28, 82, 255);
|
||||
checkHistogramDetails(hdrHistogramDetails, 21, 74, 255);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 21, 74, 255);
|
||||
checkHistogramDetails(hdrHistogramDetails, 17, 74, 255);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1144,7 +1148,8 @@ public class InstrumentedTest {
|
||||
int [] exp_offsets_y = {0, 0, 0, 0, 0, 0};
|
||||
TestUtils.checkHDROffsets(activity, exp_offsets_x, exp_offsets_y);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 32, 76, 254);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 32, 76, 254);
|
||||
checkHistogramDetails(hdrHistogramDetails, 25, 75, 254);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1934,7 +1939,8 @@ public class InstrumentedTest {
|
||||
|
||||
TestUtils.HistogramDetails hdrHistogramDetails = TestUtils.subTestHDR(activity, inputs, "testHDR47_exp5_output.jpg", false, -1, -1);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 1, 73, 255);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 1, 73, 255);
|
||||
checkHistogramDetails(hdrHistogramDetails, 1, 80, 255);
|
||||
});
|
||||
}
|
||||
|
||||
@ -1961,7 +1967,8 @@ public class InstrumentedTest {
|
||||
|
||||
TestUtils.HistogramDetails hdrHistogramDetails = TestUtils.subTestHDR(activity, inputs, "testHDR47_exp7_output.jpg", false, -1, -1);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 1, 73, 255);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 1, 73, 255);
|
||||
checkHistogramDetails(hdrHistogramDetails, 1, 80, 255);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2010,7 +2017,8 @@ public class InstrumentedTest {
|
||||
|
||||
TestUtils.HistogramDetails hdrHistogramDetails = TestUtils.subTestHDR(activity, inputs, "testHDR48_exp5_output.jpg", false, -1, -1);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 0, 59, 241);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 0, 59, 241);
|
||||
checkHistogramDetails(hdrHistogramDetails, 0, 67, 241);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2031,7 +2039,8 @@ public class InstrumentedTest {
|
||||
|
||||
TestUtils.HistogramDetails hdrHistogramDetails = TestUtils.subTestHDR(activity, inputs, "testHDR49_exp2_output.jpg", false, -1, -1);
|
||||
|
||||
checkHistogramDetails(hdrHistogramDetails, 12, 120, 251);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 12, 120, 251);
|
||||
checkHistogramDetails(hdrHistogramDetails, 0, 122, 251);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2103,7 +2112,8 @@ public class InstrumentedTest {
|
||||
TestUtils.HistogramDetails hdrHistogramDetails = TestUtils.subTestHDR(activity, inputs, "testHDR49_exp5_output.jpg", false, -1, -1);
|
||||
|
||||
//checkHistogramDetails(hdrHistogramDetails, 0, 72, 244);
|
||||
checkHistogramDetails(hdrHistogramDetails, 0, 78, 243);
|
||||
//checkHistogramDetails(hdrHistogramDetails, 0, 78, 243);
|
||||
checkHistogramDetails(hdrHistogramDetails, 0, 87, 243);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -520,7 +520,18 @@ uchar4 __attribute__((kernel)) hdr_n(uchar4 in, uint32_t x, uint32_t y) {
|
||||
float avg = (rgb.r+rgb.g+rgb.b) / 3.0f;
|
||||
float diff = fabs( avg - 127.5f );
|
||||
float weight = 1.0f;
|
||||
if( diff > safe_range_c ) {
|
||||
if( avg <= 127.5f ) {
|
||||
// see comment for corresponding code in hdr()
|
||||
const float range_low_c = 32.0f;
|
||||
const float range_high_c = 48.0f;
|
||||
if( avg <= range_low_c ) {
|
||||
weight = 0.0f;
|
||||
}
|
||||
else if( avg <= range_high_c ) {
|
||||
weight = (avg - range_low_c) / (range_high_c - range_low_c);
|
||||
}
|
||||
}
|
||||
else if( diff > safe_range_c ) {
|
||||
// scaling chosen so that 0 and 255 map to a non-zero weight of 0.01
|
||||
weight = 1.0f - 0.99f * (diff - safe_range_c) / (127.5f - safe_range_c);
|
||||
}
|
||||
@ -569,6 +580,9 @@ uchar4 __attribute__((kernel)) hdr_n(uchar4 in, uint32_t x, uint32_t y) {
|
||||
// there will be at least one more adjacent image to look at
|
||||
avg = (rgb.r+rgb.g+rgb.b) / 3.0f;
|
||||
diff = fabs( avg - 127.5f );
|
||||
|
||||
// n.b., we don't have the codepath here for "if( avg <= 127.5f )" - causes problems
|
||||
// for testHDR_exp5 (black blotches)
|
||||
if( diff > safe_range_c ) {
|
||||
// scaling chosen so that 0 and 255 map to a non-zero weight of 0.01
|
||||
weight *= 1.0f - 0.99f * (diff - safe_range_c) / (127.5f - safe_range_c);
|
||||
|
Loading…
Reference in New Issue
Block a user