锐化模糊说是用了卷积,可是仔细看了后发现没用卷积,可能是卷积是什么概念给忘记了,可是仔细看他确实没有用卷积。他用的是周围8个像素乘上一个权值然后和自己的颜色混合的方法,这样一看又没有技术含量了。挺失望的。不过倒是也可以出一些效果。
主要是要做出那个滤波器出来,我的矩阵横向构造。滤波器函数如下:
float4 fit_filter(float3x3 inputMatrix,sampler2D tex,float2 xy,float2 texSize)
{
float2 positionMatrix[3][3] =
{
{float2(-1,1),float2(0,1),float2(1,1)},
{float2(-1, 0),float2(0, 0),float2(1, 0)},
{float2(-1,-1),float2(0,-1),float2(1,-1)},
}; //这里就是点周围及其自己的偏移
float4 final_color=float4(0,0,0,0);
for(int i =0;i<3;i++)
{
for(int j = 0;j<3;j++)
{
float2 curxy = float2(xy.x + positionMatrix[i][j].x,xy.y + positionMatrix[i][j].y);
float2 cxy = float2(curxy.x/texSize.x,curxy.y/texSize.y);
final_color +=tex2D(TextureSampler,cxy) * inputMatrix[i][j];
}
}
return final_color;
};
通过这个函数只需要输入一个3x3的矩阵作为中心点计算的方式就可以了。
我的锐化效果如下:
原图:
float2 realxy = float2(IN.texCoordDiffuse.x*256,IN.texCoordDiffuse.y*256);
/* float3x3 matr = float3x3(1/16.0,1/8.0,1/16,
1/8.0,1/4.0,1/8.0,
1/16.0,1/8.0,1/16.0);
*/// 这个是高斯模糊的滤波器
float3x3 matr = float3x3(-1.0,-1.0,-1.0,
-1.0,9.0,-1.0,
-1.0,-1.0,-1.0);
float2 si = float2(256,256);
return fit_filter(matr,TextureSampler,realxy,si);
文章来源:http://songxiaoyu8.blog.163.com/blog/static/2081812820079171599956


浙公网安备 33010602011771号