目录
结合图像特征的平滑恢复技术
1.开发步骤
2 应用案例开发
结束语
应用 Web3D 引擎开发的计算机仿真系统或虚拟现实系统均需在 Web 浏览 器 上 运 行 , 需要其能快速下载和运行 , 并且尽量不需下载特定插件 。 采用基于 JAVA 技术的开源 Web3D 引擎开发的三维系统可以满足上述要求 , 开发的展示系统可以实现三维图形的旋转 、 缩放 等 交 互 功 能 。 此 外 , 在系统开发过程中对引擎中不完善的部分进行了必要的修正 。
结合图像特征的平滑恢复技术
图像恢复是数字图像处理领域中的一大类技术
。
图
像恢复技术是要将引起图像降质的过程模型化
,
然后根据
相应的退化模型和知识重建来恢复原始的图像
。
由 于 造
成图像降质的原因众多
,
目前没有统一的恢复方法
,
在 对
信号源或衰减特性作了某些隐含假设后
,
目前常用的典型
恢复方法有迭代直接逆滤波
、
维纳滤波
、
最大熵恢复
、
约束
的最小二乘方滤波等
。
对于退化的图像
,
噪声是一种常见
的图像退化因素
,
并且图像恢复又对噪声十分敏感
。
而上
述这些方法仅从整体上考虑了噪声的幅值因素
(
即信噪比
等因素
),
没有考虑到噪声对图像的不同内容或特征的影
响
。
一般意义上
,
一幅图像的结构可分为光滑区域
、
阶 跃
边缘
、
屋顶边缘和噪声颗粒
4
类
,
表现为光滑区域
、
边缘线
和孤立点等 特 征
,
恢复后的图像噪声不可避免地会被放
大
,
而这个放大的噪声对图像中不同区域的影响是不一样
1.开发步骤
根据
Web3D
引擎
idx3D
中经修改后的各类的属性和
方法
,
总结了以下的开发步骤
:
(
1
)
为所开发的 系 统 建 模
。
系统需要先建立模型
,
才
能对相应对象进行交互式处理
。
由 于
idx3D
引 擎 中 没 有
建模的功能
,
需要借助其他建模工具实现建模
。
(
2
)
构造场景
。
系统中
,
摄像机
、
光源以及物体等各类
对象都要置于场景中予以管理和操作
,
因此首先要构造场
景
。
(
3
)
加入材质和灯光
。
在场景中需要加入相应的材质
和灯光
。
(
4
)
将模型文件导入程序中
。
导入的物体模型添加到
场景中
。
(
5
)
重构场景
,
以及场景规格化
。
由于场景中添加了
材质
、
灯光以及物体模 型 等 内 容
,
需要将这些对象重构成
新的场景
,
并对场景进行规格化操作
。
(
6
)
初始化渲染 状 态
。
对重构后的场景进行渲染
,
此
时是静止状态
,
并没有交互式的操作
。
2 应用案例开发
2.1
开发系统的简介
应用基于
JAVA
技 术 的
Web3D
开 源 引 擎
idx3D
,
开
发了一款陶瓷 产 品
———
茶壶的三维展示系统
。
所 开 发 系
统的功能如下
:
①
可以根据用户的需求建立茶壶的模型
;
②
可以自由设置茶壶的花纹和材质
;
③
通过鼠标的移动
,
可以实现对茶壶对象的旋转操作
;
④
通过键盘的操作
,
可
以实现对茶壶对象的缩放操作
。
具 体 来 说
,
按 动 键 盘 上
‘
w
’
字符
,
茶壶 对 象 会 放 大
,
按 动 键 盘 上
‘
s
’
字 符
,
茶 壶 对
象会缩小
。
2.2
具体实现
2.2.1 3D
建模
用
Autodesk
的
3D
’
sMax
工具
,
为茶壶进行建模
,
再
进行贴图建模和贴图完成时的截图如图
1
所 示
。
建 模 完
成后
,
生 成
.max
文 件
。
由 于
Web3D
引 擎
idx3D
的 要 求
,
需要导出一个
.3ds
文 件
,
和一个用于贴图 的
.png
图 像 文
件
。
2.2.2
代码的实现
本节中主要介绍开发流程的实现
,
以及主要部分的方
法调用等内容
,
代码的流程如图
2
所示
。
主要介绍了
4
个
函数
:
init
()、
update
()、
mouseDrag
()
和
keyDown
()。
从
功能上看
init
()
函数主要实现了对整个系统的构建
,
up
-
date
()
函数实现对场景的渲染以及描画到显示器的相应
窗口即
applet
中
mouseDrag
()
函数主要实现了鼠标操作
的功能即对物体旋转的操作
,
keyDown
()
函数主要实现了
键盘操作的功能即缩放功能
。
在
publicvoidinit
()
中
,
主要进行了该系统的初始化
处理
,
即
3
中介绍的开发步骤的具体实现
,
包括
:
(
1
)
构建场景
:
用
newidx3d
_
Scene
()
语句创建场景对
象
,
参数为场景的大小尺寸
。
(
2
)
为场景添加材质和灯光
:
①
调用
addMaterial
()
方
法
,
为场景添加材质
。
根据材质的不同指定不同的参数
;
②
调用
setAmbient
()
和
setBackgroundColor
()
这两 个 方
法
,
为场景添加灯光和背景颜色
。
(
3
)
导入建好模型的
.3ds
文件
:
用
newidx3d
_
3ds
_
Im
-
porter
()
.importFromURL
()
语句创建导入文件对象
,
参
数为所建模型
.3ds
文件的路径和场景的对象
。
(
4
)
重构场景和场景的规格化
:
①
重构场景时
,
场景对
象
scene
调 用
rebuild
()
方 法
,
将 材 质
(
Material
)
和 对 象
(
Object
)
生 成 对 象 数 组
;
②
对场景规格化时
,
场 景 对 象
scene
调用
normalize
()
方法来实现规格化
。
(
5
)
重置场景矩阵
:
由于场景和对象都在本地空间下
建模
,
在规格化之后需要将场景和对象在本地空间下的坐
标转化为世界空间下的坐标
,
进行重置场景矩阵的计算
,
具体实现通过语句
scene.matrix.reset
()。
(
6
)
设置摄像机的位置
,
建立视图空间
:
将摄像机的位
置设为点
(
0
,
0
,
-100
),
设置摄像机位置的语句为场景对
象
scene
调用相应方法
,
scene.defaultCamera.setPos
(
0
,
0
,
-100
)。
修饰 类 型 为
public
、
无返回值的同步方法
update
,
其
参 数为
Graphics
类型的对象
g
,
即
publicsynchronizedvoid
update
(
Graphicsg
)
中
,
进行两个操作
:
(
1
)
将连同对象在内的整个场景渲染到一张图片中
,
场景对象
scene
调 用
render
()
方 法
。
render
()
中 是 调 用
了
renderPipeline
中 的
render
(
this.defaultCamera
)
方 法
,
参数为默认摄像机
。
这一部分是将连同三维图形在内的三维场景
,
转化为
具有三维效 果 的 二 维 图 像
,
下一步是将这个图像描画在
applet
上
。
(
2
)
将渲染好的图片画到屏幕上
,
此 处 实 例 化
Graph
-
ics
对象
g
,
调用
drawImage
()
方法在
applet
上进行描画
。
在
publicbooleanmouseDrag
(
Event
evt
,
intx
,
inty
)
中
,
场景 对 象
scene
调 用
rotate
()
方 法
,
进 行 旋 转 处 理
rotate
()
方 法 在
Scene.java
继 承 自 的
CoreObject.java
中
定义
,
rotate
()
方法实现旋转的具体思路为
:
分别计算绕
x
轴
,
y
轴和
z
轴旋转时的变换矩阵
,
再相乘而得到一个变
换矩阵
,
再进行渲染
。
在
publicbooleankeyDown
(
Event
evt
,
intkey
)
中
,
场
景对象
scene
调用
scale
()
方 法
,
进 行 缩 放 处 理
。
scale
()
的参数分别是
zoomIn
()
方法和
zoomOut
(),
放大时 参 数
为
zoomIn
()
方 法
,
缩 小 时 参 数 为
zoomOut
()
方 法
。
zoomIn
()
与
zoomOut
()
的 作 用 类 似
,
都是用来计算缩放
比例的方法
,
zoomIn
()
用来计算大于
1
的比例
,
zoomOut
(
)
则用来计算 小 于
1
的 比 例
。
scale
()
方法实现缩放的具
体思路是
:
通过
zoomIn
()
方法或
zoomOut
()
方法计 算 出
来的缩放比例计算相应的变换矩阵
,
再进行渲染
结束语
本文在对 比 了 几 种
3D
技 术 的 基 础 上
,
介 绍 了 开 源
Web3D
引擎
idx3D
的 具 体 实 现
,
以及对原引擎的优化
。
在此基础上
,
明确了 基 于 开 源
Web3D
引擎开发系统的流
程
,
以及具体开发方 法
。
最 后
,
提供了一个茶壶展示系统
的开发实例
,
该实例的运行无需下载特定插件
。