【发布时间】:2015-09-27 15:39:23
【问题描述】:
我正在尝试使用 3 种不同的方法获得拉普拉斯算子,以防 1 和 2 结果相同,但 3 有什么问题?
这是 Matlab 中的代码:
m= magic(6)
Lap1Dx= convn(m,[-1 2 -1],'same')
Lap1Dy= convn(m,[-1;2;-1],'same')
%ver1
Lap2Dxy= convn(m,[0 -1 0;-1 4 -1;0 -1 0],'same')
%ver2
Lap2Dxy= Lap1Dx+Lap1Dy %same as ver 1
%ver 3
%get laplacian using gradients
gradx= convn(m,[-1 1],'same')
grady= convn(m,[-1;1],'same')
gradxx= convn(gradx,[-1 1],'same')
gradyy= convn(grady,[-1;1],'same')
Lap2Dxy= gradxx+gradyy
输出:
m =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
Lap1Dx =
69 -39 -15 27 -12 29
-26 54 -39 12 0 27
53 -15 -27 15 12 13
-12 15 21 -9 -12 20
55 -54 51 -24 0 18
-28 39 9 -21 12 4
Lap1Dy =
67 -30 5 31 15 23
-60 54 6 -6 0 6
51 -42 -36 6 21 0
-45 42 30 0 -21 -6
48 -54 6 -6 0 6
-22 67 24 14 22 6
Lap2Dxy =
136 -69 -10 58 3 52
-86 108 -33 6 0 33
104 -57 -63 21 33 13
-57 57 51 -9 -33 14
103 -108 57 -30 0 24
-50 106 33 -7 34 10
Lap2Dxy =
136 -69 -10 58 3 52
-86 108 -33 6 0 33
104 -57 -63 21 33 13
-57 57 51 -9 -33 14
103 -108 57 -30 0 24
-50 106 33 -7 34 10
gradx =
34 -5 -20 7 -5 24
-29 25 -14 -2 -2 25
22 7 -20 -5 7 20
-20 -5 16 7 -5 15
25 -29 22 -2 -2 16
-32 7 16 -5 7 11
grady =
32 -31 -1 5 -4 -1
-28 23 5 -1 -4 5
23 -19 -31 5 17 5
-22 23 -1 5 -4 -1
26 -31 5 -1 -4 5
4 36 29 13 18 11
gradxx =
39 15 -27 12 -29 24
-54 39 -12 0 -27 25
15 27 -15 -12 -13 20
-15 -21 9 12 -20 15
54 -51 24 0 -18 16
-39 -9 21 -12 -4 11
gradyy =
60 -54 -6 6 0 -6
-51 42 36 -6 -21 0
45 -42 -30 0 21 6
-48 54 -6 6 0 -6
22 -67 -24 -14 -22 -6
4 36 29 13 18 11
Lap2Dxy =
99 -39 -33 18 -29 18
-105 81 24 -6 -48 25
60 -15 -45 -12 8 26
-63 33 3 18 -20 9
76 -118 0 -14 -40 10
-35 27 50 1 14 22
【问题讨论】:
-
这与您如何计算导数有关。您正在使用向后有限差分,尝试与其他人(我现在无法运行 Matlab)。
-
@AnderBiguri 你的意思是 [1 -1] 而不是 [-1 1]?
-
或
[-1 0 1],或您可以找到的任何可能的导数离散逼近版本。
标签: matlab math image-processing computer-vision convolution