2012-03-09 4 views
-3

저는 지난 두 시간을 보내고 있었고 문제가 어디에 있는지 깨닫지 못했습니다. 저를 도와 주시겠습니까? 소블 운영자가 작동하지 않습니다.

public static void sobel(Img img) { 

    int[][][] myArray = img.getmyArray(); 
    int[][][] sobelX = img.copyMyArray(); 
    int[][][] sobelY = img.copyMyArray(); 

    //itearates through the matrix to apply the Sobel Operator 
    for (int line = 1; line < myArray.length -2; line++) 
     for (int column = 1; column < myArray[line].length -2; column++) 
      for(int color = 0; color < 3; color++){ 

      sobelX[line][column][color] = 
        -1 * myArray[line-1][column-1][color] + 
        -2 * myArray[line-1][column][color] + 
        -1 * myArray[line-1][column+1][color] + 

        0 * myArray[line][column-1][color] + 
        0 * myArray[line][column][color] + 
        0 * myArray[line][column+1][color] + 

        1 * myArray[line+1][column-1][color] + 
        2 * myArray[line+1][column][color] + 
        1 * myArray[line+1][column+1][color]; 

      sobelY[line][column][color] = 
        -1 * myArray[line-1][column-1][color] + 
        0 * myArray[line-1][column][color] + 
        1 * myArray[line-1][column+1][color] + 

        -2 * myArray[line][column-1][color] + 
        0 * myArray[line][column][color] + 
        2 * myArray[line][column+1][color] + 

        -1 * myArray[line+1][column-1][color] + 
        0 * myArray[line+1][column][color] + 
        1 * myArray[line+1][column+1][color]; 


      //Final Calculation 
      myArray[line][column][color] = check_0_255_limit((int)Math.sqrt(
        sobelX[line][column][color] * sobelX[line][column][color] 
        + 
        sobelY[line][column][color] * sobelY[line][column][color] 
        )); 

     }// end for loop 
} 

오류 메시지

이 코드는 컴파일 및 실행,하지만 난 나쁜 결과를 받고 있어요, 그것은 내가 기대했던 것이 아니다 .. Sobel Operator

+5

-1 오류 메시지가 없으며 유용한 단서도없고 코드에 유용한 주석이 하나도 없습니다. –

+1

문제는 질문에 의문의 여지가없는 것 같습니다. –

+0

사실 그 질문은 "나를 도울 수 있겠 니?" 내 대답은 다음과 같습니다. "물론, 문제가 무엇입니까?" –

답변

1

당신은 각 채널에 대한 기울기를 계산하는 독립적 ; 출력물이 컬러가 아니기 때문에 정말로해야합니까? 또한 0..255 채널 값 입력이 주어지면 연산자의 출력은 -1020..1020이 될 것이므로 Sqrt로 크기를 가져 오기 전이나 후에 0..255로 다시 가져와야합니다 범위.

하지만 문제는 "최종 계산"출력이 반복되는 배열을 덮어 쓰는 것입니다 (즉, 필터가 이미 처리 된 값을 다시 처리하고 있음). 따라서 자체 배열에 넣습니다. 이것은 시원한 디더링 효과를주는 것입니다!

+0

미안하지만 "그 현재의 형식으로 합리적으로 대답 할 수 없다"는 질문을 잘 이해하지 못했습니다. –

관련 문제