- 1、本文档共79页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
______________________________________________________________________________________________________________
1.数学模型
对于一个目的像素,其坐标通过反向变换得到的在原图中的浮点坐标为
(i+u,j+v) ,其中
i、 j 均为非负整数, u 、v 为 [0,1)
区间的浮点数,双三次插值考虑一个浮点坐标
(i+u,j+v) 周围
的 16 个邻点,目的像素值 f(i+u,j+v) 可由如下插值公式得到:
f(i+u,j+v) = [A] * [B] * [C]
[A]=[ S(u + 1)
S(u + 0)
S(u - 1)
S(u - 2) ]
┏ f(i-1, j-1)
f(i-1, j+0)
f(i-1, j+1)
f(i-1, j+2)
┓
[B]= ┃ f(i+0, j-1)
f(i+0, j+0)
f(i+0, j+1)
f(i+0, j+2)
┃
┃ f(i+1, j-1)
f(i+1, j+0)
f(i+1, j+1)
f(i+1, j+2)
┃
┗ f(i+2, j-1)
f(i+2, j+0)
f(i+2, j+1)
f(i+2, j+2)
┛
S(v + 1) ┓
[C]= ┃ S(v + 0) ┃
┃ S(v - 1) ┃
S(v - 2) ┛
┏ 1-2*Abs(x)^2+Abs(x)^3 , 0=Abs(x)1
S(x)= { 4-8*Abs(x)+5*Abs(x)^2-Abs(x)^3 , 1=Abs(x)2
精品资料
______________________________________________________________________________________________________________
┗ 0 , Abs(x)=2
S(x) 是对 Sin(x*Pi)/x 的逼近( Pi 是圆周率——π),为插值核。
2.计算流程
获取 16 个点的坐标 P1 、 P2 ?? P16
2. 由插值核计算公式 S(x) 分别计算出 x、 y 方向的插值核向量 Su 、 Sv
进行矩阵运算,得到插值结果
iTemp1 = Su0 * P1 + Su1 * P5 + Su2 * P9 + Su3 * P13
iTemp2 = Su0 * P2 + Su1 * P6 + Su2 * P10 + Su3 * P14
iTemp3 = Su0 * P3 + Su1 * P7 + Su2 * P11 + Su3 * P15
iTemp4 = Su0 * P4 + Su1 * P8 + Su2 * P12 + Su3 * P16
iResult = Sv1 * iTemp1 + Sv2 * iTemp2 + Sv3 * iTemp3 + Sv4 * iTemp4
在得到插值结果图后, 我们发现图像中有“毛刺”,因此对插值结果做了个后处理, 即:
设该点在原图中的像素值为 pSrc ,若 abs(iResult - pSrc) 大于某阈值,我们认为插值后的
点可能污染原图,因此用原像素值 pSrc 代替。
算法优化
由于双三次插值计算一个点的坐标需要其周围 16 个点,更有多达 20 次的乘法及 15 次
的加法,计算量可以说是非常大,势必要进行优化。
精品资料
______________________________________________________________________________________________________________
我们选择了 Intel 的 SSE2 优化技术,它只支持在 P4 及以上的机器。 测试当前 CPU 是
否支持 SSE2 ,可由 CPUID 指令得到,代码为:
BOOL g_bSSE2 = FALSE;
__asm
{
mov eax, 1;
cpuid;
test edx, 0
jz NotSupport;
mov g_bSSE2, 1
NotSupport:
}
支持 SSE2 的 CPU 引入了 8 个 128 位的寄存器, 这样一个寄存器中就可以存放 4 个点
(RGB) ,有利于并行计算。
详细代码见 Transform.cpp 中函数 Optimize_Bicubic 。
优化中遇到的问题:
1. 图像每个点由 RGB 通道组成, 由于 1 个 SSE2 寄存器有 16 个字节,这样读入 4 个
精品资料
_________________________________________________________
您可能关注的文档
- 参加市教育科研会议情况汇报与参加德育学习汇报汇编.docx
- 参加市教育科研会议情况汇报与参加拓展培训心得体会汇编.docx
- 参加幼儿园教师基地教育学分培训学习心得体会与参加教师培训班总结汇编.docx
- 参加德育学习汇报与参加拓展培训心得体会汇编.docx
- 参加新员工培训心得体会与参加灵石现场会后汇报材料汇编.docx
- 参观人员进入xx化工厂安全须知和预案与参赛商业计划书写作参考文本汇编.docx
- 参观消防队主题活动方案与参赛商业计划书写作参考文本汇编.docx
- 参观考察幼儿园心得体会与双语幼儿园六一儿童节中英双语节目主持词汇编.docx
- 叉车安全操作注意事项.docx
- 友爱演讲稿4篇与双11双12活动方案汇编.docx
文档评论(0)