Android openCV #6 - bilateral Filter 적용하기
아래내용은 제가 Gitbook으로 작성한 내용 입니다.
gitbook을 통해 바로 보실 수 도 있습니다!
그리고 포스팅 내용에 관한 문의는 언제든 환영입니다!!
https://jaehwanpark.gitbooks.io/opencv-android-study/content/bilateralfilter.html
bilateralFilter - openCV
필터에 대한 다른 분들의 설명 입니다.
양방향 필터 (bilateral Filter)는 선명도를 증가시키고, 노이즈를 감소시키는 비선형 필터이다. 양방향 필터는 두개의 가우시안 필터(Gaussian filter) 즉, 도메인 필터(domain filter) 및 레인지 필터(range filter)에 의해 동작한다.
경계를 보존하면서(edge preserving) 노이즈를 감소(noise smoothing reducing)시키는 필터, 보통 가우시안에 기초하며, 특징적인 점은 Weight가 위치뿐만 아니라 그 위치의 값에도 의존한다.
openCV 의 bilateralFilter 입니다.
void cv::bilateralFilter(
InputArray src,
OutputArray dst,
int d,
double sigmaColor,
double sigmaSpace,
int borderType = BORDER_DEFAULT
)
src: 입력영상
dst : 출력영상
d : 필터링에 이용하는 이웃한 픽셀의 지름을 정의, 불가능한 경우 sigmaSpace를 사용함.
sigmaColor : 컬러공간의 시그마공간 정의, 클수록 이웃한 픽셀과 기준색상의 영향이 커진다.
sigmaSpace : 시그마 필터를 조절한다, 값이 클수록 긴밀하게 주변 픽셀에 영향을 미친다. d > 0 이면 영향을 받지 않고, 그 이외에는 d 값에 비례한다.
코드
bilateralFilter(srcImage,destImage2,-1,sigmaColor,sigmaSpace);
bilateralFilter(srcImage,destImage2,3,sigmaColor,sigmaSpace);
수행결과설명
가장 왼쪽부터 Box Filter, GaussianBlur, bilateralFilter, bilateral Filter 입니다.
흑백 사진이라 명확하게 구분하기 어려울 수 있는데요, 일부분을 Crop해서 보면 경계선에 대한 선명도가 bilateralFilter가 더 선명한 것을 볼 수 있습니다.
아래는 사용한 코드 입니다.
JNIEXPORT jstring JNICALL
Java_com_tistory_technote_opencvandroid_MainActivity_convertNativeLibtoBoxFilter2(JNIEnv *env, jobject, jlong addrInput, jlong addrResult) {
Mat &img_input = *(Mat *) addrInput;
Mat &img_result = *(Mat *) addrResult;
cvtColor(img_input, img_result, CV_RGBA2GRAY);
jstring result;
std::stringstream buffer;
Mat srcImage = img_result;
int border = 3;
Size ksize (border*2+1,border*2+1);
Mat destImage2;
int d = ksize.width;
double sigmaColor =10.0;
double sigmaSpace = 10.0;
bilateralFilter(srcImage,destImage2,-1,sigmaColor,sigmaSpace);
img_result = destImage2.clone();
buffer << "Box Filter, d= -1, 7 x 7, bilateralFilter" << endl;
const char *cstr = buffer.str().c_str();
result = env->NewStringUTF(cstr);
return result;
}
'Programmer > openCV for Android' 카테고리의 다른 글
Android openCV #5 - BoxFilter 적용하기 (Filter 기본설명포함) (0) | 2017.04.16 |
---|---|
Android openCV #4 - 임계값 영상 구현하기 (Threshold Image) (0) | 2017.02.28 |
Android openCV #3 - 반전영상 구현하기(Negative Image) (2) | 2017.02.28 |
Android openCV #2 - android studio에서 JNI debugging log 출력 (0) | 2017.02.28 |
Android openCV #1 - Android Studio 에서 openCV 개발환경 세팅하기(링크) (0) | 2017.02.17 |
댓글