2013-10-27 7 views
0

시간 및 시간 검색 후, 나는 당신의 전문 기술에 의존하고 있습니다! 도와주세요!두 픽셀 사이의 "밝기 차이"

기본적으로 그레이 스케일 이미지의 개별 픽셀에서 데이터에 액세스하려고합니다.

여기에 내가 말하고있는 이미지에 대한 링크가 있습니다. - http://s14.postimg.org/ak092kza5/WORKS.jpg?noCache=1382913709 (모두 검은 색이어야합니다. 색상을 알아볼 수는 있지만 색상을 알아볼 수는 없습니다. 나는 소음을 제거 할 수있다!)

public static void handlesinglepixel(int x, int y, int pixel) { 
     int alpha = (pixel >> 24) & 0xff; 
     int red = (pixel >> 16) & 0xff; 
     int green = (pixel >> 8) & 0xff; 
     int blue = (pixel) & 0xff; 
     // Deal with the pixel as necessary... 
    } 

    public static void handlepixels(Image img, int x, int y, int w, int h) { 
     int[] pixels = new int[w * h]; 
     PixelGrabber pg = new PixelGrabber(img, x, y, w, h, pixels, 0, w); 
     try { 
      pg.grabPixels(); 
     } catch (InterruptedException e) { 
      System.err.println("interrupted waiting for pixels!"); 
      return; 
     } 
     if ((pg.getStatus() & ImageObserver.ABORT) != 0) { 
      System.err.println("image fetch aborted or errored"); 
      return; 
     } 
     for (int j = 0; j < h; j++) { 
      for (int i = 0; i < w; i++) { 
       handlesinglepixel(x + i, y + j, pixels[j * w + i]); 
      } 
     } 
    } 

그래서 이것을 사용하여 나는 개별 픽셀에 접근 할 수있다. 나는 정말로 행복하다! 하지만 ... 이제 인접 픽셀을 비교하여 다른 픽셀보다 비정상적으로 가벼운 지 확인하려고합니다. 나는 그림에서 잡음을 제거하기를 원하기 때문에 이것을하고있다. 어떤 충고?

P.S RescaleOp를 사용하여 모든 픽셀의 밝기 값을 변경하고 다시 곱 해봤지만 이미지를 인식 할 수 없게 만들었습니다. 나는 정말로 소음을 제거하는 방법에 관해서 붙이게된다!

귀하의 답변을 기다리겠습니다.

+0

1) 더 빨리 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 답변] (http://stackoverflow.com/a/19209651/418556)에 표시된 이미지에 핫 링크하는 것입니다. –

+0

@AndrewThompson 방금 이미지를 추가하려했는데 충분한 담당자가 없다고 말합니다 ... – BenjaminFranklin

+0

imageshack (또는 어디든지) 링크로 링크를 업로드하십시오. –

답변

2

이것은 제거하려는 노이즈의 유형에 따라 크게 달라집니다. 일부 인접 픽셀이 설정된 영역의 픽셀보다 훨씬 밝아지는 경우가 발생하면 일반적으로 간단한 커널을 사용하여 몇 가지 유형의 2D 필터링을 수행합니다.

소음 유형과 같은 일부 정보가 누락되었습니다. 그래서 나는 제한된 정보 만 가지고 최선을 다할 것입니다.

먼저 "너무 밝다"는 것은 무엇입니까? "너무 밝다"는 것만으로 강도가 인접한 픽셀보다 몇 표준 편차가 높습니까? 아니면 기본적으로 흑백 인 픽셀입니까?

후자의 경우 소금 후추/임펄스 노이즈 제거입니다.

기본적으로 3x3 공간 필터를 수행하고 모드 또는 중앙값을 선택하십시오. 보라, 더 이상 지나치게 밝은 픽셀. 그러나 이미지를 효과적으로 흐리게 처리하므로 적응 형 필터링을 사용하는 것이 좋습니다. 따라서 모든 픽셀을 수정하는 대신 주변 픽셀보다 밝을 경우에만 픽셀을 수정하면됩니다.

마지막으로 잠재적으로 극단적 인 아웃 라이어 (예 : 임펄스/소금 후추 노이즈)가 아닌 일부 통계 값에 따라 주변 픽셀보다 밝은 픽셀을 제거하기 만하면됩니다. 이 최종 접근 방식은 CPU 시간 측면에서 매우 비싸지 만 로컬 극한치를 처리 할 수 ​​있습니다. 의 nxn 필터 커널

  1. 즉 커널 겹쳐진 모든 화소의 평균/평균 휘도 값을 계산한다 : E (X)를. (예 : 각 픽셀을 N^2로 나눈 다음 오버플로를 방지하기 위해 합계)
  2. NxN 영역이 동일한 경우 표준 편차 E (X^2)를 계산합니다. (예 : 평균을 계산 한 다음 각 픽셀에 대해 (pixel_intensity - mean_value)의 절대 값을 계산 한 다음이를 모두 제곱합니다. 이러한 차이를 모두 합한 다음 N^2로 나눕니다.
  3. NxN의 모든 픽셀을 반복합니다. 단일 픽셀이 평균값을 벗어나는 2.5 표준 편차 이상이라면 고정 된 퍼센트로 강도를 감소시킵니다.당신이 적응 필터링 기법이 통계적 방법을 결합한다면

http://www.mathsisfun.com/data/standard-deviation.html

(예 : 픽셀이 아니라 맹목적으로 사용할 수있는 모든 픽셀을 수정하는 것보다, 수정해야 할 검출), 당신은 문제의 픽셀을 제거 할 수 있습니다 눈에 띄는 양만큼 전체 이미지 품질이 저하되지 않습니다.

마지막으로 이미지 처리와 관련하여 LaPlace 연산자를 살펴보아야합니다. 그것은 단순한 엣지 - 디텍터로서의 역할을하며, 올바른 방향으로 나아갈 수도 있습니다. 행운

http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm

좋은!

+0

시간을내어 작성해 주셔서 감사합니다. 나는이 참고 문헌을 정말 고맙게 생각하며, 이제는 그것들을 철저하게 읽도록하겠습니다. 소음은 그런데 이미지 위에 겹쳐있는 점선의 사각형 종이와 같습니다. 예제를 업로드하려고 시도했지만 그렇게하지 않았습니다! – BenjaminFranklin

+0

편집 할 때 이미지에 대한 링크를 삽입했습니다. 어떻게 생각해? '밝기'기술을 비교하기 위해 계속 가야합니까? 아니면 다른 길을 가야합니까? – BenjaminFranklin

+0

@ BenjaminFranklin 원래 질문에 대한 내 의견을 참조하십시오. 이게 나에게 보여주는 가면이나 샘플 이미지인가? 이 이미지의 의미가 무엇인지 알아 내려고 노력 중입니다. – DevNull

0

두 픽셀의 밝기를 비교하려는 경우 HSV color model을 사용하는 것이 좋습니다. 여기서 V는 값 (밝기, 기본적으로)을 나타냅니다. 비교적 간단한 알고리즘으로 RGB와 HSV 사이에 convert을 사용할 수 있습니다. 두 번째 링크에 따르면 java.awt.Color 패키지에 이미이 알고리즘이 내장되어 있습니다.

+0

이렇게하면 밝기에 따라 구분하기가 쉬워 지지만 특정 기준을 충족하는 픽셀을 차별하거나 필터링하는 방법을 결정하는 방법은 없습니다. – DevNull