Optimize median calculation
This commit is contained in:
+4
-5
@@ -84,6 +84,9 @@ public:
|
|||||||
uint64_t sqrSum = 0;
|
uint64_t sqrSum = 0;
|
||||||
uint64_t tMin = UINT64_MAX;
|
uint64_t tMin = UINT64_MAX;
|
||||||
uint64_t tMax = 0;
|
uint64_t tMax = 0;
|
||||||
|
uint32_t histogram[65536];
|
||||||
|
memset(histogram, 0, sizeof(histogram));
|
||||||
|
const int shift = sizeof(T)>2 ? sizeof(T)*8 - 16 : 0;
|
||||||
|
|
||||||
for(T i : m_img)
|
for(T i : m_img)
|
||||||
{
|
{
|
||||||
@@ -91,6 +94,7 @@ public:
|
|||||||
sqrSum += i*i;
|
sqrSum += i*i;
|
||||||
tMin = tMin>i ? i : tMin;
|
tMin = tMin>i ? i : tMin;
|
||||||
tMax = tMax<i ? i : tMax;
|
tMax = tMax<i ? i : tMax;
|
||||||
|
histogram[i>>shift]++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mean)*mean = sum/m_img.size();
|
if(mean)*mean = sum/m_img.size();
|
||||||
@@ -98,14 +102,9 @@ public:
|
|||||||
if(max)*max = tMax;
|
if(max)*max = tMax;
|
||||||
if(stdDev)*stdDev = sqrt((sqrSum - (double)sum*sum/m_img.size()) / (double)(m_img.size()-1));
|
if(stdDev)*stdDev = sqrt((sqrSum - (double)sum*sum/m_img.size()) / (double)(m_img.size()-1));
|
||||||
|
|
||||||
const int shift = sizeof(T)>2 ? sizeof(T)*8 - 16 : 0;
|
|
||||||
|
|
||||||
if(median)
|
if(median)
|
||||||
{
|
{
|
||||||
uint32_t histogram[65536];
|
|
||||||
memset(histogram, 0, sizeof(histogram));
|
|
||||||
for(T i : m_img)
|
|
||||||
histogram[i>>shift]++;
|
|
||||||
size_t medianSum = 0;
|
size_t medianSum = 0;
|
||||||
for(int i=0;i<65536;i++)
|
for(int i=0;i<65536;i++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user