稻草人的麦田

图形技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[导入]锐化模糊

Posted on 2007-10-17 13:59  稻草人的麦田  阅读(200)  评论(0)    收藏  举报

锐化模糊说是用了卷积,可是仔细看了后发现没用卷积,可能是卷积是什么概念给忘记了,可是仔细看他确实没有用卷积。他用的是周围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