U ① 분산; 산란(散亂), 이산.
② 〖물리·화학〗 분산; 〖광학〗 분산, 분광; 〖전자공학〗 산란, 산포[분산]도; 〖통계학〗 (평균값 따위와의) 편차; 〖군사〗 (폭탄 등의) 탄착 산포 패턴; 〖항공〗 디스퍼전(미사일 등의 예정로(路)에서의 편차); 〖의학〗 (염증 따위의) 소산(消散).
③ (the C-) 유대인의 이산(Diaspora).
by 쿠리다쿠리 2010. 4. 19. 01:12
① (수수께끼를 푸는) 실마리, (십자말풀이의) 열쇠, (조사·연구의) 단서.
② 이야기의 줄거리, 사색의 실마리.
③ (미궁에의) 길잡이.
④ (미국속어) 정보, 개인적인 의견. [cf.] clew.
♣get a ∼ (1) 실마리를 얻다; (미국구어) 실정을 잘 보다, 깨닫다, 꾀발라지다. (2) (미국속어) 이해되다, 알다.
♣not have a ∼ (구어) 어림이 안 잡히다, (구어) 무지[무능]하다.
 
†clue [kluː] vt. 
암시로 보여주다, (구어) ┅에게 단서를 주다, (미국속어) 털어놓다; =CLEW.
♣∼ a person in [up] (속어) 아무에게 단서를 주다, 알리다, 설명하다.
㉺∼less [-lis] ―a. 단서 없는; (구어) 어리석은, 무지한.
by 쿠리다쿠리 2010. 4. 19. 01:03

U,C (의견 따위의) 강요; 방해(한 일), (장소에의) 침입(into; to); 주제넘게 나섬, 〖법률〗 (무권리자의) 침입에 의한 토지 점유, (교회 소유지의) 점유횡령; 〖지질〗 (마그마의) 관입(貫入), 관입암(岩).
㉺∼al ―a. 
㉺∼ist ―n.
[관련어] intrude ―v.
by 쿠리다쿠리 2010. 4. 19. 01:00

직각적(直覺的)[직관적]인(능력); 직관적으로 얻은(지식·확신); 직관력이 있는(사람).
㉺∼ly ―ad.  
㉺∼ness ―n.
by 쿠리다쿠리 2010. 4. 18. 09:41

Origianl From : Wikipedia CORDIC

CORDIC은 "
for COordinate Rotation DIgital Computer"의 약자로 1959년 Jack E. Volder에 의해 처음 개발 되었고 HP의 John Stephen Walther가 일반화 하였다.
CORDIC은 hyperbolic, trigonometric function, Exponential, Logarithms, Multiplication, Division, Square Root 등 다양한 연산을 Bit-Shift, Addition의 단순한 구조로 구현 가능하도록 하는(멀티플라이어가 필요 없는) 하드웨어에 최적화 된 알고리즘 이다.
(단 반복적인 Iteration이 요구되어 Polynomial 연산법 등에 비해 속도는 저하 될 수 있다.)

원래 CORDIC은 이진수 체계를 가지는 시스템에서 적용하기 위해 개발되었으나 1970년대에는 10진(decimal) CORDIC이 포켓 계산기에서 광범위하게 사용되기 시작하였다.(대부분  BCD코드 사용)

동작방식

CORDIC can be used to calculate a number of different functions. This explanation shows how to use CORDIC in rotation mode to calculate sine and cosine of an angle, and assumes the desired angle is given in radians and represented in a fixed point format. To determine the sine or cosine for an angle β, the y or x coordinate of a point on the unit circle corresponding to the desired angle must be found. Using CORDIC, we would start with the vector v0:

 v_0 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}

In the first iteration, this vector would be rotated 45° counterclockwise to get the vector v1. Successive iterations will rotate the vector in one or the other direction by size decreasing steps, until the desired angle has been achieved. Step i size is Artg(1/(2(i-1))) where i 1,2,3,….

An illustration of the CORDIC algorithm in progress.

More formally, every iteration calculates a rotation, which is performed by multiplying the vector vi − 1 with the rotation matrix Ri:

 v_{i} = R_{i}v_{i-1}\

The rotation matrix R is given by:

 R_{i} = \left( \begin{array}{rr} \cos \gamma_{i} & -\sin \gamma_{i} \\ \sin \gamma_{i} & \cos \gamma _{i}\end{array} \right)

Using the following two trigonometric identities

\begin{align} \cos \alpha & = & {1 \over \sqrt{1 + \tan^2 \alpha}} \\ \sin \alpha & = & {{\tan \alpha} \over \sqrt{1 + \tan^2 \alpha}} \end{align}

the rotation matrix becomes:

 R_{i} = {1 \over \sqrt{1 + \tan^2 \gamma_{i}}} \begin{pmatrix} 1 & -\tan \gamma_{i} \\ \tan \gamma_{i} & 1 \end{pmatrix}

The expression for the rotated vector vi = Rivi − 1 then becomes:

 v_{i} = {1 \over \sqrt{1 + \tan^2 \gamma_{i}}} \begin{pmatrix} x_{i-1} &-& y_{i-1} \tan \gamma_{i} \\ x_{i-1} \tan \gamma_{i} &+& y_{i-1} \end{pmatrix}

where xi − 1 and yi − 1 are the components of vi − 1. Restricting the angles γi so that tanγi takes on the values  \pm 2^{-i} the multiplication with the tangent can be replaced by a division by a power of two, which is efficiently done in digital computer hardware using a bit shift. The expression then becomes:

 v_{i} = K_{i}\begin{pmatrix} x_{i-1} &-& \sigma_{i} 2^{-i} y_{i-1} \\ \sigma_{i} 2^{-i} x_{i-1} &+& y_{i-1} \end{pmatrix}

where

 K_i = {1 \over \sqrt{1 + 2^{-2i}}}

and σi can have the values of −1 or 1 and is used to determine the direction of the rotation: if the angle βi is positive then σi is 1, otherwise it is −1.

We can ignore Ki in the iterative process and then apply it afterward by a scaling factor:

 K(n) = \prod_{i=0}^{n-1} K_i  = \prod_{i=0}^{n-1} 1/\sqrt{1 + 2^{-2i}}

which is calculated in advance and stored in a table, or as a single constant if the number of iterations is fixed. This correction could also be made in advance, by scaling v0 and hence saving a multiplication. Additionally it can be noted that

 K = \lim_{n \to \infty}K(n) \approx 0.6072529350088812561694 [3]

to allow further reduction of the algorithm's complexity. After a sufficient number of iterations, the vector's angle will be close to the wanted angle β. For most ordinary purposes, 40 iterations (n = 40) is sufficient to obtain the correct result to the 10th decimal place.

The only task left is to determine if the rotation should be clockwise or counterclockwise at every iteration (choosing the value of σ). This is done by keeping track of how much we rotated at every iteration and subtracting that from the wanted angle, and then checking if βn + 1 is positive and we need to rotate clockwise or if it is negative we must rotate counterclockwise in order to get closer to the wanted angle β.

 \beta_{i} = \beta_{i-1} - \sigma_i \gamma_i. \quad \gamma_i = \arctan 2^{-i},

The values of γn must also be precomputed and stored. But for small angles, arctan(γn) = γn in fixed point representation, reducing table size.

As can be seen in the illustration above, the sine of the angle β is the y coordinate of the final vector vn, while the x coordinate is the cosine value.

소프트웨어 구현 :
The following is a MATLAB/GNU Octave implementation of CORDIC that does not rely on any transcendental functions except in the precomputation of tables. If the number of iterations n is predetermined, then the second table can be replaced by a single constant. The two-by-two matrix multiplication represents a pair of simple shifts and adds. With MATLAB's standard double-precision arithmetic and "format long" printout, the results increase in accuracy for n up to about 48.

function v = cordic(beta,n)
% This function computes v = [cos(beta), sin(beta)] (beta in radians)
% using n iterations. Increasing n will increase the precision.

if beta < -pi/2 || beta > pi/2
    if beta < 0
        v = cordic(beta + pi, n);
    else
        v = cordic(beta - pi, n);
    end
    v = -v; % flip the sign for second or third quadrant
    return
end

% Initialization of tables of constants used by CORDIC
% need a table of arctangents of negative powers of two, in radians:
% angles = atan(2.^-(0:27));
angles =  [  ...
    0.78539816339745   0.46364760900081   0.24497866312686   0.12435499454676 ...
    0.06241880999596   0.03123983343027   0.01562372862048   0.00781234106010 ...
    0.00390623013197   0.00195312251648   0.00097656218956   0.00048828121119 ...
    0.00024414062015   0.00012207031189   0.00006103515617   0.00003051757812 ...
    0.00001525878906   0.00000762939453   0.00000381469727   0.00000190734863 ...
    0.00000095367432   0.00000047683716   0.00000023841858   0.00000011920929 ...
    0.00000005960464   0.00000002980232   0.00000001490116   0.00000000745058 ];
% and a table of products of reciprocal lengths of vectors [1, 2^-j]:
Kvalues = [ ...
    0.70710678118655   0.63245553203368   0.61357199107790   0.60883391251775 ...
    0.60764825625617   0.60735177014130   0.60727764409353   0.60725911229889 ...
    0.60725447933256   0.60725332108988   0.60725303152913   0.60725295913894 ...
    0.60725294104140   0.60725293651701   0.60725293538591   0.60725293510314 ...
    0.60725293503245   0.60725293501477   0.60725293501035   0.60725293500925 ...
    0.60725293500897   0.60725293500890   0.60725293500889   0.60725293500888 ];
Kn = Kvalues(min(n, length(Kvalues)));

% Initialize loop variables:
v = [1;0]; % start with 2-vector cosine and sine of zero
poweroftwo = 1;
angle = angles(1);

% Iterations
for j = 0:n-1;
    if beta < 0
        sigma = -1;
    else
        sigma = 1;
    end
    factor = sigma * poweroftwo;
    R = [1, -factor; factor, 1];
    v = R * v; % 2-by-2 matrix multiply
    beta = beta - sigma * angle; % update the remaining angle
    poweroftwo = poweroftwo / 2;
    % update the angle from table, or eventually by just dividing by two
    if j+2 > length(angles)
        angle = angle / 2;
    else
        angle = angles(j+2);
    end
end

% Adjust length of output vector to be [cos(beta), sin(beta)]:
v = v * Kn;
return
by 쿠리다쿠리 2010. 3. 24. 21:47

오래되서 ...헷갈리네....^^;;

각 C가 직각인 삼각형 ABC에서, 각 A, B, C와 마주보는 변의 길이를 a,b,h라고 할 때, 사인(sine), 코사인(cosine), 탄젠트(tangent)의 정의는 다음과 같다.

사인: \sin A = \frac{a}{h}   코사인: \cos A = \frac{b}{h}    탄젠트: \tan A = \frac{a}{b}

by 쿠리다쿠리 2010. 3. 24. 21:12
출처 : http://mwultong.blogspot.com/2008/02/trigonometric-function-calc.html
레몬향기혜성님의 블로그에 포스팅된 브라우저에서 직접 사용할 수 있는, "삼각함수 계산기"입니다.

사용방법:
각도 x 를 입력해 주면 x 에 해당하는 삼각함수의 값이 출력됩니다. 도(°)나 라디안(rad) 단위를 선택할 수 있습니다. 아래 색깔 있는 입력 칸에서 원하는 입력 단위에 숫자를 입력하면 자동으로 "도"나 라디안으로 변환됩니다.


x 입력 (도°)       : Degree
x 입력 (라디안 rad) : Radian



sin(x) =
cos(x) =
tan(x) =

csc(x) =
sec(x) =
cot(x) =


삼각함수의 결과값이 무한대에 가까워지거나, "0으로 나누기 에러"가 나면, ComplexInfinity 라는 값이 출력됩니다.

한편, 온라인 계산기는 브라우저 상태에 따라 불안정할 수 있으므로, 사용하기 전에 테스트를 해 보는 것이 좋습니다.

* x 가 90도일 때, sin 이 1 로 나오면 정상입니다.

* x 가 1라디안일 때, sin 이 0.841470984807897 로 나오면 정상입니다.

by 쿠리다쿠리 2010. 3. 24. 15:50

부동소수점 데이터는 꼴로 표현된다. (음수일 경우와 0일 경우는 무시했다.)
여기서 두 가지 경우로 나누어보자.

첫번째 n=2k 인 경우
가 된다.

두번째 n=2k+1 인 경우
가 된다.
http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=%5Csqrt%7B2%7D는 상수이므로, 컴파일 타임에 결정되므로 크게 상관하지 않아도 좋다.
여기서 중요한것은 실질적으로 우리가 계산해야할 값은 http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=%5Csqrt%7B%5Calpha%7D라는 것이다.
k는 n을 2로 나눈값이므로 시프트 연산만으로 구현할 수 있기 때문이다.

http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=%5Csqrt%7B%5Calpha%7D를 어떻게 구할까?
이를 예견한것인지는 몰라도 뛰어난 수학자들이 몇 세기전에 좋은 해결방법을 만들어 놓았다.
그 이름은 바로 테일러 급수.

http://www.sitmo.com/gg/latex/latex2png.2.php?z=150&eq=%5Csqrt%7B1%20%2B%20x%7D%20%3D%201%20%2B%20%5Ctextstyle%20%5Cfrac%7B1%7D%7B2%7Dx%20-%20%5Cfrac%7B1%7D%7B8%7Dx%5E2%20%2B%20%5Cfrac%7B1%7D%7B16%7D%20x%5E3%20-%20%5Cfrac%7B5%7D%7B128%7D%20x%5E4%20%2B%20%5Cdots%5C!
단 ( |x| < 1 이어야한다.)
자세한 것은 위키백과 테일러 급수 참조

http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=%5Calpha%3D1%2Bx라고 하면 http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=0%5Cle%20x%3C1가 된다.
따라서 위 테일러 전개식의 수렴조건도 만족한다. 적당한 부분까지 테일러 전개식에 대입하여 http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=%5Csqrt%7B%5Calpha%7D를 구해내면된다.
게다가 부동소수점 데이터의 특성상 곧바로 x값을 구할수 있다.

더보기


그리고 위 식을
http://www.sitmo.com/gg/latex/latex2png.2.php?z=100&eq=1%2B%5Cfrac%7B1%7D%7B2%7Dx(1-%5Cfrac%7B1%7D%7B4%7Dx(1-%5Cfrac%7B1%7D%7B2%7Dx(1-%5Cfrac%7B5%7D%7B8%7Dx(%5Cldots))))
이렇게 묶어내면 연산횟수를 줄일 수 있다.

이 정도면 꽤 최적화된 제곱근 계산하는 함수를 구현할수 있을것이다
by 쿠리다쿠리 2010. 3. 23. 19:12

From Wikipedia:
이미지 Gradient를 계산하기 위한 방법은 Sobel, Canny등과 같은 다양한 Edge Filter를 이용하는 방법도 있을 수 있으나,
가장 간단한 방법은 다음과 같이 주변 Pixel간의 차이값을 이용하는 방법이다.

L_x(x, y)=-1/2\cdot L(x-1, y) + 0 \cdot L(x, y) + 1/2 \cdot L(x+1, y).\,
L_y(x, y)=-1/2\cdot L(x, y-1) + 0 \cdot L(x, y) + 1/2 \cdot L(x, y+1).\,

위의 수식을 입력 이미지에 대한 Filter mask(Matrix)형태로 표시하면 다음과 같다.


L_x = \begin{bmatrix} 
-1/2 & 0 & 1/2 
\end{bmatrix} * L
\quad \mbox{and} \quad 
L_y = \begin{bmatrix} 
+1/2 \\
0 \\
-1/2
\end{bmatrix} * L

가중치값 1/2은 경우에 따라 달라질 수 있으며 HOG 연산에는
Lx(x,y) = -L(x-1, y)+0*L(x,y)+L(x+1, y)
Ly(x,y) = -L(x, y-1)+0*L(x,y)+L(x, y_1)을 적용한다
이를 Filter mask(Matrix)형태로 표시하면 [-1, 0, 1]과 같다.


by 쿠리다쿠리 2010. 3. 23. 16:20

From Wikipedia atan2(x)
삼각법에서 atan2는 아크탄젠트함수에 대한 2 argument를 가지는 변형함수로 positive x축에서 좌표 (x, y)까지의 각도를 라디안(radian)으로 반환한다.
 atan2함수는 컴퓨터 프로그래밍 언어에서 처음 도입되었으나 현재는 과학, 엔지니어링 분야에서 일반적으로 사용되고 있다.
atan2(x, y)함수는 다음과 같은 조건으로 atan함수로 표현될 수 있다.

\operatorname{atan2}(y, x) = \begin{cases}
\arctan(\frac y x) & \qquad x > 0 \\
\pi + \arctan(\frac y x) & \qquad y \ge 0 , x < 0 \\
-\pi + \arctan(\frac y x) & \qquad y < 0 , x < 0 \\
\frac{\pi}{2} & \qquad y > 0 , x = 0 \\
-\frac{\pi}{2} & \qquad y < 0 , x = 0 \\
\text{undefined} & \qquad y = 0, x = 0
\end{cases}

Notes:

  • This produces results in the range (-π,π], which can be mapped to [0,2π) by adding 2π to negative values.
  • Traditionally, atan2(0,0) is undefined.
    • The C function, and most other computer implementations, are designed to reduce the effort of transforming cartesian to polar coordinates and so always define atan2(0,0). On implementations without signed zero, or when given positive zero arguments, it is normally defined as 0. It will always return a value in the range [-π,π] rather than raising an error or returning a NaN (Not a Number).
    • Systems supporting symbolic mathematics normally return an undefined value for atan2(0,0) or otherwise signal that an abnormal condition has arisen.
  • For systems, for example IEEE floating point, implementing signed zero, infinities, or Not a Number it is usual to implement reasonable extensions which may extend the range of values produced to include -π and -0. These also may return NaN or raise an exception when given a NaN argument.
by 쿠리다쿠리 2010. 3. 23. 16:05