2012-03-04 2 views
0

나는이 알고리즘을 사용하여 andriod에서 이미지를 필터링하고 있습니다. 나는이 작업을 수행 할 수있는 다른 방법을 찾을 수있는필터 이미지 android?

http://xjaphx.wordpress.com/2011/06/22/image-processing-convolution-matrix/

는 그러나 이미지가 예상되지 않는 한. 당신은 응용 프로그램이 이미 이것을하고, 빨리 만들어내는 것을 보았습니다,이 알고리즘은 너무 느립니다.

관련

답변

-2

나는 당신이 SD 카드에서를 가져 오는 경우 확장자

class FileExtensionFilter implements FilenameFilter { 
     public boolean accept(File dir, String name) { 
      return (name.endsWith(".png") || name.endsWith(".PNG")); 
     } 

에 따라 이미지를 필터링이 .I이 코드를 가지고에 대해 알려이 공식을 사용하고 있습니다.

+0

이 질문은 파일 확장명으로 필터링하지 않는 그래픽 필터링과 관련이 있습니다. – stealthcopter

2

최근에 시도한 코드의 빠른 버전이 게시되었으므로 시도해보십시오.

그런데 문장이 무엇을 의미합니까? 이미지가 예상대로 맞지 않습니다.? 어쩌면 당신은 단지 잘못된 매트릭스를 사용하고있을 것입니다; 당신은 매트릭스 예제 here을 찾을 수 있습니다.

다음은 요청한 샘플입니다. 픽셀 색상을 스케일/오프셋 할 필요가없는 경우 이러한 매개 변수와 관련 불필요한 계산없이 convolute의 다른 구현을 추가해야합니다.

class Convolution { 

    private static Bitmap convolute(Bitmap bmp, Matrix mat, float factor, int offset) { 
    /* ... */ 
    } 

    private static Matrix getEdgeEnhanceMatrix() { 
     Matrix m = new Matrix(); 
     m.setValues(new float[] { 
       0, 0, 0, 
       -1, 1, 0, 
       0, 0, 0 
     }); 
     return m; 
    } 

    // the simple way 
    public static Bitmap edgeEnhance1(Bitmap bmp) { 
     return convolute(bmp, getEdgeEnhanceMatrix(), 1f, 0); 
    } 

    // if you want to apply filter to border pixels 
    // warning: really memory consuming 
    public static Bitmap edgeEnhance2(Bitmap bmp, int bgColor) { 
     // create a bigger canvas 
     Bitmap bigger = Bitmap.createBitmap(bmp.getWidth() + 2, bmp.getHeight() + 2, bmp.getConfig()); 
     Canvas cBigger = new Canvas(bigger); 
     // paint background 
     cBigger.drawColor(bgColor); 
     // draw the bmp you want to manipulate from (1,1) 
     cBigger.drawBitmap(bmp, 1, 1, null); 
     // compute convolution 
     bigger = convolute(bigger, getEdgeEnhanceMatrix(), 1f, 0); 

     // create the result and project the convolution at (-1,-1) 
     Bitmap rt = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig()); 
     Canvas cRt = new Canvas(rt); 
     cRt.drawBitmap(bigger, -1, -1, null); 

     return rt; 
    } 
} 
+0

답장을 보내 주셔서 감사합니다. 배열을 적용하면 몇 픽셀 떨어진 곳에 이미지가 표시됩니다. 나는 당신의 코드를 시도 할 것이다. – tebitoq

+0

당신이주의해야할 것은 픽셀 변형은 픽셀을 변형 시키려면 주변 픽셀 8 개가 필요하기 때문에 이미지 주위에 한 픽셀 너비의 사각형을 "느슨하게"만들 것입니다. 또는 어쨌든 원본 픽셀을 복제하면 내가하는 것처럼, 그것들은 변형되지 않을 것이다. – ubik

+0

그래서 행렬을 생성해야합니까? \t \t 플로트 SRC [] = {0,0,0, \t \t \t \t \t -1, -1,0 \t \t \t \t \t, 0,0,0}; \t \t 매트릭스 mx = new 매트릭스(); \t \t mx.setValues ​​(src); – tebitoq