Matlab 의 del2 함수 분석 및 C 코드로 변환
Study/Image Processing 2005. 6. 1. 01:55 |Matlab 의 gradient 함수와 del2 함수에 대한 분석 및 C 코드 변환은 GVF 의 Matlab 코드를 분석하는 과정에서 이루어졌다. GVF란 Gradient Vector Flow 의 약자로써, http://iacl.ece.jhu.edu/projects/gvf/ 에서 자세한 정보를 얻을 수 있다.
---------------------------------------------------------------------------------------
Matlab의 del2 는 Laplacian 연산을 의미한다.
>> help del2
DEL2 Discrete Laplacian.
L = DEL2(U), when U is a matrix, is a discrete approximation of
0.25*del^2 u = (d^2u/dx^2 + d^2/dy^2)/4. The matrix L is the same
size as U, with each element equal to the difference between an
element of U and the average of its four neighbors.
L = DEL2(U), when U is an N-D array, returns an approximation of
(del^2 u)/2/n, where n is ndims(u).
아래 코드 분석을 보자. 몇몇 설명은 아래 gradient 관련 글을 참고하기 바란다.
이 코드를 C/C++로 변환하면 다음과 같이 하면 될 듯 싶다. ^^;
---------------------------------------------------------------------------------------
Matlab의 del2 는 Laplacian 연산을 의미한다.
>> help del2
DEL2 Discrete Laplacian.
L = DEL2(U), when U is a matrix, is a discrete approximation of
0.25*del^2 u = (d^2u/dx^2 + d^2/dy^2)/4. The matrix L is the same
size as U, with each element equal to the difference between an
element of U and the average of its four neighbors.
L = DEL2(U), when U is an N-D array, returns an approximation of
(del^2 u)/2/n, where n is ndims(u).
아래 코드 분석을 보자. 몇몇 설명은 아래 gradient 관련 글을 참고하기 바란다.
이 코드를 C/C++로 변환하면 다음과 같이 하면 될 듯 싶다. ^^;
void IEGvf::GvfLaplacian(IEFloatImage& img, IEFloatImage& lap) { register int i, j; int w = img.GetWidth(); int h = img.GetHeight(); lap.SetPixels(0); float** pimg = img.GetPixels2D(); float** plap = lap.GetPixels2D(); // x 방향 for( j = 0 ; j < h ; j++ ) { plap[j][0] = pimg[j][1]*2 - pimg[j][2]; plap[j][w-1] = pimg[j][w-2]*2 - pimg[j][w-3]; } for( j = 0 ; j < h ; j++ ) for( i = 1 ; i < w-1 ; i++ ) { plap[j][i] = ((pimg[j][i+1] - pimg[j][i]) - (pimg[j][i] - pimg[j][i-1]))/2; } // y 방향 for( i = 0 ; i < w ; i++ ) { plap[0][i] += pimg[1][i]*2 - pimg[2][i]; plap[h-1][i] += pimg[h-2][i]*2 - pimg[h-3][i]; } for( j = 1 ; j < h-1 ; j++ ) for( i = 0 ; i < w ; i++ ) { plap[j][i] += ((pimg[j+1][i] - pimg[j][i]) - (pimg[j][i] - pimg[j-1][i]))/2; } for( j = 0 ; j < h ; j++ ) for( i = 0 ; i < w ; i++ ) { plap[j][i] /= 2; } }
'Study > Image Processing' 카테고리의 다른 글
PCA에서 고유값(eigenvalue)과 데이터 분산(variance)의 관계 (2) | 2005.08.09 |
---|---|
GVF (Gradient Vector Flow) 코드 구현에 관하여... (2) | 2005.06.01 |
Matlab 의 gradient 함수 분석 및 C 코드로 변환 (0) | 2005.06.01 |
Standard Images - 자주 사용되는 이미지들 (0) | 2005.05.11 |
RGB 트루칼라를 grayscale 로 변환하는 방법 (0) | 2005.05.02 |