closes 11 - all black pixels with non-zero density were not being handled properly.

This commit is contained in:
Erik Reckase 2011-06-21 11:22:20 -06:00
parent 981de94be5
commit addad052b1

View File

@ -5,7 +5,7 @@ class ColorClip(HunkOCode):
def __init__(self, features): def __init__(self, features):
self.defs = self.defs_tmpl.substitute(features=features) self.defs = self.defs_tmpl.substitute(features=features)
defs_tmpl = Template(""" defs_tmpl = Template('''
__global__ __global__
void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow, void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow,
float linrange, float lingam, float3 bkgd) { float linrange, float lingam, float3 bkgd) {
@ -14,6 +14,11 @@ void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow,
int i = blockDim.x * blockIdx.x + threadIdx.x; int i = blockDim.x * blockIdx.x + threadIdx.x;
float4 pix = pixbuf[i]; float4 pix = pixbuf[i];
if (i == 58905) {
printf("pix = %f %f %f %f\\n",pix.w,pix.x,pix.y,pix.z);
}
if (pix.w <= 0) { if (pix.w <= 0) {
pixbuf[i] = make_float4(bkgd.x, bkgd.y, bkgd.z, 0); pixbuf[i] = make_float4(bkgd.x, bkgd.y, bkgd.z, 0);
return; return;
@ -28,6 +33,12 @@ void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow,
} }
float ls = vibrancy * alpha / pix.w; float ls = vibrancy * alpha / pix.w;
if (i == 58905) {
printf("alpha = %f, ls = %f\\n",alpha, ls);
}
alpha = fminf(1.0f, fmaxf(0.0f, alpha)); alpha = fminf(1.0f, fmaxf(0.0f, alpha));
float maxc = fmaxf(pix.x, fmaxf(pix.y, pix.z)); float maxc = fmaxf(pix.x, fmaxf(pix.y, pix.z));
@ -50,11 +61,13 @@ void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow,
} else { } else {
float adjhlp = -highpow; float adjhlp = -highpow;
if (adjhlp > 1.0f || maxa <= 1.0f) adjhlp = 1.0f; if (adjhlp > 1.0f || maxa <= 1.0f) adjhlp = 1.0f;
if (maxc > 0.0f) {
float adj = ((1.0f - adjhlp) * newls + adjhlp * ls); float adj = ((1.0f - adjhlp) * newls + adjhlp * ls);
pix.x *= adj; pix.x *= adj;
pix.y *= adj; pix.y *= adj;
pix.z *= adj; pix.z *= adj;
} }
}
pix.x += (1.0f - vibrancy) * powf(opix.x, gamma); pix.x += (1.0f - vibrancy) * powf(opix.x, gamma);
pix.y += (1.0f - vibrancy) * powf(opix.y, gamma); pix.y += (1.0f - vibrancy) * powf(opix.y, gamma);
@ -79,7 +92,7 @@ void colorclip(float4 *pixbuf, float gamma, float vibrancy, float highpow,
pixbuf[i] = pix; pixbuf[i] = pix;
} }
""") ''')
class DensityEst(HunkOCode): class DensityEst(HunkOCode):
""" """