1

我正在尝试对二值图像应用数学形态学运算。我试图应用的操作是扩张。我在下面发布代码。

# 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尺寸图像。

4

0 回答 0