나는이 알고리즘을 사용하여 andriod에서 이미지를 필터링하고 있습니다. 나는이 작업을 수행 할 수있는 다른 방법을 찾을 수있는필터 이미지 android?
http://xjaphx.wordpress.com/2011/06/22/image-processing-convolution-matrix/
는 그러나 이미지가 예상되지 않는 한. 당신은 응용 프로그램이 이미 이것을하고, 빨리 만들어내는 것을 보았습니다,이 알고리즘은 너무 느립니다.
관련
나는이 알고리즘을 사용하여 andriod에서 이미지를 필터링하고 있습니다. 나는이 작업을 수행 할 수있는 다른 방법을 찾을 수있는필터 이미지 android?
http://xjaphx.wordpress.com/2011/06/22/image-processing-convolution-matrix/
는 그러나 이미지가 예상되지 않는 한. 당신은 응용 프로그램이 이미 이것을하고, 빨리 만들어내는 것을 보았습니다,이 알고리즘은 너무 느립니다.
관련
나는 당신이 SD 카드에서를 가져 오는 경우 확장자
class FileExtensionFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return (name.endsWith(".png") || name.endsWith(".PNG"));
}
에 따라 이미지를 필터링이 .I이 코드를 가지고에 대해 알려이 공식을 사용하고 있습니다.
최근에 시도한 코드의 빠른 버전이 게시되었으므로 시도해보십시오.
그런데 문장이 무엇을 의미합니까? 이미지가 예상대로 맞지 않습니다.? 어쩌면 당신은 단지 잘못된 매트릭스를 사용하고있을 것입니다; 당신은 매트릭스 예제 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;
}
}
답장을 보내 주셔서 감사합니다. 배열을 적용하면 몇 픽셀 떨어진 곳에 이미지가 표시됩니다. 나는 당신의 코드를 시도 할 것이다. – tebitoq
당신이주의해야할 것은 픽셀 변형은 픽셀을 변형 시키려면 주변 픽셀 8 개가 필요하기 때문에 이미지 주위에 한 픽셀 너비의 사각형을 "느슨하게"만들 것입니다. 또는 어쨌든 원본 픽셀을 복제하면 내가하는 것처럼, 그것들은 변형되지 않을 것이다. – ubik
그래서 행렬을 생성해야합니까? \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
이 질문은 파일 확장명으로 필터링하지 않는 그래픽 필터링과 관련이 있습니다. – stealthcopter