从数字图像处理的一篇文章(模板运算)提到以下内容,但内容中有一个问题想请大家帮忙:
就是后面提到的二维转化成一维后,两个一维矩阵是如何与图(a)矩阵运算的(其运算结果值为图(c))?
文章原文如下: 可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。
例如,
1 2 1
(1/16) * [ 2 4. 2 ] (3.2)
1 2 1 式可以分解成一个水平模板和一个垂直模板,即,
1 2 1 1 1
(1/16) * [ 2 4. 2 ]=(1/4)* [1 2. 1]*(1/4)*[ 2.] =(1/16)*[1 2. 1]*[ 2.] (3.3)
1 2 1 1 1
我们来验证一下。
设图象为
2 2 2 2
[ 3 2 3 3 ] (a)
4 6 4 5
5 6 6 6
,经过(3.2)式处理后变为
2 2 2 2
[ 3 3 3.06 3 ] (b)
4 4.56 4.56 5
5 6 6 6
,经过(3.3)式处理后变为
2 2 2 2
[ 3 3 3.06 3 ] (c)
4 4.56 4.56 5
5 6 6 6
,两者完全一样。如果计算时不考虑周围一圈的象素,前者做了4×(9个乘法,8个加法,1个除法),共36个乘法,32个加法,4个除法;后者做了4×(3个乘法,2个加法)+4×(3个乘法,2个加法)+4个除法,共24个乘法,16个加法,4个除法,运算简化了不少.
请大家帮忙解答开始提的问题,谢谢!
就是后面提到的二维转化成一维后,两个一维矩阵是如何与图(a)矩阵运算的(其运算结果值为图(c))?
文章原文如下: 可以设法将二维模板运算转换成一维模板运算,对速度的提高也是非常可观的。
例如,
1 2 1
(1/16) * [ 2 4. 2 ] (3.2)
1 2 1 式可以分解成一个水平模板和一个垂直模板,即,
1 2 1 1 1
(1/16) * [ 2 4. 2 ]=(1/4)* [1 2. 1]*(1/4)*[ 2.] =(1/16)*[1 2. 1]*[ 2.] (3.3)
1 2 1 1 1
我们来验证一下。
设图象为
2 2 2 2
[ 3 2 3 3 ] (a)
4 6 4 5
5 6 6 6
,经过(3.2)式处理后变为
2 2 2 2
[ 3 3 3.06 3 ] (b)
4 4.56 4.56 5
5 6 6 6
,经过(3.3)式处理后变为
2 2 2 2
[ 3 3 3.06 3 ] (c)
4 4.56 4.56 5
5 6 6 6
,两者完全一样。如果计算时不考虑周围一圈的象素,前者做了4×(9个乘法,8个加法,1个除法),共36个乘法,32个加法,4个除法;后者做了4×(3个乘法,2个加法)+4×(3个乘法,2个加法)+4个除法,共24个乘法,16个加法,4个除法,运算简化了不少.
请大家帮忙解答开始提的问题,谢谢!
解决方案 »
- 在vc2010 添加类 下面的目录如何才能设置?
- ADO何时打开 关闭连接
- 请问如何使用程序控制CapsLock、NumLock等灯开和关?谢谢
- Unicode问题
- 请问怎样实现向treectrl插入一个节点后,立即可以让用户编辑其文本呢
- 在WIN下如何检测一进程是否死锁?
- 关于CTreeControl的问题,请帮忙!
- 在CSDN发了近8个小时没法解决的问题:单击CTreeView中节点引起CListView改变!
- 关于编译错误的请教,请大虾赐教??
- setsockopt中第4个参数是const char*类型,可msdn上让设struct linger,传入&mylingerr 编译包错说不能将struct *给char *,如何解决?
- sp6补丁打了之后,能不能再打processor pack?
- 为什么我调用这个Dll,会内存不能written?
a4,a5,a6,a7,
a8,a9,a10,a11,
a12,a13,a14,a15};
1
運算順序,a5' = [a4,a5,a6]*[ 2 ,
1 1
再算出 a6' = [a5,a6,a7]*[2],
1 同樣算出 a9',a10', 然後將a5',a6',a9',a10'替換a5,a6,a9,10, A'= {a0,a1,a2,a3,
a4,a5',a6',a7,
a8,a9',a10',a11,
a12,a13,a14,a15
};
再進行橫向一維運算:
a1
a5''=[a5']*[1 2 1 ];
a9'
a6'',a9'',a10''也如此。