33,028
社区成员
发帖
与我相关
我的任务
分享
Public Sub SetI(Rect As RectStruct, SourceArray() As Long, TargetArray() As Long)
Dim X As Long, Y As Long
Dim g As Long
Dim S() As Long
Dim gg As Long
ReDim TargetArray(Rect.Left - OutRangeLength To Rect.Right + OutRangeLength, Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
ReDim S(Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
For X = Rect.Left To Rect.Right
For Y = Rect.Top To Rect.Bottom
g = SourceArray(X, Y)
For gg = 0 To g - 1
S(Y, gg) = S(Y - 1, gg)
Next gg
For gg = g To 255
S(Y, gg) = S(Y - 1, gg) + 1
Next gg
For gg = 0 To 255
TargetArray(X, Y, gg) = TargetArray(X - 1, Y, gg) + S(Y, gg)
Next gg
Next Y
ReDim S(Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
Next X
End Sub
Public Function GetP(Rect As RectStruct, OperateArray() As Long, g As Long) As Long
GetP = OperateArray(Rect.Left - 1, Rect.Top - 1, g) - OperateArray(Rect.Right, Rect.Top - 1, g) - OperateArray(Rect.Left - 1, Rect.Bottom, g) + OperateArray(Rect.Right, Rect.Bottom, g)
End FunctionPublic Sub SetI(Rect As RectStruct, SourceArray() As Long, TargetArray() As Long)
Dim X As Long, Y As Long
Dim g As Long
Dim S() As Long
Dim gg As Long
ReDim TargetArray(Rect.Left - OutRangeLength To Rect.Right + OutRangeLength, Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
ReDim S(Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
For X = Rect.Left To Rect.Right
For Y = Rect.Top To Rect.Bottom
g = SourceArray(X, Y)
For gg = 1 To g - 1
S(Y, gg) = S(Y - 1, gg)
Next gg
For gg = g To 255
S(Y, gg) = S(Y - 1, gg) + 1
Next gg
TargetArray(X, Y, g) = TargetArray(X - 1, Y, g) + S(Y, g)
For gg = 1 To 255
TargetArray(X, Y, gg) = TargetArray(X - 1, Y, gg) + S(Y, gg)
Next gg
Next Y
ReDim S(Rect.Top - OutRangeLength To Rect.Bottom + OutRangeLength, 255)
Next X
End Sub
Public Function GetP(Rect As RectStruct, OperateArray() As Long, g As Long) As Long
GetP = OperateArray(Rect.Left - 1, Rect.Top - 1, g) - OperateArray(Rect.Right, Rect.Top - 1, g) - OperateArray(Rect.Left - 1, Rect.Bottom, g) + OperateArray(Rect.Right, Rect.Bottom, g)
End Function
然后仔细一看,发现楼主的公式有些问题或者是我理解错误?看得头晕啊
一个点(x,y)的领域应该就是周围的几十个点吧?用遍历法计算空间复杂度是好低,时间复杂度不满足楼主 要求?
牺牲时间换空间,牺牲空间换时间,额。
我的思想是:
P置零,从矩形的左上第一个单元开始遍历,然后如果该单元灰度值小于等于g,P++,遍历完为止。
楼主你看看?