How do I calculate color intensity if I have a image sample of RGB?
The sample is of a float3 of red, green, blue. I'm trying to do a bilateral blur and have to not change the image if the color intensity is the same so it will preserve edges.
float4 BilateralFiltering(VertexOut input) : SV_Target
{
const float pixel = 0.01f;
float4 centralColor;
float gaussianWeightTotal;
float4 sum;
float4 sampleColor;
float distanceFromCentralColor;
float gaussianWeight;
float distanceNormalizationFactor = 1.0;
centralColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,0));
gaussianWeightTotal = 0.18;
sum = centralColor * 0.18;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,0));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(-pixel,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(0,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.15 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,-pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.12 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,0));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.09 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
sampleColor = gDiffuseMap.Sample(samAnisotropic, input.Tex.xy + float2(pixel,pixel));
distanceFromCentralColor = min(distance(centralColor, sampleColor) * distanceNormalizationFactor, 1.0);
gaussianWeight = 0.05 * (1.0 - distanceFromCentralColor);
gaussianWeightTotal += gaussianWeight;
sum += sampleColor * gaussianWeight;
return sum / gaussianWeightTotal;
}