첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 영교차 에지 회선 적용하기

----------------------------------------------------------------------------------------------------

#region 영교차 에지 회선 적용하기 - ConvolveZeroCrossingEdge(sourceArray, maskWidth, maskHeight)

 

/// <summary>

/// 영교차 에지 회선 적용하기

/// </summary>

/// <param name="sourceArray">소스 배열</param>

/// <param name="maskWidth">마스크 너비</param>

/// <param name="maskHeight">마스크 높이</param>

/// <returns>영교차 에지 회선 적용 배열</returns>

public int[,] ConvolveZeroCrossingEdge(int[,] sourceArray, int maskWidth, int maskHeight)

{

    int    sourceWidth  = sourceArray.GetUpperBound(1) + 1;

    int    sourceHeight = sourceArray.GetUpperBound(0) + 1;

    int[,] resultArray  = new int[sourceHeight, sourceWidth];

    int    xPadding     = maskWidth  / 2;

    int    yPadding     = maskHeight / 2;

    int[]  targetArray  = new int[maskHeight * maskWidth];

 

    for(int y = 0; y < sourceHeight - 2 * yPadding; y++)

    {

        for(int x = 0; x < sourceWidth - 2 * xPadding; x++)

        {

            int index = 0;

 

            for(int r = 0; r < maskHeight; r++)

            {

                for(int c = 0; c < maskWidth; c++)

                {

                    targetArray[index++] = sourceArray[y + r, x + c];

                }

            }

 

            resultArray[y + yPadding, x + xPadding] = CalculateZeroCrossing(targetArray, index);

        }

    }

 

    for(int y = 0; y < yPadding; y++)

    {

        for(int x = xPadding; x < sourceWidth - xPadding; x++)

        {

            resultArray[y, x] = resultArray[yPadding, x];

 

            resultArray[sourceHeight - 1 - y, x] = resultArray[sourceHeight - 1 - yPadding, x];

        }

    }

 

    for(int x = 0; x < xPadding; x++)

    {

        for(int y = 0; y < sourceHeight; y++)

        {

            resultArray[y, x] = resultArray[y, xPadding];

 

            resultArray[y, sourceWidth - 1 - x] = resultArray[y, sourceWidth - 1 - xPadding];

        }

    }

 

    return resultArray;

}

 

#endregion

 

#region 영교차 계산하기 - CalculateZeroCrossing(targetArray, targetLength)

 

/// <summary>

/// 영교차 계산하기

/// </summary>

/// <param name="targetArray">타겟 배열</param>

/// <param name="targetLength">타겟 길이</param>

/// <returns>영교차 계산값</returns>

private int CalculateZeroCrossing(int[] targetArray, int targetLength)

{

    int middle = targetLength / 2;

 

    if(targetArray[middle] * targetArray[1] < 0 || targetArray[middle] * targetArray[middle - 1] < 0)

    {

        return 255;

    }

 

    return 0;

}

 

#endregion

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요