2
我想让Silverlight的HLSL像素着色器工作从视频图像中减去背景图像。任何人都可以提出比我使用更复杂的算法,因为我的算法没有正确执行它?HLSL着色器减去背景图像
float Tolerance : register(C1);
SamplerState ImageSampler : register(S0);
SamplerState BackgroundSampler : register(S1);
struct VS_INPUT
{
float4 Position : POSITION;
float4 Diffuse : COLOR0;
float2 UV0 : TEXCOORD0;
float2 UV1 : TEXCOORD1;
};
struct VS_OUTPUT
{
float4 Position : POSITION;
float4 Color : COLOR0;
float2 UV : TEXCOORD0;
};
float4 PS(VS_OUTPUT input) : SV_Target
{
float4 color = tex2D(ImageSampler, input.UV);
float4 background = tex2D(BackgroundSampler, input.UV);
if (abs(background.r - color.r) <= Tolerance &&
abs(background.g - color.g) <= Tolerance &&
abs(background.b - color.b) <= Tolerance)
{
color.rgba = 0;
}
return color;
}
要看到这样一个例子,你需要一台电脑用摄像头:
- 转到页http://xmldocs.net/alphavideo/background.html
- 按[开始录音]。
- 将您的身体移出场景并按下[捕捉背景]。
- 然后将您的身体移回到场景中,并使用滑块来调整着色器的Toleance值。
你能解释它究竟是如何“不正确地做”吗?而且我不得不说我的着色器一点都不令人惊讶。 – Denis 2010-08-06 05:33:44
查看HLSL中自适应背景减法的示例:http://vvvv.org/forum/adaptive-background-substraction – appas 2012-02-26 12:08:28