CVPR 2000
Xing Chen @ Stanford

주 내용
LED로 virtual calibration object를 만드는 것이 핵심.
우선 각각의 camera instrinsic은 Heikkila 97(조사해볼까?)로 calibrated.
LED feature를 가지고 SFM. 언급은 없지만 ICCV 재탕 논문처럼 50개 정도로 샘플링했을 듯.
SFM 결과를 global coordinates에 registration. 이제 initialization 완료.
calibrated cameras를 가지고 LED tracking (in 3D) with EKF.
LEF features를 가지고 Heikkila calibration. 두 공정을 반복.
비교를 위해 restricted setting 즉 모든 카메라가 한 공간을 바라보는 설정을 사용. Faro digitizing arm을 사용하여 3D 좌표를 아는 상태에서 reproj error를 계산.

감상
역시 CVPR인가? 1,2,3장은 읽지 않았지만, 재탕한 ICCV 논문에 비해 흠잡을 곳이 없는 완성도를 보여준다.

의문점
결과의 (root가 없는) mean square projection error는 단위가 pixel^2란 말인가?
비교 알고리즘이 무엇인지 언급이 없다. 이것도 Heikkila인가? 어쨌든 일반 physical target 알고리즘보다 성능이 좋다는 것은 이해하기 어려움.
ICCV 2003
James Davis, Xing Chen @ NVIDIA

주 내용
2000년도 CVPR논문에다 조금 더 realistic한 pan-tilt model만 갖다 붙인 논문인 듯.
식(2)는 다음에 써먹을 데가 있을 듯. I = C Tpan Rpan Tpan-1 Ttilt Rtilt Ttilt-1 X
결과는 reproj. error가 최대 18px^2 정도이니 4px 정도로 괜찮은 듯. 해상도는 언급이 없지만 640x480이라면 평균 0.5% 에러 정도 될 듯.
ACCV 2007
Ruigang Yang (Kentucky) 랩에서 나온 논문

주 내용
camera to calibrate: Nikon D70 with 300mm lens
스테레오를 위한 보조 DragonFly 2대 사용.
laser pointer를 평면에 비추고 (calibrated) stereo camera로 3D 좌표를 얻음.
3D-2D iterative minimization.
homography-based method와 비교.
결과는 좋지 않음.
calibration toolbox로 먼저 calibration을 수행한 다음, 제안 방법과 homography 기반 방법으로 refine하고 비교한다.
일단 calibration toolbox 결과가 매우 나쁨. repoj error가 18mm에서는 최대 70px, 300mm에서는 최대 2000px (D70 해상도가 3008x2000이라니 이건 한 화면을 다 벗어난 결과). 40 checkerboard patterns를 capture했다는데 설마 40개의 pan-tilt setting을 말하는 건 아니겠지?
300mm에서 제안방법으로 최대 120px라... homography 방법으로는 전혀 refine되지 않았음. 당연한 결과지만.
다른 논문과 다르게 simulated data가 없다. simulation이 가능한데도... 실험했더라도 param. error가 매우 컸을 듯.

기타
reprojection error를 비교할 때 mean과 variance를 따지는데 최대값이 더 중요한 거 아닐까? 특히나 reproj error는 parameter error와 무관하게 작게 나타날 수도 있는 거니까 말이야...
EUROCAST 2007
J. Isern Gonzalez 외
주 내용
f 대신 scale factors를 다룸.

방식 비교

1. McLauchlan - fixed params. scale factors and alignment offset angles only. variable state-dimension filter (VSDF)를 사용. iterative인 듯.

2. Agapito - AC from homographies between each image and reference image (the first one), linear와 iterative 모두 비교.

3. Seo - AC from homographies between each pair of views. skew and distortion known and fixed. minimum 4 images are necessary.

결론
optic center (= principal point인 듯) is the most sensible parameter.
McLauchlan is the most accurate, but intractable if the number of points goes up. 그보다 McLauchlan은 fixed parameters.
computational cost for Seo grows exponentially with the sequence length.
the results are comparable with those provided by a well-known manual calibration method (Batista).
there is no correspondence(?) between the parameter error and the global error (reprojection error인 듯). Agapito는 global error는 작지만 param error는 큰 듯.

TVCG 2006
Comport, Marchand, Pressigout, and Chaumette
2월 23, 24일 몫.
이것이 Total Immersion에서 사용하는 알고리즘인 것으로 보인다. 왜 진작 몰랐을까...
These software environments have been implemented in C++ under both Linux and Windows XP and are now part of the D’Fusion software proposed by the Total Immersion company.
주 내용
pose computation and camera displacement estimation are formulated in terms of a full scale nonlinear optimization: virtual visual servoing.
Iteratively reweighted least squares (IRLS) is a common method of applying the M-estimator?
어쨌든 일반적인 (closed-loop) control theory에 의해 tracking을 수행.
visual features: feature point에서 contour에 normal 방향으로 edge를 찾는데, spatiotemporal moving edges algorithm을 사용. 이 때 주변 점들도 이용하기 위해 7x7 mask로 convolution한다 (좀 안습).
 
정보
t-immersion은 ODE를 사용하는군.


Moving Edges algorithm에 관해 추가 (2010.7.19):

솔직히 지난 번 리뷰 때는 단순 컨볼루션이라는 점에서 약간 실망해서 이 부분을 간과한 나머지 이해하지 못한 채 넘어갔다 (이해하지 못한지도 모른채). 그러나 실험구현을 위해서 다시 리뷰한 지금에서야 제대로 이해하게 되었다 (진짜?).
전에는 본문에 언급된 convolution이 단순한 SAD나 SSD일 것으로 추측했었으나, 다음과 같은 근거로 말 그대로 convolution임을 알 수 있다 (즉 difference가 아닌 multiplication의 절대치 합).

1. 1도에 하나씩이라고 볼 때 360개가 아니라 180개의 마스크만 있는 점. SAD라면 360개가 필요할 것이다.

2. 마스크가 실수(예: -100)인 점. grey level은 -100에서 100으로 normalize하는 것으로 보인다.

이 경우 일반적인 에지의 경우 (예를 들면 grey value -30에서 50으로 변하는) 에지 포인트에서 컨볼루션이 최대값을 가질 것이다.
그러나 +20에서 +80으로 변하는 edge는 detect하지 못할 것이다. 이런 edge들은 포기해도 괜찮은 것일까? → 오해다. 기다려 달라...가 아니고, convolution 계산 시 절대값을 취해서 더하는 것으로 착각했다.
제시된 마스크로 모든 에지를 검출 가능하다.
그렇다면 gradient 방향이 반대인 경우는?
즉 그림 (c)의 마스크를 사용할 때, 위가 어둡고 아래가 밝은 수평 에지는 찾을 수 있을까?
그런 경우 컨볼루션 값은 (-)로 큰 값을 가질 것이다. 즉 convolution의 absolute value를 취하여 maximum이 되는 포인트를 선택하면 된다.

A flexible new technique for camera calibration

학술 2009. 2. 26. 15:00 Posted by 양고

MSR TR 1998
Zhengyou Zhang
그동안 실험과 잡일들 때문에 논문 보는 것이 뜸했다.
Zhang은 두 번 정도 본 것 같지만 pattern을 사용하면서 self-calibration에 가까운 점에서 추구하는 바에 공통점이 있다고 판단되어 다시 한 번 보게 되었다. 19일은 실험했고, 이건 20일 몫이다. 많이 밀렸네.. -_-;

주 내용
closed-form solution + nonlinear refinement이라는 기본 구조는 동일.
일반적인 회전 기반 self-calibration과 달리 model plane(Z=0)과 image 사이의 homography를 다루고 있다.
radial distortion은 단순히 nonlinear (L-M)에 k1, k2를 포함해서 구한다.
degenerate configuration은 pure trans. 즉 R1 = R2인 경우에 second homography (2nd image와 model plane 사이의 homography를 말하는 듯) does not provide additional constraints.

고민
8차원 H를 추정하기 위해 L-M이 필요한데, 그럴 바에야 처음부터 K 등을 한 번에 추정하는 것이 낫지 않나?
if R is known, one homography between the model plane and its image is enough? (seems to be degenerate at first glance)

2010.8.18 추가 - 식 (3),(4) 의 유도 외
[h1 h2 h3] = λA[r1 r2 t] 에서
h1 = Ar1, h2 = Ar2
회전행렬에서 r1과 r2는 orthonormal하다. 즉
r1' r2 = 0
(A"h1)' A"h2 = 0    ("는 inverse, '는 transpose로 봐주자)
h1'A'" A" h2 = 0    (3)
orthonormal이므로 r1'r1 = r2'r2 = 1, 즉
h1'A'"A"h1 =h2'A'"A"h2 = 1/λ²    (4)
let B = A'"A" (image of absolute conic), then
(3) becomes h1'Bh2 = 0
symmetric한 B의 6개의 원소들을 b로 놓고 h에 대해 정리하면 (7).
(3),(4)를 b로 표현한 것이 (8).
n개의 이미지에 대해서는 V(2nx6) b = 0
V는 homographies로부터 known이므로 b를(즉 B를) 구할 수 있다.
B에서 A를 구하는 방법은 Appendix B에 있는데, 단순히 B = λA'"A (마지막에 왜 그냥 A지?) 를 전개해서 구한 건지... 잘 모르겠다.

실제 구현을 위한 정리
1. H1~Hn을 구한다. Appendix A는 무시하고 그냥 cvFindHomography하면 될 것 같다.
2. n images에 대해 v11, v12, v22를 계산, V를 구성하자.
3. Vb = 0에서 SVD로 b를 구한다.
4. Appendix B를 참조하여 A를 구한다.
5. A가 구해지면 extrinsic r1, r2, r3, t를 구한다.
6. Q = [r1 r2 r3] = USV' 일 때 R = UV' 가 최적의 회전행렬이라고 한다 (Appendix C).

비애 
이 논문 처음 본 지 10년은 되는 것 같은데 이제서야 이해했다는 느낌이 든다. 
이것은 논문 겉핥기의 폐해 ㅜㅜ;

Levenberg-Marquardt tested!

학술 2009. 2. 19. 22:10 Posted by 양고
L-M을 이용한 실험 1차 완료. Lourakis의 구현을 이용하였다. 밤늦게까지 한 보람이 있는 하루이다. 사실 오늘 야근의 주목적은 구매서류 작성과 보고서 작성이었지만... ^^


초록색 원은 ground truth, 빨간 점은 points rendered with estimated parameters, 파란 점은 measurements with intermediate parameters. 의외로 수렴성과 속도가 괜찮아 보인다.

[2009.3.7 추가]
토요일에 나와서 디버그 성공...이라고 생각했지만, 실험하다보니 t에 에러가 발생하는 경우가 많다.
still t is not optimized quite often when zoom and rotation are combined.


dlevmar_der()
/*
* This function seeks the mx1 parameter vector p that best describes the nx1 measurements vector x.
* All computations are double precision.
* An analytic Jacobian is required. In case the latter is unavailable or expensive to compute,
* use dlevmar_dif() below.
*
* Returns the number of iterations (>=0) if successful, -1 if failed
*
*/

int dlevmar_der(
void (*func)(double *p, double *hx, int m, int n, void *adata), /* functional relation describing measurements.
                                                                 * A p \in R^m yields a \hat{x} \in  R^n
                                                                 */
void (*jacf)(double *p, double *j, int m, int n, void *adata),  /* function to evaluate the Jacobian \part x / \part p */
double *p,         /* I/O: initial parameter estimates. On output contains the estimated solution */
double *x,         /* I: measurement vector. NULL implies a zero vector */
int m,             /* I: parameter vector dimension (i.e. #unknowns) */
int n,             /* I: measurement vector dimension */
int itmax,         /* I: maximum number of iterations */
double opts[4],    /* I: minim. options [\tau, \epsilon1, \epsilon2, \epsilon3]. Respectively the scale factor for initial \mu,
                    * stopping thresholds for ||J^T e||_inf, ||Dp||_2 and ||e||_2. Set to NULL for defaults to be used
                    */
double info[LM_INFO_SZ],
                    /* O: information regarding the minimization. Set to NULL if don't care
                     * info[0]= ||e||_2 at initial p.
                     * info[1-4]=[ ||e||_2, ||J^T e||_inf,  ||Dp||_2, \mu/max[J^T J]_ii ], all computed at estimated p.
                     * info[5]= # iterations,
                     * info[6]=reason for terminating: 1 - stopped by small gradient J^T e
                     *                                 2 - stopped by small Dp
                     *                                 3 - stopped by itmax
                     *                                 4 - singular matrix. Restart from current p with increased \mu
                     *                                 5 - no further error reduction is possible. Restart with increased mu
                     *                                 6 - stopped by small ||e||_2
                     *                                 7 - stopped by invalid (i.e. NaN or Inf) "func" values; a user error
                     * info[7]= # function evaluations
                     * info[8]= # Jacobian evaluations
                     * info[9]= # linear systems solved, i.e. # attempts for reducing error
                     */
double *work,      /* I: pointer to working memory, allocated internally if NULL. If !=NULL, it is assumed to point to
                    * a memory chunk at least LM_DER_WORKSZ(m, n)*sizeof(double) bytes long
                    */
double *covar,     /* O: Covariance matrix corresponding to LS solution; Assumed to point to a mxm matrix.
                    * Set to NULL if not needed.
                    */
void *adata)       /* I: pointer to possibly needed additional data, passed uninterpreted to func & jacf.
                    * Set to NULL if not needed
                    */

dlevmar_dif()
/*
* Similar to dlevmar_der() except that the Jacobian is approximated internally with the aid of finite differences.
* Broyden's rank one updates are used to compute secant approximations to the Jacobian, effectively avoiding to call
* func several times for computing the finite difference approximations.
* If the analytic Jacobian is available, use dlevmar_der() above.
*
* Returns the number of iterations (>=0) if successful, -1 if failed
*
*/
int dlevmar_dif(
void (*func)(double *p, double *hx, int m, int n, void *adata), /* functional relation describing measurements.
                                                                 * A p \in R^m yields a \hat{x} \in  R^n
                                                                 */
double *p,         /* I/O: initial parameter estimates. On output contains the estimated solution */
double *x,         /* I: measurement vector. NULL implies a zero vector */
int m,             /* I: parameter vector dimension (i.e. #unknowns) */
int n,             /* I: measurement vector dimension */
int itmax,         /* I: maximum number of iterations */
double opts[5],    /* I: opts[0-4] = minim. options [\tau, \epsilon1, \epsilon2, \epsilon3, \delta]. Respectively the
                    * scale factor for initial \mu, stopping thresholds for ||J^T e||_inf, ||Dp||_2 and ||e||_2 and the
                    * step used in difference approximation to the Jacobian. If \delta<0, the Jacobian is approximated
                    * with central differences which are more accurate (but slower!) compared to the forward differences
                    * employed by default. Set to NULL for defaults to be used.
                    */
double info[LM_INFO_SZ],
                    /* O: information regarding the minimization. Set to NULL if don't care
                     * info[0]= ||e||_2 at initial p.
                     * info[1-4]=[ ||e||_2, ||J^T e||_inf,  ||Dp||_2, \mu/max[J^T J]_ii ], all computed at estimated p.
                     * info[5]= # iterations,
                     * info[6]=reason for terminating: 1 - stopped by small gradient J^T e
                     *                                 2 - stopped by small Dp
                     *                                 3 - stopped by itmax
                     *                                 4 - singular matrix. Restart from current p with increased \mu
                     *                                 5 - no further error reduction is possible. Restart with increased mu
                     *                                 6 - stopped by small ||e||_2
                     *                                 7 - stopped by invalid (i.e. NaN or Inf) "func" values; a user error
                     * info[7]= # function evaluations
                     * info[8]= # Jacobian evaluations
                     * info[9]= # linear systems solved, i.e. # attempts for reducing error
                     */
double *work,      /* I: working memory, allocated internally if NULL. If !=NULL, it is assumed to point to
                    * a memory chunk at least LM_DIF_WORKSZ(m, n)*sizeof(double) bytes long
                    */
double *covar,     /* O: Covariance matrix corresponding to LS solution; Assumed to point to a mxm matrix.
                    * Set to NULL if not needed.
                    */
void *adata)       /* I: pointer to possibly needed additional data, passed uninterpreted to func.
                    * Set to NULL if not needed
                    */









오늘의 연구 결과

학술 2009. 2. 16. 19:15 Posted by 양고






마지막 그림은 X Japan 앨범 자켓으로도 괜찮을 것 같다.

HCI 2009 계속

학술 2009. 2. 14. 21:05 Posted by 양고
보고서도 쓰고 '1日1讀' 계획도 계속할 겸 HCI 2009 논문 분석을 계속하고 있다. 그 동안의 밀린 분량을 만회하고 앞으로 읽을 분량도 미리 확보할 수 있을 것 같다. 한글인데다 수식으로 머리 안 싸매고 그냥 죽 훑어보면 되는 인문학적 논문들이 많기 때문에 아주 좋다. 사실 논문 두 편은 금요일 저녁 약속 장소인 양재로 가는 지하철 안에서 선 채로 읽었다 - 물론 제대로 읽진 못했지만. 
그런데 오늘 본 논문 세 편에서 모두 '~로서'(as a ~)를 '~로써(with the~?)'로 잘못 사용하고 있어서, 내가 모르는 사이에 맞춤법이 바뀌기라도 한 것인지 고민에 빠졌다. 한 두 명도 아니고 이렇게 일관되게 틀리면 내가 잘못 알고 있는 것이 아닌가 의심하게 된다.
어쨌거나, '하루에 논문 한 편 씩!'이라는 취지는 좋지만, 점점 논문 분석을 허술하게 하는 부작용이 나타나고 있는 것 같다.

"Social TV의 사용자 경험 디자인 요소 추출에 관한 연구" (2/13)
Extracting user experience design elements in social TV - focusing on case studies - 이정연, 이승원 (홍익대학교)
미국 Nielsen Media Research에 의하면 TV 쇼를 시청하면서 10대의 45%가 문자메시지를 통해 친구들과 의견을 교환하고 있다고 한다. 2004 Alcatel의 AmigoTV, 2006 Xerox PARC의 Social TV, TNO의 ConnecTV, Motorola의 Social TV 연구 등 사례를 분석하였다. 예측할 수 있듯이 스포츠에서 Social TV가 최대의 효과를 누릴 것이라고 한다. 지금까지의 Social TV의 연구 방향은 크게 PC의 SNS를 모방한 형태와, 가상 공간을 제시하는 방법, 그리고 오디오 채널을 이용하여 동시 시청 경험을 극대화하는 방법 등이다.
이와 같은 사례 분석을 통해 UX 디자인 요소를 추출하였는데, 커뮤니케이션 채털, co-viewing 경험, interaction 요소와 device, contents 선택과 개인화, 접근성과 사용성, UI 디자인, 가상 커뮤니티 등이 그것이다.

"IPTV 이용자 복지 증진을 위한 정책방안 연구" (2/16)
A study on the user welfare in the IPTV - 유세경, 김미선, 김숙 (이화여자대학교)
IPTV 이용자 복지 증진을 위한 정책방안을 정보 맞춤형 매체로서의 content 차원, 유료 매체로서 요금 차원, 새로운 디지털 매체 접근으로서 digital literacy 세 가지로 분류하여 제안함. IPTV법 제20조항 제1항 '콘텐츠 동등접근권'은 사업자간 자유주의 공정거래를 유도하고 배타적 거래행위를 규제함으로써 시청자의 이익을 실현하겠다는 기본취지에서 신설되었다고 하나 지상파 방송사와 PP, SO는 사업자간 자율계약을 보장하지 못한다는 측면을 골자로 반대의사를 표명하고 있다. 이러한 콘텐츠 동등접근권 이해관계자들의 논란은 주로 사업자 차원의 수익성과 효율성 논리로 논의되고 있을 뿐 실질적으로 이용자 차원의 이익 증대에 대해서는 간과되고 있다는 분석이다.
IPTV 사업자는 2006년 하나TV 서비스를 시초로 해서 2008년 9월 Broad&TV, MegaTV, myLGtv 3개사가 확정되었다. 3개 업체 모두 지상파 방송을 제공하기로 했지만 현재 실시간 서비스 중인 곳은 MegaTV 뿐인 것 같다. 세계적으로 IPTV가 가장 활성화된 지역은 유럽이며, Social TV에서와 마찬가지로 IPTV에서도 스포츠중계권 확보가 관건으로 보인다.

"Tensor 기반의 Multi-linear analysis를 이용한 active appearance model" (2/17)
Active appearance model using multi-linear analysis based on tensor - 조경식, 김용국 (세종대학교)
AAM은 얼굴 인식과 추적 등에서 좋은 성능을 보이고 있다. 그러나 AAM fitting 알고리즘은 일관되지 않은 조명이나 가림 등에 의해 실패할 가능성이 높은데, 본 연구에서는 PCA를 higher-order singular value decomposition으로 대체하여 이를 보완하였다. Yale face database를 사용하여 실험한 결과, 실시간 구현이 가능한 성능으로 robust한 결과를 얻었다.

"에지 예측을 기반으로 한 효율적인 영상 디블러링" (2/18)
Efficient image deblurring using edge prediction - 조성현, 이승용 (포항공과대학교)
한 장의 영상으로부터 모션 블러를 제거하는 기존의 방법들은 주로 total variation이나 natural image statsistics를 이용하였다. 본 연구에서는 bilateral filter와 shock filter, 그리고 image gradient의 조작을 통해 선명한 에지를 예측하고, 이를 통해 모션 블러를 추정한다. bilateral filter와 shock filter를 이용한 선명한 영상 예측 - blur kernerl 추정 - 영상 복원의 세 단계를 통해 blur된 영상을 복원한다.

ICPR 2000
Malis and Cipolla
나도 planar sturucture를 사용해야 할 것 같아서 보다가 토할 뻔함.
어쨌든 2월 12일 몫.

주 내용
it is based on the estimation of the collineations existing between several views of a plane.
even if the structure of the plane is unknown it must be the same for all the images and this provides some constraints which allow the recovering of the varying focal length.
the only prior geometric knowledge on the features that will be used here is their coplanarity. two views of a plane are related by a collineation. using multiple views of a plane we obtain a set of collineations which are not independent.
homography and collineation are generally used to indicate the same projective transformation from Pn to Pn (n=2). we will use the term 'homography' to indicate a collineation expressed in the Euclidean space.
...
the super-collineation matrix...
the super-homography matrix...
each independent homography will provide us two constraints on the parameters.
the total number of constraints which can be obtained from m images is 2(m-1)...
ground truth(by Faugeras-Toscani)를 확보하기 위해 calibration grid 이미지를 사용하였다 (10장).
principal point를 image center로 가정하고, focal lengths에 대해서만 푸는 것 같다.
zoom 없을 경우 +-1% 정도의 오차를, zooming할 경우 _+- 5% 정도의 오차를 보인다.
역시 Zhang을 다시 한 번 보는 게 나을 것 같다... ㅜㅜ