关闭

RenderMonkey在数字图像处理中的应用(续)

标签: 图像处理floatdirect3dcolors算法编程
2597人阅读 评论(0) 收藏 举报
分类:
 
空间域图像处理
 
在空间域图像处理中, 通常都是基于模板的算法. 即通过当前像素周围像素的颜色值来决定当前像素的颜色值. 下面举例说明:
 
1.       模糊
一目了然, 就是把当前像素的颜色用上下左右4个像素的颜色值的和的平均值来代替, 这样就模糊了….
那么, 怎么用RenderMonkey来实现呢?
从前边我们知道, 可以用texCoord.x, texCoord.y来表示像素的坐标, 然后用tex2D()函数来查找图像中指定坐标的颜色值. 不过要注意, 坐标的单位不是像素, 而是纹理坐票, 每个像素对应这里的图像宽度或高度的倒数. 所以, 我们先引入这两个值:
加入完毕后, 左边显示两个float值
 
好了, 这样一来, Color=(S1+S2+S3+S4)/4中的S1的颜色值就可以这样取到:
float4 colorS1 = tex2D( Texture0, texCoord + float2(0,-fInverseViewportWidth) );
       为了计算方便, 我们把模板定义成一个滤波器数组:
const float4 samples[4] = {
-1.0, 0.0, 0, 0.25,
1.0, 0.0, 0, 0.25,
0.0, .0, 0, 0.25,
0.0 -1.0, 0, 0.25
};
这样颜色的计算就可以通过一个for循环来玩成:
   for(int i = 0; i < 4; i++)
   {
       texColor += samples[i].w * tex2D(
          Texture0, TexCoord +
          float2(samples[i].x*fInverseViewportWidth, samples[i].y*fInverseViewportHeight)
       ); 
   }
效果:
以下是整个PixelShader的代码:
sampler Texture0;             //源图像
float fInverseViewportWidth;    //宽度的倒数
float fInverseViewportHeight;    //高度的倒数
const float4 samples[4] = {      //滤波器
   -1, 0, 0, 0.25,
    1, 0, 0, 0.25,
    0, 1, 0, 0.25,
    0,-1, 0, 0.25
};
 
float4 ps_main(float2 TexCoord : TEXCOORD0
               ) : COLOR0
{  
   float4 texColor = (float4)0;    //初始化颜色值
  
   for(int i = 0; i < 4; i++)
   {
       texColor += samples[i].w * tex2D(
          Texture0, TexCoord +
          float2(samples[i].x*fInverseViewportWidth, samples[i].y*fInverseViewportHeight)
       ); 
   }
  
   return texColor;
}
 
明白了上面的程序, 那么其它效果就很好做了.
 
2.       边缘检测和锐化
相似的, 边缘检测的滤波器可以这样写:
 
const float4 samples[6] = {
-1.0, 1.0, 0, 1.0,
0.0, 1.0, 0, 2.0,
1.0, 1.0, 0, 1.0,
-1.0, -1.0, 0, -1.0,
0.0, -1.0, 0, -2.0,
1.0, -1.0, 0, -1.0
};
效果:
锐化滤波器:
const float4 samples[5] = {
0.0, 0.0, 0, 11.0/3.0,
0.0, 1.0, 0, -2.0/3.0,
0.0, -1.0, 0, -2.0/3.0,
-1.0, 0.0, 0, -2.0/3.0,
1.0, 0.0, 0, -2.0/3.0
};
效果:
 
有了这些基础, 相信一般的图像处理算法都没什么问题了. 如果需要更多的数学函数的支持, 可以参照这里:
Intrinsic Functions (DirectX HLSL):
这篇文章不错, 同时也推荐一下:
Direct3D提高篇:HLSL编程实现PhotoShop滤镜效果:
 
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

数字图像处理的技术方法和应用

所谓数字图像处理,是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。20 世纪 50 年代,电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息,这便是早期的图像处理。早期图...
  • yangleo1987
  • yangleo1987
  • 2016-11-18 10:55
  • 2447

数字图像处理应用领域及所需学习的学科知识

选择了数字图像处理这个研究方向作为终身的目标,天赋+兴趣+努力,你将拥有了开启未来最前沿,最富活力技术的钥匙。人类获取的信息80%以上来自于视觉,但目前让机器来处理这些信息才刚刚开始呀,同志们要努力!...
  • ccyccy2012
  • ccyccy2012
  • 2015-01-03 23:34
  • 2129

数字图像处理经典论文汇总

Colorization and Color Transfer(图像上色和颜色迁移) Semantic Colorization with Internet Images, Chia et ...
  • zy122121cs
  • zy122121cs
  • 2015-04-03 21:45
  • 8940

数字图像处理的基本原理和常用方法

from: http://b2museum.cdstm.cn/identification/sztxcl-relative.htm 数字图像处理的基本原理和常用方法    数字图像处理是指将图像信号...
  • Real_Myth
  • Real_Myth
  • 2016-10-07 23:21
  • 1685

数字图像处理的基本原理和常用方法

数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。图像处理最早出现于 20 世纪 50 年代,当时的电子计算机已经发展到一定水平,人们开始利用计算机来处理图形和图像信息。数字图像...
  • haluoluo211
  • haluoluo211
  • 2016-10-09 20:39
  • 3023

系统学习数字图像处理之基础

1
  • App_12062011
  • App_12062011
  • 2014-09-12 12:34
  • 2033

数字图像处理入门(一)-基本概念

什么是图像? 定义为二位函数f(x,y),其中,x,y是空间坐标,f(x,y)是点(x,y)的幅值。 灰度图像是
  • sysstc
  • sysstc
  • 2015-07-24 09:57
  • 1603

《数字图像处理》——图像滤波

首先,图像滤波主要涉及线性滤波和非线性滤波两大类。     线性滤波主要有:方框滤波器,均值滤波器,高斯滤波器(注意:滤波器的名字,通常是根据他们的核的使用来命名的,核也可以叫做模板,掩膜,...
  • hh555800
  • hh555800
  • 2014-12-25 10:27
  • 721

数字图像处理-算法学习

来自个人百度空间的文章---2012.2.23 一.点运算(像素变换) 1.线性变换    原理:f=a*F+b;  效果:典型的有反色的作用。 2.阀值运算    ...
  • pppaass
  • pppaass
  • 2015-07-06 15:48
  • 2371

数字图像和数字图像处理

Digital Image Processing[数字图像和数字图像处理] 数字图像就是指代表图像的矩阵。 数字图像处理就是对图像矩阵进行各种数学运算。在进行图像处理时需要一些数学基础,主要包括线性...
  • xlx921027
  • xlx921027
  • 2016-08-15 21:29
  • 2154
    个人资料
    • 访问:1505573次
    • 积分:18891
    • 等级:
    • 排名:第548名
    • 原创:254篇
    • 转载:74篇
    • 译文:28篇
    • 评论:938条
    博客专栏
    文章存档
    最新评论