矩阵卷积运算在图像处理中有着广泛的应用,它的描述如下:
1)对于两个形状相同的矩阵,它们的内积是每个对应位置的数字相乘之后的和;
2)对于小矩阵和大矩阵卷积运算时,以小矩阵为参考,沿着横向和纵向两个方向逐个滑动(取同样大小的矩阵),依次横向和纵向两个方向逐个滑动(取同样大小的矩阵),依次求出内积,得到结果矩阵,如图a所示。 图a 小A同学用VB程序模拟上述的矩阵卷积运算,单击“初始化小矩阵”按钮command1,随机生成小矩阵数据,单击“初始化大矩阵”按钮command2,随机生成大矩阵数据,单击“运算”按钮command3,进行矩阵卷积运算并生成结果矩阵,运行界面如图b所示: 图b
(1)
根据描述,上图中“结果矩阵”最后一个被抹去的数字应该是。
(2)
实现上述功能的VB 程序如下。请在划线处填入合适代码。
Const m = 2 ‘小矩阵行数和列数
Const n = 8 ‘大矩阵行数和列数 Dim a(1 To
m * m) As Integer Dim b(1
To n * n) As Integer
Dim tempStr
As String ‘输出行的临时数据 '初始化小矩阵
Private Sub Command1_Click()
Dim x As
Integer ‘小矩阵当前坐标位置
Randomize
List1.Clear
For i
= 1 To m
tempStr = ""
For
j = 1 To m
x =
(i - 1) * m + j
a(x)
= Int(Rnd() * 5 + 1) ‘小矩阵[1,5]的随机数
tempStr = tempStr
+ Str(a(x))
Next
j
List1.AddItem
tempStr
Next
i
End Sub
‘初始化大矩阵
Private Sub Command2_Click()
Dim x As
Integer ‘大矩阵当前坐标位置
Randomize
List2.Clear
For i
= 1 To n
temp Str = ""
For j
= 1 To n
x =
b(x) =
Int(Rnd() * 10) ‘大矩阵[0,9]的随机数
tempStr
= tempStr
+ Str(b(x))
Next j
List2.AddItem tempStr
Next i
End Sub
‘运算
Private Sub Command3_Click()
Dim productSum
As Integer
'内积
Dim product
As Integer
Dim rowNow As
Integer, colNow As Integer
List3.Clear
For i = 1
To n
- m + 1 ‘处理纵向移动
tempStr =
""
For
j = 1 To n - m
+ 1 ‘处理横向移动
productSum
= 0
For
k = 1 To m * m
rowNow
= (k - 1) \ m ‘小矩阵值的行号
colNow = ‘小矩阵值的列号
product = a(k) * b((i - 1 +
rowNow) * n + j + colNow
- 1) '大小矩阵值乘积
Next
k
tempStr
= tempStr
+ Str(productSum)
Next j
List3.AddItem tempStr
Next
i
End Sub
答案: 【1】52
【1】(i - 1) * n + j 或其它等效答案【2】(k - 1) Mod m + 1 或其它等效答案【3】productSum = productSum + product 或其它等效答案