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

大家可以拿来做<<数字图像处理>>这门课的实验, 呵呵, 这样就不用自己去实现框架了, 而且速度也快^_^

第一步, 这样来创建一个模板程序:

如图

我们先来认识一下左边有些什么:

base: 这是一个纹理(-_-图形学的术语…), 在这里我们就把它当成我们要处理的图像, 注意图像的长宽都是2的n次幂. 双击可以打对话框更换.

Stream Mapping: 不用管它, 保持默认值就好.

ScreenAlignedQuad: 其实只是一个正方形网格而已, 做为base纹理的骨架.( 又来了, 图形学-_-).暂且把它当成画板吧, 不用动它.

Single Pass: 进行绘制的地方

       ScreenAlignedQuad: 又一个…看见有个小剪头了没? 上面那个同名东的引用.

       Render State: 设置了一些渲染的参数, 不用管它.

       Vertex Shader: 里面写了怎么把ScreenAlignedQuad画到屏幕上, 这种支画板的活我们不关心.

Pixel Shader: 像素级的处理, 这就是我们要发挥我们想像力的地方了!

       Texture0: 上面那幅图的引用.

       Stream Mapping: 也是上面的那个”不明物体”的引用.

下面让我们打开Pixel Shader看看都有什么:

是不是看着很像C语言啊? 我再来XX两句:

sampler2D Texture0;

定义一个叫Texture0的图, 见上面的介绍. 注意保持名字的一致, 不然程序就找不到要处理的图像啦.

float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR

所谓的float4就是由4个float组成的一个结构, 像这样:float4(x,y,z,w), 如果当成颜色值的话, 就是这样float4(r,g,b,a). 不要问我RGBA是啥, 图像处理时讲的……..

ps_main就是函数名, 括号里是参数

这里的texCoord就是我们要处理的当前像素的坐标值. 细心的可能看到它是float2格式的, 嗯, 没错, 实际上它就是一个float2(x,y) 型的结构. 不过有一点一定要注意: 这里的坐标单位不是基于像素的, 而是基于纹理坐标系的(别扔我…我解释一下就是了)

召唤一幅图:

图上的一格代表一个像素, 括号里面就是传统的像素坐标, 下面批示的就是纹理坐标.

聪明的你一眼就能看出来, 纹理坐标各轴上范围是[0,1], 相当于把原来的像素级的坐标除以了图像的宽度(高度).

来, 我们操刀上阵, 修改一下:

双击base换张彩图:

把PixelShader做如下修改:

sampler2D Texture0;   float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR {    //当前像素在图像中的颜色值    float4 color = tex2D( Texture0, texCoord );   //转换RGB为强度值    float intensity = color.r * 0.299 + color.g * 0.587 + color.b * 0.184;       return float4(intensity,intensity,intensity,1); }

效果:

成黑白的了, 简单不?

(RGB到强度转换为什么那样转见课本. 你想偷懒的话直接(R+G+B)/3好了……)

未完待续……….

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏walterlv - 吕毅的博客

Grid 布局算法!自己动手实现一个 Grid

2018-05-20 07:11

1022
来自专栏工科狗和生物喵

【机器视觉与图像处理】基于MATLAB+Hough的圆检测

本次文章,没有太多好写的,就是最近做的一个机器视觉的课程设计作业,是要做一个流水线的生产线建模以及对于产品的检测识别,我个人承包了圆心半径检测的内容,熬了好几天...

3051
来自专栏PPV课数据科学社区

数据挖掘知识脉络与资源整理(七)–饼图

? ? 简介 饼图英文学名为Sector Graph, 有名Pie Graph。常用于统计学模块。2D饼图为圆形,手画时,常用圆规作图。 仅排列在工作表的一...

3027
来自专栏游戏杂谈

关于坐标旋转

在看<Flash actionscript动画教程>(中文版)的第十章的第二节,它提到“高级坐标旋转”,书中只给出了一个基本公式:

3052
来自专栏葬爱家族

Android高德之旅(8)绘制线废话简单的api总结

绘制线会比绘制点稍微复杂点,抛开一些复杂的属性不谈,主要分为三类:实线、虚线、纹理。绘制线在自定义地图中是非常重要的一个环节。

3885
来自专栏谦谦君子修罗刀

ios约束

一、苹果的VFL语法约束 在使用约束之前,要先将没有设置frame的view添加到父视图上。如何将view设置为使用AutoLayout约束,取消默认约束。 ...

3265
来自专栏儿童编程

Processing雁群实验(续)

(1)旋转复杂不规则图形; (2)运用二维数组定义图形; (3)鼠标左右移动控制物体沿 Y 轴旋转; (4)点击鼠标线条变色。

1492
来自专栏mySoul

css的2D转换

下面通过css实现动画效果,可以使用脚本化的css实现滑入,轮廓伸缩的列表,即动态的HTML,一个过时的说法DHTML

1120
来自专栏生信技能树

用python编写验证码

作为一个用python的生信工程师,平时工作中除了用python来处理些文本文件和搭建流程,没事也想探索些其他有趣的功能。这几天就在网上学习了下如何用pytho...

4265
来自专栏数据小魔方

sparklines迷你图系列5——Evolution(Horizon)

今天跟大家分享区域(面积图)图的一个变体——水平线图。 之所以说是面积图的变体,因为这种水平线图,表达的信息与面积图几乎差不多,差别仅仅在图表呈现形式上。 ? ...

3226

扫码关注云+社区

领取腾讯云代金券