我正在尝试对二进制图像应用数学形态学运算。我试图应用的操作是扩张。我发布下面的代码。
# Dilation of A with a square with size a. The reference is (1,1)
#
mm_dilationsqr <- function(A,a){
C <- A
if(a<=1) return(C)
for(i in 1:a)
for(j in 1:a)
{
B <- mm_translation(A,1-i,1-j)
C <- mm_union(C,B)
}
C <- mm_translation(C,a/2,a/2)
return(C)
}
以上是一个扩张函数,它也会调用翻译和联合函数,这些函数也会在下面发布。
# Translation of set A by x,y.
# Warning: no periodicity, watch the borders!
#
mm_translation <- function(A,x,y){
C <- mm_zero()
if((x>=-M+1) & (x<=M) & (y>=-N+1) & (y<=N))
{
for(i in 1:M)
for(j in 1:N)
{
if((i+x>=0) & (i+x<=M) & (j+y>=0) & (j+y<=N))
C[i+x,j+y] <- A[i,j]
}
}
return(C)
}
以下联盟功能:
# Union (OR) of sets A and B
#
mm_union <- function(A,B){
C<-as.integer(A|B)
dim(C) <- c(M,N)
return(C)
}
现在,当我尝试使用mm_dilation函数处理数组形式的图像时,我收到此错误:Error in mm_union(C, B) : binary operation on non-conformable arrays
。
我的数组维度是
dim(TA)
[1] 745 691
当使用下面给出的上述给定TA维数数组的子集时,代码在这种情况下正在工作。
dim(A)
[1] 21 21
所以我想知道如何改进这一点,以便它可以处理TA
尺寸的图像。