From f618466c25d43f3bae9e40920273bf77de1e1149 Mon Sep 17 00:00:00 2001 From: leochanj105 Date: Mon, 19 Oct 2020 23:09:30 -0400 Subject: initial sd-vbs initial sd-vbs add sd-vbs sd-vbs --- SD-VBS/common/toolbox/toolbox_basic/affine/README | 5 + .../common/toolbox/toolbox_basic/affine/carve_it.m | 25 +++++ .../toolbox/toolbox_basic/affine/compute_AD.m | 90 ++++++++++++++++++ .../toolbox/toolbox_basic/affine/compute_AD_disp.m | 103 +++++++++++++++++++++ .../toolbox/toolbox_basic/affine/compute_J.m | 31 +++++++ .../common/toolbox/toolbox_basic/affine/find_AD.m | 82 ++++++++++++++++ .../common/toolbox/toolbox_basic/affine/find_D.m | 65 +++++++++++++ .../toolbox/toolbox_basic/affine/find_center.m | 4 + .../toolbox/toolbox_basic/affine/gen_feature_s.m | 17 ++++ SD-VBS/common/toolbox/toolbox_basic/affine/grad.m | 24 +++++ .../toolbox/toolbox_basic/affine/hemisphere_s.m | 27 ++++++ SD-VBS/common/toolbox/toolbox_basic/affine/im.m | 3 + .../common/toolbox/toolbox_basic/affine/iter_AD.m | 26 ++++++ .../toolbox/toolbox_basic/affine/m_interp4.m | 49 ++++++++++ .../toolbox/toolbox_basic/affine/norm_inten.m | 11 +++ .../common/toolbox/toolbox_basic/affine/pan.0.pgm | 53 +++++++++++ .../common/toolbox/toolbox_basic/affine/pan.1.pgm | 59 ++++++++++++ .../common/toolbox/toolbox_basic/affine/readpgm.m | 26 ++++++ .../toolbox/toolbox_basic/affine/simulation.m | 42 +++++++++ .../toolbox_basic/affine/sports1_11_28.jpeg | Bin 0 -> 23655 bytes .../toolbox/toolbox_basic/affine/test_affine.m | 33 +++++++ 21 files changed, 775 insertions(+) create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/README create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/grad.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/im.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg create mode 100755 SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m (limited to 'SD-VBS/common/toolbox/toolbox_basic/affine') diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/README b/SD-VBS/common/toolbox/toolbox_basic/affine/README new file mode 100755 index 0000000..e578a74 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/README @@ -0,0 +1,5 @@ +Top level program is "compute_AD.m". Use "compute_AD_disp.m" if one +wants to display results as program runs. + +The testing programs are called "simulation.m" for synthetic images, +and "test_affine.m" for real images. diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m b/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m new file mode 100755 index 0000000..1a44f89 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/carve_it.m @@ -0,0 +1,25 @@ +function img = carve_it(I,center,window_size_h) + +[size_y,size_x]= size(I); +min_x = round(center(1)-window_size_h(1)); +max_x = round(center(1)+window_size_h(1)); +min_y = round(center(2)-window_size_h(2)); +max_y = round(center(2)+window_size_h(2)); +window_size = window_size_h*2 +1; + +if (min_x <1)|(max_x > size_x)|(min_y<1)|(max_y>size_y), + disp('window too big'); + center + window_size_h + img = zeros(window_size(2),window_size(1)); + n_min_x = max(1,round(min_x)); + n_min_y = max(1,round(min_y)); + n_max_x = min(size_x,round(max_x)); + n_max_y = min(size_y,round(max_y)); + img(1+(n_min_y-min_y):window_size(2)-(max_y-n_max_y),1+(n_min_x-min_x):window_size(1)-(max_x-n_max_x))=I(n_min_y:n_max_y,n_min_x:n_max_x); +else + img = I(center(2)-window_size_h(2):center(2)+window_size_h(2),... + center(1)-window_size_h(1):center(1)+window_size_h(1)); +end + + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m new file mode 100755 index 0000000..a39acd6 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD.m @@ -0,0 +1,90 @@ +function [A,D,mask] =... +compute_AD(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,num_trans,Dest,mask) +% +% function [A,D,mask] = ... +% compute_AD(img_i,img_j,center_i,center_j,window_size_h,num_iter,w, +% mask,num_trans) +% +% A: Affine motion; +% D: Displacement; +% +% img_i, img_j: the two image(in full size); +% center_i, center_j: the centers of the feature in two images; +% window_size_h: half size of the feature window; +% num_iter: number of iterations; +% w: parameter used in "grad.m" for computing gaussians used for +% gradient estimation; +% +% num_trans: OPTIONAL, number of translation iteration; default = 3; +% mask: OPTIONAL, if some area of the square shaped feature window should +% be weighted less; +% + +% +% Jianbo Shi +% + +if ~exist('Dest'), + Dest = [0,0]; +end + +if ~exist('mask'), + mask = ones(2*window_size_h+1)'; +end + +% set the default num_trans +if ~exist('num_trans'), + num_trans= 3; +end + +% normalize image intensity to the range of 0.0-1.0 +img_i = norm_inten(img_i); +img_j = norm_inten(img_j); + +window_size = 2*window_size_h + 1; +I = carve_it(img_i,center_i,window_size_h); +J = carve_it(img_j,center_j,window_size_h); + +% init. step +J_computed = I; +D_computed = Dest; +A_computed = eye(2); +J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h); + +%% level of noise +sig = 0.1; + +records = zeros(num_iter,6); +errs = zeros(1,num_iter); + +k = 1; +% iteration +while k <= num_iter, + [A,D] = iter_AD(J_computed,J,mask,w,k,num_trans); + + A_computed = A*A_computed; + D_computed = (A*D_computed')' + D; + + % compute the warped image + J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h); + + % compute the SSD error + errs(k) = sqrt(sum(sum((mask.*(J_computed-J)).^2)))/prod(size(J)); + + % update the mask, discounting possible occlusion region + if (k>num_trans), + mask = exp(-abs(J_computed-J)/sig); + end + + % record the A and D + records(k,:) = [reshape(A_computed,1,4),reshape(D_computed,1,2)]; + + k = k+1; +end + +[tmp,id] = min(errs); +A = reshape(records(id,1:4),2,2); +D = reshape(records(id,5:6),1,2); + +J_computed = compute_J(A,D,img_i,center_i,window_size_h); +mask = exp(-abs(J_computed-J)/sig); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m new file mode 100755 index 0000000..f2e6c62 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_AD_disp.m @@ -0,0 +1,103 @@ +function [A,D,mask] =... +compute_AD_disp(img_i,img_j,center_i,center_j,window_size_h,num_iter,w,fig_disp,num_trans,Dest,mask) +% +% function [A,D,mask] = ... +% compute_AD_disp(img_i,img_j,center_i,center_j,window_size_h,num_iter,w, +% fig_disp,mask,num_trans) +% +% Computing affine transform for matching to image patches. Display results +% as program runs. +% +% A: Affine motion; +% D: Displacement; +% +% +% img_i, img_j: the two image(in full size); +% center_i, center_j: the centers of the feature in two images; +% window_size_h: half size of the feature window; +% num_iter: number of iterations; +% w: parameter used in "grad.m" for computing gaussians used for +% gradient estimation; +% fig_disp: figure for display; +% +% num_trans: OPTIONAL, number of translation iteration; +% mask: OPTIONAL, if some area of the square shaped feature window should +% be weighted less; +% + + +% +% Jianbo Shi +% + +if ~exist('mask'), + mask = ones(2*window_size_h+1)'; +end + +if ~exist('Dest'), + Dest = [0,0]; +end + +% set the default num_trans +if ~exist('num_trans'), + num_trans= 3; +end + +% normalize image intensity to the range of 0.0-1.0 +img_i = norm_inten(img_i); +img_j = norm_inten(img_j); + +window_size = 2*window_size_h + 1; +I = carve_it(img_i,center_i,window_size_h); +J = carve_it(img_j,center_j,window_size_h); + +% init. step +D_computed = Dest; +A_computed = eye(2); +J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h); + + + +figure(fig_disp);subplot(1,3,1);imagesc(I);colormap(gray);axis('image'); +subplot(1,3,3);imagesc(J);axis('image'); +drawnow; + +sig = 0.1; + +records = zeros(num_iter,6); +errs = zeros(1,num_iter); + +k = 1; +% iteration +while k <= num_iter, + [A,D] = iter_AD(J_computed,J,mask,w,k,num_trans); + + A_computed = A*A_computed; + D_computed = (A*D_computed')' + D; + + % compute the warped image + J_computed = compute_J(A_computed,D_computed,img_i,center_i,window_size_h); + + % compute the SSD error + errs(k) = sqrt(sum(sum((mask.*(J_computed-J)).^2)))/prod(size(J)) + + % update the mask, discounting possible occlusion region + if (k>num_trans+1), + mask = exp(-abs(J_computed-J)/sig); + end + + % record the A and D + records(k,:) = [reshape(A_computed,1,4),reshape(D_computed,1,2)]; + + figure(fig_disp);subplot(1,3,2);imagesc(J_computed);axis('image'); + title(sprintf('iter:%d: dx=%3.3f, dy = %3.3f',k,D_computed(1),D_computed(2)));drawnow; + + k = k+1; +end + +[tmp,id] = min(errs); +A = reshape(records(id,1:4),2,2); +D = reshape(records(id,5:6),1,2); + +J_computed = compute_J(A,D,img_i,center_i,window_size_h); +mask = exp(-abs(J_computed-J)/sig); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m new file mode 100755 index 0000000..80db273 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/compute_J.m @@ -0,0 +1,31 @@ +function [JJ,mask] = compute_J(A,D,I,center,window_size_h) +%% function J = compute_J(A,D,I,center,window_size_h) +% + +[size_y,size_x] = size(I); + +center_x = center(1); +center_y = center(2); + +[XX,YY] = meshgrid(1:size_x,1:size_y); +x = reshape(XX,size_x*size_y,1); +y = reshape(YY,size_x*size_y,1); +index(:,1) = x-center_x; +index(:,2) = y-center_y; + +position_new = A*index'+ [D(1),0;0,D(2)]*ones(2,size_x*size_y); +position_new(1,:) = position_new(1,:)+center_x; +position_new(2,:) = position_new(2,:)+center_y; + +position_new_x = reshape(position_new(1,:),size_y,size_x); +position_new_y = reshape(position_new(2,:),size_y,size_x); + +[J,mask]= m_interp4(I,position_new_x,position_new_y); + +JJ = J(center(2)-window_size_h(2):center(2)+window_size_h(2),... + center(1)-window_size_h(1):center(1)+window_size_h(1)); +mask = mask(center(2)-window_size_h(2):center(2)+window_size_h(2),... + center(1)-window_size_h(1):center(1)+window_size_h(1)); + + + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m new file mode 100755 index 0000000..3cccefb --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_AD.m @@ -0,0 +1,82 @@ +function [A,D] = find_AD(I,J,mask,w) +% +% [A,D] = find_AD(I,J,mask,w) +% +% find the matrix affine transform A and displacement D, +% such that SSD difference of I(Ax-d)-J(x) is minimized, +% + +% +% Jianbo Shi +% + + +[gy1,gx1] = grad(I,w); +[gy2,gx2] = grad(J,w); + +gx = 0.5*(gx1+gx2); +gy = 0.5*(gy1+gy2); + +[size_y,size_x] = size(I); +[center_y,center_x] = find_center(size_y,size_x); +mask = mask(w+1:size_y-w,w+1:size_x-w); + +[x,y] = meshgrid(1:size_x,1:size_y); +x = x- center_x; +y = y-center_y; + +x = x(w+1:size_y-w,w+1:size_x-w); +y = y(w+1:size_y-w,w+1:size_x-w); + +gx_sqr = gx.*mask.*gx; +gx_gy = gx.*mask.*gy; +gy_sqr = gy.*mask.*gy; + +x_sqr = x.*x; +x_y = x.*y; +y_sqr = y.*y; + +T= zeros(6,6); +T(1,1) = 0.5*trapz(trapz(gx_sqr.*x_sqr)); +T(2,1) = trapz(trapz(gx_gy.*x_y)); +T(3,1) = trapz(trapz(gx_sqr.*x_y)); +T(4,1) = trapz(trapz(gx_gy.*x_sqr)); +T(5,1) = trapz(trapz(gx_sqr.*x)); +T(6,1) = trapz(trapz(gx_gy.*x)); +T(2,2) = 0.5*trapz(trapz(gy_sqr.*y_sqr)); +T(3,2) = trapz(trapz(gx_gy.*y_sqr)); +T(4,2) = trapz(trapz(gy_sqr.*x_y)); +T(5,2) = trapz(trapz(gx_gy.*y)); +T(6,2) = trapz(trapz(gy_sqr.*y)); +T(3,3) = 0.5*trapz(trapz(gx_sqr.*y_sqr)); +T(4,3) = trapz(trapz(gx_gy.*x_y)); +T(5,3) = trapz(trapz(gx_sqr.*y)); +T(6,3) = trapz(trapz(gx_gy.*y)); +T(4,4) = 0.5*trapz(trapz(gy_sqr.*x_sqr)); +T(5,4) = trapz(trapz(gx_gy.*x)); +T(6,4) = trapz(trapz(gy_sqr.*x)); +T(5,5) = 0.5*trapz(trapz(gx_sqr)); +T(6,5) = trapz(trapz(gx_gy)); +T(6,6) = 0.5*trapz(trapz(gy_sqr)); + +T = T+T'; + +J = J(w+1:size_y-w,w+1:size_x-w); +I = I(w+1:size_y-w,w+1:size_x-w); + + +diff = (J-I).*mask; +b(1) = trapz(trapz(diff.*gx.*x)); +b(2) = trapz(trapz(diff.*gy.*y)); +b(3) = trapz(trapz(diff.*gx.*y)); +b(4) = trapz(trapz(diff.*gy.*x)); +b(5) = trapz(trapz(diff.*gx)); +b(6) = trapz(trapz(diff.*gy)); + +a = inv(T)*b'; + +A = [1+a(1), a(3); +a(4),1+a(2)]; + +D= [a(5),a(6)]; + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m new file mode 100755 index 0000000..1e42cb2 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_D.m @@ -0,0 +1,65 @@ +function D = find_D(I,J,mask,w) +% +% function D = find_D(I,J,mask,w) +% +% find the vector D such that it minimizes then +% difference between I(Ax-d)-J(x). +% +% mask: the weight matrix, +% w: window size for estimating gradiant, use a large value +% when A,D are large. +% + +% +% NOTE: Because gradient values on the boarder regions of +% I and J can not be computed accuately when using +% a gaussian of large support, those boarder regions +% of width w are not used in computing D. +% + +% +% Jianbo Shi +% + +[gy1,gx1] = grad(I,w); +[gy2,gx2] = grad(J,w); + +gx = 0.5*(gx1+gx2); +gy = 0.5*(gy1+gy2); + +[size_y,size_x] = size(I); +[center_y,center_x] = find_center(size_y,size_x); +mask = mask(w+1:size_y-w,w+1:size_x-w); + +[x,y] = meshgrid(1:size_x,1:size_y); +x = x- center_x; +y = y-center_y; + +x = x(w+1:size_y-w,w+1:size_x-w); +y = y(w+1:size_y-w,w+1:size_x-w); + +gx_sqr = gx.*mask.*gx; +gx_gy = gx.*mask.*gy; +gy_sqr = gy.*mask.*gy; + + +T= zeros(2,2); + +T(1,1) = 0.5*trapz(trapz(gx_sqr)); +T(2,1) = trapz(trapz(gx_gy)); +T(2,2) = 0.5*trapz(trapz(gy_sqr)); + +T = T+T'; + +J = J(w+1:size_y-w,w+1:size_x-w); +I = I(w+1:size_y-w,w+1:size_x-w); + + +diff = (J-I).*mask; +b(1) = trapz(trapz(diff.*gx)); +b(2) = trapz(trapz(diff.*gy)); + +a = inv(T)*b'; + +D= [a(1),a(2)]; + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m b/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m new file mode 100755 index 0000000..b12ac7b --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/find_center.m @@ -0,0 +1,4 @@ +function [center_x,center_y] = find_center(size_x,size_y) + +center_x = 0.5*(size_x +1); +center_y = 0.5*(size_y +1); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m b/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m new file mode 100755 index 0000000..3c113e9 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/gen_feature_s.m @@ -0,0 +1,17 @@ +function I = gen_feature_s(size_of_feature) +% function I = gen_feature(size_of_feature) +% generates a spherical features with size +% of "size_of_feature" +% + +ss = round(0.4*size_of_feature); +[X,Y,II] = hemisphere_s(ss); + +II = abs(II); +II = 1/max(max(II))*II; + +I = zeros(size_of_feature,size_of_feature); + +t = round((size_of_feature-ss)/2); + +I(1+t:1+t+ss,1+t:1+t+ss) = II; diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m b/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m new file mode 100755 index 0000000..53bab55 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/grad.m @@ -0,0 +1,24 @@ +% gradient of an image +% coordinates (r, c) follow matrix convention; +% the gaussian is truncated at x = +- tail, and there are samples samples +% inbetween, where samples = hsamples * 2 + 1 + +function[gr,gc] = gradient(image, hsamples) + +tail=4; +samples = hsamples * 2 + 1; + +x = linspace(-tail, tail, samples); +gauss = exp(-x.^2); +n = gauss * ones(samples,1); +gauss = gauss/n; + +gaussderiv = -x.*gauss; +n = -gaussderiv*linspace(1,samples,samples)'; +gaussderiv = gaussderiv/n; + +gr = conv2(conv2(image, gaussderiv','valid'), gauss,'valid'); +gc = conv2(conv2(image, gaussderiv,'valid'), gauss','valid'); + +%gr = conv2(conv2(image, gaussderiv','same'), gauss,'same'); +%gc = conv2(conv2(image, gaussderiv,'same'), gauss','same'); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m b/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m new file mode 100755 index 0000000..5300183 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/hemisphere_s.m @@ -0,0 +1,27 @@ +function [x,y,z] = hemisphere(r) +%HEMISPHERE Generate sphere and transform from spherical coordinates. +% +% [X,Y,Z] = HEMISPHERE(N) generates three (n+1)-by-(n+1) +% matrices so that SURF(X,Y,Z) produces a sphere. +% +% [X,Y,Z] = HEMISPHERE(R,N) generates three (n+1)-by-(n+1) +% matrices so that SURF(X,Y,Z,R) produces a sphere colored by R +% +% [X,Y,Z] = HEMISPHERE(R,THETA,PHI) converts from spherical coordinates +% to cartesian coordinates. + +% Modified from +% Clay M. Thompson 4-24-91 +% Copyright (c) 1991-92 by the MathWorks, Inc. +% by Carlo Tomasi + +error(nargchk(1,3,nargin)); + +n = r; +% 0 <= theta <= 2*pi and 0 <= phi <= pi/2 +[theta,phi] = meshgrid((pi/n/2)*[-n:2:n],(pi/2/n)*[-n:2:n]); +r = ones(n+1,n+1); + +x = r .* cos(phi) .* sin(theta); +y = r .* sin(phi); +z = r .* cos(phi) .* cos(theta).*phi.*theta; diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/im.m b/SD-VBS/common/toolbox/toolbox_basic/affine/im.m new file mode 100755 index 0000000..6450120 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/im.m @@ -0,0 +1,3 @@ +function im(I) + +imagesc(I);axis('image');drawnow; \ No newline at end of file diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m b/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m new file mode 100755 index 0000000..50bdae1 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/iter_AD.m @@ -0,0 +1,26 @@ +function [A,D] = iter_AD(I,J,mask,w,k,num_trans) +% +% function [A,D] = iter_AD(I,J,mask,w,k,num_trans) +% +% find the affine motion A, and displacement D, +% such that difference between I(Ax-D) and J(x) is minimized. +% If k <= num_trans, only translation is computed. This is useful +% in practice, when translation is relative large. +% +% mask: the weight matrix, +% w: window size for estimating gradiant, use a large value +% when A,D are large. +% + +% +% Jianbo Shi +% + + +if k <= num_trans, + D = find_D(I,J,mask,w); + A = eye(2); +else + [A,D] = find_AD(I,J,mask,w); +end + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m new file mode 100755 index 0000000..314f140 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m @@ -0,0 +1,49 @@ +function [F,mask] = m_interp4(z,s,t) +%INTERP4 2-D bilinear data interpolation. +% ZI = INTERP4(Z,XI,YI) assumes X = 1:N and Y = 1:M, where +% [M,N] = SIZE(Z). +% +% Copyright (c) 1984-93 by The MathWorks, Inc. +% Clay M. Thompson 4-26-91, revised 7-3-91, 3-22-93 by CMT. +% +% modified to + + +[nrows,ncols] = size(z); + + +if any(size(z)<[3 3]), error('Z must be at least 3-by-3.'); end +if size(s)~=size(t), error('XI and YI must be the same size.'); end + +% Check for out of range values of s and set to 1 +sout = find((s<1)|(s>ncols)); +if length(sout)>0, s(sout) = ones(size(sout)); end + +% Check for out of range values of t and set to 1 +tout = find((t<1)|(t>nrows)); +if length(tout)>0, t(tout) = ones(size(tout)); end + +% Matrix element indexing +ndx = floor(t)+floor(s-1)*nrows; + +% Compute intepolation parameters, check for boundary value. +d = find(s==ncols); +s(:) = (s - floor(s)); +if length(d)>0, s(d) = s(d)+1; ndx(d) = ndx(d)-nrows; end + +% Compute intepolation parameters, check for boundary value. +d = find(t==nrows); +t(:) = (t - floor(t)); +if length(d)>0, t(d) = t(d)+1; ndx(d) = ndx(d)-1; end +d = []; + +% Now interpolate, reuse u and v to save memory. +F = ( z(ndx).*(1-t) + z(ndx+1).*t ).*(1-s) + ... + ( z(ndx+nrows).*(1-t) + z(ndx+(nrows+1)).*t ).*s; + +mask = ones(size(z)); + +% Now set out of range values to zeros. +if length(sout)>0, F(sout) = zeros(size(sout));mask(sout)=zeros(size(sout));end +if length(tout)>0, F(tout) = zeros(size(tout));mask(tout)=zeros(size(tout));end + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m b/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m new file mode 100755 index 0000000..8e8865b --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/norm_inten.m @@ -0,0 +1,11 @@ +function I = norm_inten(J) +% +% I = norm_inten(J) +% +% normalize image intensity to the range of 0.0-1.0 +% + +max_J = max(max(J)); +min_J = min(min(J)); + +I = (J-min_J)/(max_J-min_J); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm new file mode 100755 index 0000000..2e7b5f6 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.0.pgm @@ -0,0 +1,53 @@ +P5 +# CREATOR: XV Version 3.10a Rev: 12/29/94 +128 96 +255 +qquvvvvwzyz{}~€�‚‚‚ƒ„††…†‡ˆˆŠŠŽ�Œ��Ž�‘’“•–”–——›��œ��ž� ¡ ­©¤¢£¥¥¥¥§¥§©««¬­°±²²¶¶µ´³²´³³¶¹»ÀÀ¿ÁÃÄÂÄÄÃÄÃÅÆÊÇÆÆÅÊÉÈÊÏÞËÄÃÄÂÂÃÃÀÁ»qrrsvxwxyzzz{{|~~€‚ƒƒ…………†‡†‡ˆ‰ŠŒŽŽŽ�‘’’“”•–•“•˜™šœœ�ŸŸŸ¡¡Ÿª°¥¤¦§¥©«ªªª«¬­®°³´¶¶¹·¶··¸¸¹¹º½½¾¿»¼¿ÀÀÂÂÃÈÇÈÊËÉÈÊÊËÎÍÉØ×ÈÆÄÄÃÅÅÃÂÃÀtuwuruzzyzz{}}}�‚„„„†‡‡‰‰‰‰‹‹���‘”’’““•—–˜——™š›žžŸŸ¡¤¥¦¤¦·¬§¨©ª¬ª­¬­¯¯²³³¶·¹¹¹½¼½½¼¼¼¾¿ÀÁÃÃÁÄÄÃÆÇÇÈÉÊÉÉÊÊÎÍËËÌËÍÞÌÂÄÂÂÃÅÅÃÁÃÂtvwxyxwwz{{z|{|}��‚„„…‡ˆˆ‰‰Š‹‹Œ���‘‘’“•—˜˜™™š›œ��žžž ¢¢¡¢£¢±º¬©ªª«¬®®®°³´µ¸¹¹¹»¿¾¾½¾¾¾½¿¿ÂÂÁÀÀ¿¿¿ÂÆÈËÎÒÔÖ×ÖÔÓÐÎÎÎßâÒÕØÜááááàÜÙÕtvwwyz{ywz}}�‚�‚�ƒ†‰‰ˆˆ‡‡ˆ�Œ��‘“”’“–—˜™š™šš›œœ›œžœœž Ÿ ��š ´œ•™š¡¥¨¬®®®­­­ª©ªª­¬ª¨¦¥¢ÇÕÃÄÅÅÅÇÅÅÅÂÅÆÇÇÊËËÍÊÍÐÐÑÐÑâÖÓÓÔÖ×Ô×ÖÖ××Ðm„zuuvvvurvuwxz{{{}€�ƒ„ƒ„††‡‰Šˆ‰ŠŒ�Ž�“•™šœœ›œžž¡¢££¤¤¦¦©¨§¨§µ³¢¦ª®±³®¢�žžžŸŸŸŸ ¤§©©ªª§ËÚÁÁÀÂÅÄÅÇÆÇËÍÎÏÐÏÍÏÑÒÔ×ÙÙãèÝÛÜÝÜÛÛÝÚØÙØÓBUw…xz}~}~{{€€‚„„ƒ…‡†ˆ‡Š‹‹�Ž���‘��“”““•—˜˜š›��Ÿ¡ Ÿ¢¤¦¦§¦ªª«®®±Á®­­±³µ°¡šš™š™™›��¡¥§¨©«¥ÃàÈÇÊÎÍËÎÐÑÒÔÖÖÕØÖÖÚÞàáãâáîéâæåçéåâÞàâààÝGcZW�„}}~}�~ƒƒ„…„†‰‰‰‹‹‹���‘‘’’’“••–—˜œ�ŸŸžŸ ¡££¥¨§§ªª«®°°°¯ÅÀ¨­³·µ­ š�¡¢¡  ŸŸ ¤ª«­¯¨ÄèÑÏÑÓÔרØ×ÛßÞßââãæéêêêêéíòéëììîíëíîïïííêGeoxae“�~€‚‚ƒ~„ˆ‡‰‰ˆ‰‰‹Š�����’“”—šššœ ¡¢¡¡£¥¦¦¦¨¬­®¯®¯°²²²²³´»Î·°¸¹µ­¥ œš›œœž¢¦ª¬®®²¸²ÇëØ×××ÝàáåæéêìëïîìïîðððóóöôðñóôóôôööõõóòîFakswvey�‚ƒ„……„€ƒˆ‰Š‹‹ŒŒ��‘‘’”•–˜˜™š›�Ÿ ¢£¥¨©ª¬¬¬®°°³´µ¹ºº½¾ÁÁ¿ÊÓº¿Ã¹±«¥§­±²±®©©­±´²³´±ËñáßáãæèìðòõõõöøùøõîæßØÏÓõðïñóõ÷ùõôöîëççïIbjnpu|x_‹Ž„††‡‰ˆ„‰��Ž��‘‘’”–———›œ��ž ¢¤¥§ª©ª¬®¯°²¯®³´µ³²´¸º¼¿ÅÎâ¡nbb_eq†¦Â¿Ìå÷ýýýýýüüüüýýýýþþþþþþþþýýýýüüüüçæ¼­®ã–½øúú§>¸áq±}̶Gbjkloqw|pn‹rcbbehq�…‡ˆ‰‹Ž�‘’”•–ššœžŸ¢¤¦©ª«®°¥Œ› “ »ÂÄÅÅÆÊÍÏÓ×ÙÜç«Õûúúü÷‹.ÃýýýýýýýüüøíüýÚÞîØüÝÈþþ«¨î–Ù»“ô臞‰fšb€�’Žf0^xF_VYqH^ehkoopqy€f†ðþþþûä‹|�”–˜–‹“¢£ ŸŸŸ¢¤§¨ª¬²±°°x;33>AV¨ËÐÒ×ÞáÌÆçñúã•ÄyÂýýýÉi5!q¸¬�ŽcMi<2<3WWB=XFoZMqeHNtMdfV„wNi…v\uat}ˆŽc*d�HY]ZtG]aced`C233++%)(*59:@7B>F>FEA=<\g^gb\^Ya][\PD83.2X_=Hj?42)Wh3%GkgpD8€…€xb`vJQjFktVR|LvtTytLU{OdoU…}N]‡sSwZl‚Š‘[+e€IVYRqI[^___W?519+&'112>;9G<@;E8BG<:5V[FYYLPIHHMA4=A83:PMd{m@BdmUO�i?$ByC!'Q_pS$l„‚|hSrJMqG^ugp‡Os~Rq|QRN\wM}€SYŒyQuPe‡�’X#_€NQ_RpFX\]^YK512:)&(032>?9B=E:G7AJ@B;W\GRWHOHEJIB5>C@:4NQ^xp<5[njF€lJ, %pIQk]L*&X€w{qReNBnIGe’Ô¨Yj‡KayPR€XQ€Qu‚XQ�OtUb‰Ž”^%[�QPcRoGUY]YNC445=)%+.01?98EAG=E6>H@B7BFRwvN\r>itK2WRJmRZ9(AepvPZ[BpVCf‡Î¨U]ŠN[zSK�gU‡Pj‰bJ‘�QpX\‹Ž”d%U…VPhNmFUYYTG>26;?*'+247><;HCM@I7<J@H:;JAF>O[SM_PR]XVLSJ8>8565BD_v>)hiE�wU-"lLGpcaHA$U~o~wRjLJrCCZ†ŒuDtsF}yPq„SmlT�…Ms�Y`tZŒŽ“~2CƒeMrRqIRSMGMXPF>A.**0.APIR>L?9K;DEQ]XP`VS]\[OML5?C8?7BDX|~R[sBm‚_7[_"=cqfj_W;I�s|~T\[HvRCa^DxGj…Hq�Pg…W\yX‰ŠSe”e^�ZŠ�•„9@„kLrPmGOOIM[\MC>@+(*-,7>;GAJYUU_ZU^ZOKGP?IH2?5>GRu€e&KuK]”gH#DoNXhj]FE]jb|rvZRmIp_?fbCxV[‘NdƒQ\…[U…Qy‹W`”o[Š\‚‘”ˆA<qNvPmHOKFM[\NB>?)(,,+>BBDSHP@FA8ICG@F\WV]bS_\KLISOED2:4:FNpˆt85teTœhQ+*ENWOG6*+;PVm|x…kPpK`pVp–zuoZ–YW…_Z‹hP…PmŽ`[•{[“\}‘—ŽL;~wSvQiFIHDLXVJ@<>(''+)7AEESGO4*))(ATq~†„Q[VIt<6:R�Tq}U�‚VV|a^˜x]��^af‘–“V+n�OoS]EFEELOB/&5?ABREK=CI;KLIH=b_\YVPMT[cZVVGDA4<6>BT}‡m+N|\[šf/"$');GGC7,%2W]l€ƒ^UhHk:+DE‡Z`ŽWw†Tr‡Vmn]˜ƒXŠ”byeb”•–\%h†QlV]GGHDJL;+.%%1'1-!?L@GMIN@\aYTVVQWgaWPMKIC1:6<€pY‚;%%"&/BPF<>9* ,NUVzƒmV{GW5 #FBuhZ�Uj‹\c‹XiX“‹W}•epmc–•—c(^†Pf[[EEFDJH4$&(COEZsW.Q=GQDR:V]U^]`_`\^[M]VOI8868CIfˆ‰_!a‚_.')/3:1-35.+)#,DPFcƒƒbdY:1,;M[ŠXv\�m\‹k[”\~•Wo˜pg‚a�“–s(TŠUafUBCGBF:&&""$.ReV4 8A?NHDJ>O>DPISAP][dcb[ZSZfX`QBH?37/AD\„�u0F~T.31./:?:'9DBGJW}…dVj@5"3@XXŒWo„^Ž}_…xY�[n™bjžyjŒdŽ”—|+RŠ[ZlWDFGDA3+,!12'6FDIKJO>RBGUMUCQdcjfaWWT^gZXYFHK291K‰hZuWHGDDE.#  +!"9HGJOLUCPEHRKMFJaf`XW^_e`^aUa^KI5:.,FLk��d$I#:WRQXXiy|wz‹��s;1/]�ƒaf]%! DuZg…\˜g`ŒWhŒ_i}e™‚c¡Žj�e|—˜’ED�iXzVEGFDC1-)%0ZdH')3;=HGEMKVBQJJTJNHHfc`WOjg_X]dXabOK674+EId‹�p6 +!Njv�„†„}}‚��›�v>-"S~ƒvŠ�‚zˆ�{šc…sbŽb`ˆfd„g˜�a�“o‹hx–••XA€s\[GFFFC/44,-ZkL+*0=AGFCILUHQLJPAMHA^ZX[OkcVXdfYX]LLA3:1>K^‡“„C $Tgmt{vuz{}‡”�–|>%R�|ž¦¦©¨«­¯²©pn‚hŠs^ˆqb‰m‹’Zz”kfr–“”]AOUaga^bcehnppprvvvtw{xz{x~€ƒƒ„‚„‡‡‡‰‰‡ŠŠŠ‹Œ�‘”š�œ˜’v)+UL>516HZU?8?QhsE!cª¯°®¯®¯°²±²²²´³´´³³³´µ³²µ³´µ±°±¯±°¯¯®®­««¬«ªFFIL[bcfjlnoqruwyyz|~~}}�„€€€€€€�„……ƒƒƒƒ„………„‚ƒƒ‚ƒ„ƒ‚‚‚�€‚zE:\?+)69:“|=.0BTx^28^nmkijiiijfffdbcb`aa`_]^^``_\\\\]^`__a`b`bdb_GHJM[XPNOQTTVVWYZZ[[\\^]]^_`aabbbbbbcdfgfggghikllmoppqqrqqrrsrB>eSLIE:[²˜C2,94>BB.7AB11< '' +"5 $EXg€‘Œ~p€š©¤•ˆ|W5((..!!%GHN)   5*U{`_uH\h_xfDt|~Ngk!  /t_$$&T¬’={ž@^ÇÈÊËz @U\iux†�’’‚xzx—s3Z”s-AµËyj«´­ÄÁÛvO@2RRIQMx™“xst¢ž�–�Œ‚�¦¬~KNNNOO_WesG_jbx‚fHw}Nnj   +5|]$##Z²’?�—?bËÊÎÍpQdPY`inr}‡„|u}e¨š7V”u%OÀÏvl�§¶¿»Ë�z8HwgMeZƒ˜•xvr„£›•£¥•Œ�¤¢rLNNNVgjYgvKegcy„gJx}~Qsi   !#3_O#>EL™¥­§\cOONWWRT]kqkozdÀ¯:1><"2LTSq«·¹ÐÙÀgM=FNHFIUŽ£‘qrq‰¥œ‘ œ–Ž–£œpOPRRdmkXfuQjhg~ˆjLzPxf + + +#&!]½mOKIOY_badin\‚ùø¨G:6$WZb�§ÇÇܬNRJDKB>Bg›¨�qvv•­–˜« •—œ¥�oMNQVgolUiv[sdc€‰qN}ƒ€S|b  +  +%%Ÿôêۼ׎GOPMKQ\\SSÖøùûûûûûû¸=&FX[f€�¦ÍÉá¶\KWZOUOF|ª­‰uzz£­”¡¨›™œ¥¨~tMPRXjqlJb|e{eby†zV~„|[†\ +   + !$' �÷ôãäóòص»¢nILJG;q¦Vªöüüüû÷úûûúúúÉfqœ²kCY‚aDGZbOVWQ“²©†z�ƒ¬°˜©¦ž›¡ª§wzKMPXinkC[}awhbˆ|Y‡|\‡Z +    $%>¬ôüüôèæôõë·—\{€S@F‡•b„å÷üüüûôõûûúúúúûç¾¥lY\Z<=5czK^nb�³¥{}†­©–­®§Ÿ¢§ t{KMQXjojFW€fyqf„Œ…`�‡|_ŽY  +  '& KåôøüüüôêçôöôØž�h]j7PŠwO|w©¸¤~€‚�´ª˜¬­ª¢¡¨›pzLNOZloh>N‚csyh†�†[|‰}a�Y    %&NÐýûùüüüüôîìôööï·œˆexh´òú¿Îüýüüüûøùûûúúù÷úûûûôôôºG?5Lp^;^zµ·˜s€~•À« µ³­©««‘qwLMOZloh>F…cpƒm†�’c~‹€b”_   '%8Ìûøøöõ÷÷÷÷÷ïï÷õõõ鼸ª�—åúìãÊ÷úüüüüùùúúýýýóóûûûýýý§9>~p^”k}—žbz‘’\ˆw! +  )' Ÿûûûøøóð÷÷÷÷÷óîõõõõõåÖñòýýýýõéôúüüüûöøúúýýüòôûûúûúúÈxŒf\WVIH”ÅÇŒz…|²Ï´´¿º²«²³{…kMOOZoqhE9~`�pwšžbv’•a€|*  + ()aÚäêûøøóðö÷÷÷÷óïõõõõõïÙîøýýýýøõ÷úüüüû÷÷úúýýõçóûúøýøú÷Ã`‰µ“›´�£ÂÊ|„�³É°¸Ã½µ°´¬q‚bNNP^ppiC0{�a„yu�¡jq“™l…4 % +"*(�ÙÚØñùùöõöööö÷ôòöööööêÜîõúúúúùö÷ùûûûûøøûûüüùëñøóñýêòûÕga�G]uV­Á¸‚‚‡‹ÀÅ­ºÇù¶º¦q‚SMNQ^qohI&j�Yfˆu•œqd“—szˆ6 + ! !)+ >ÌïáÒßùù÷òôööö÷ôóöööööïçïôúúúúøõ÷ùûûûû÷÷ûûüüûêñøîïýòîöÑS‡Å_˜¨s¾Â²{†Š�Á¿£¼ÈÁ¸µ´–p~JMMO_wwpcVapXWkWr{OKƒ‘fpk' $!#..!^ÄóáÈÙùùùóóööö÷õñõööööòëðõúúúúøö÷ùûûûûøøûûüüûðôøíñýðèñáef}rWh„ÅÂ¥x†„’¸¤ÅÅ¿¸·²‘x{DKOQbrrtwy|€„ˆ‹�’“–——™œ�¡¤¥¨ª«ª«ª©¨§¨¨¥£¡£¡ž�𔥻ìéÂÑøù÷ìîööö÷ôðôööööôïïî÷úúúôñ÷ùûûûû÷÷ûûüü÷ëóøööýûáßû„GNBF7s»±‰gkwšÅ­¨Â¼·´�¥†s?MPRYF997:<><>>><<;;:<AEINS[aflqtx}v¹Í½ÉÄÖÅìøõéï÷÷÷÷ôäïööööõéãìøøøùíî÷øúúúúùúûûûûûù÷ôÁãú÷ÙåýýëÌÈÈÈÇÇÆÇÇÆÆÅÄÃÁÁÀ¾½¾»º¸¸¶ILLMB$ LÒâÎØÝÔ²æøøíî÷÷÷õòæî÷÷÷÷öïàòøøøøëéøøúúú÷÷ûûû÷÷÷÷ûôºåðåØñýý÷žƒƒˆ‹��”˜žŸ£¦ª®°³´·¹»½¿Á¿IKKJD-  TÐæÕÐä×¶Ù÷÷êé÷÷÷õóæë÷÷÷÷öðäîøøøøéå÷øúúúôóùûû÷÷÷÷úùÜçßÖÑ÷ýýý“#&$# ! !  !!JKLIF7  PÐóèÎßÓ»Ööøîî÷÷÷õõêç÷÷÷÷öïàîøøøøòîøøúúúòíùûû÷÷÷òùòÎÕÕÔàýýýýÎC&$#"  !""!"""!"#"%$EJLHC;' ]ÔöñÔÚñÖõøñð÷÷÷õõéç÷÷÷÷öíÝðøøø÷îìøøúúúðç÷ûû÷÷õéïðÙÈÍÖáüýýýõw%&%##"!#"!"#"#""""#$$&'IJIHF?. uÚùôÜØÂ›Çôøòíöøøõõëæ÷÷÷÷øîÌéøøø÷íð÷÷úúúïÝöýýúú÷ìòàľÒÜàöüüüü¨2)&$"#$#!"""#"#&%%&)(()HJKGDA7$  &‹ØùöâÖÆ¯ÅñøóæôøøõõçÞõ÷÷÷÷êÞöøøøöëñ÷÷úúúïÞóøýúúôÞïß²«Óß×èüüüüâW,(%%%$"#$####$&&()(+.0GHJJHB=, @¯áùøé×À¥¸êøóéôøøõóåÅë÷÷ôðæÜóøøøöéï÷÷úúúèÙ÷ýýúúõàò衤Üèßäüüüüú‡$('''%%&''&%&&'(),*,/2FGFGEB?2 [ÌëùùïÔ¯œ¤Üòñçôøøòïã¿ßóòìßÝòøøøøòåñ÷÷øöö×âýýýúúñßôâ��ÖðêàúüüüúÀ9-))('%'''&&((+---.022GHHGFB?7& oÜóøùíϦœ—ÍëïêöøöóïÛ»ÛïðæÛäöøùùùõåóûûüüûæíùùùûûèÑéÊ™©ÔöóÖêûûûüîn+++(()'&%&'*+--.04333FFFGFB?9*~Ýó÷ùó×§¤œÂÙáØòøõðëÖ·ÑëçÞßðö÷ùùùôäöûûüûéÈçùùùûùÔ×õ§°ËùñØêûûûüüŸ.-+*((')()+,-./013444FGJIGDA;0  "—âùùùõݵ±£ÁÖÑÎóøöïêâÃËæÞÕäñóôùùùïÞ÷ûûüûêÐëùùùûùäîð³·½ÚùùÜãûûûüüÛS5/++,+++-/./10362251DGGGEB@<4& B»ñ÷óôõÒ°³¢¹ËÊ´àøôâÔÖÁÆáââðêðòøùùïÛ÷ûûüüïÜóùùùùóØîâ¡¶ÛõùùíÛóûûüüü…)-.,,+*,.00122244444FFEEDA@=8- _Öôôíëôླྀ£´À±ÇÞÖÍÏÒźÔÜêóáìòùùùïÖòøøüüìëûûûúøèØõÑ›´à÷ùúõÞêúúûûû¹60,,-.../0334555553/BBDDCB?;6." yÐéèæÞÝìܵ›°À̹ÀÚÞÔÊÒǹÑàïðâîñòñ÷íÙõøøüüíéúûúúúçÛøÄ‘µæöùùöàáøúûûûîn-.-/../112333335421EDDEB@?<80% 6–á÷÷÷öèÃÓÑ•¨¸ÆÂÀÚÏÈÈÑIJÌäòíÛëóùùùíÚôøøüøàãûûûú÷ÔÙú¿Œ¶èøúúúèÌéúûûûû¥6.,/121134464543244ADECAA?<93' N—Ñö÷÷÷øëÖⲫ½ÈĹÒÓÍÐØÌ¬ÉëôçØîò÷õöÜÐôøøüôÓâúúúùïÓãô¸‰©ÑôùúúïÙìúûùùûßZ20012/233121132122@?B@A?A=:4+!d‡†ÏÍ·¼¼œ¥½®¬ÂÌȵÈÒО¿¨ÁæòãÕïñö÷÷ãÃñøøüöÑåùûöôïÜìö°˜¹ñøðíñæàýýýýû™/44314442034532441BABBCB@><82& ‚ÆÞô÷õÑ™�”˜†˜³ÂĬ´³›‘Ÿ««¾ëòáÏßðòò÷îËîøøüøÔàø÷ðøîÝíö¤}Ÿ°äêæçîõòûýýýýúÐQ84443444222333121>@CDDCB?<93(DÀúÝ÷÷÷ùúÝŠb‚¯¬™‹“§�n‚ž®ÃìòáÓêð÷÷öíËáøøüüÝäüüûûöàìç€t¡¸¼áúúýúìöýýýýû÷…88432421255422122=>@AABA@<94+"nݱ³Ùô÷캙”™vkwwy„œ¯¢yWp’¥ÐòÜÍéò÷÷õçÈØôøüøæîñìêéæÍæævp›±òúúúýý÷öüýð½‹U973222122233220252@AABCB@><97.#(�®rH 9ltvpmb\ZZr™³¢T !&¡ËÊñòìô÷ïÎÓïöýîÞíåàëìçÊëÞnkœ¥ÖúúúûÝs2.BS@78423322312311221/11>@ABABA=<;72'(0&;_ggea\SQU]i™¯žSˆÆÌÝæôõõíÎÏëöýùè÷üûúûöâñÖfl–¡�ÆÅV7@CDK<3443223322334443233110=>CCBBAB@<94)!  ""!!"""##%"#&'!(AW^_``\XY^XWb‚Ÿ“P%¤µÈñøöøøðÐÍáôýýýýüüûùôæñÒxmŒ—€Z8:>FNI:899:7878557677766777554>?@BABB@?<95. !!"""##$%%##$%%&((''(-5@LSWYXVTRKDI^`hz`5*, /“©´øüøøøóÑÑßðüýüüüüüøíÛîÎuaƒ‹X=;=DOYI889:9::999879::999:98886 \ No newline at end of file diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm new file mode 100755 index 0000000..9d57f70 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/pan.1.pgm @@ -0,0 +1,59 @@ +P5 +# CREATOR: XV Version 3.10a Rev: 12/29/94 +128 96 +255 +prsrxxwxz{{||||}~~�‚‚‚„ƒ„…ˆ‡‰‰‰Š�ŠŠ‹���‘��’’’””–™ššœžœœ�ž�ž¡ «§££¤¦¦§¨¨§¨««¬¬«¯°±³µ·µ³´´µ´·¸¹¼¿¾¿ÂÅÄÄÄÄÂÂÃÃÄÉÈÇÆÆÈÊÈÈÌØÅ¿Ã¿À¿¾¸prsttuyxyyz{|{{|~�ƒƒƒ„†…††‡‡‰‰Š‰Œ�ŽŽ‘‘�’“’“””“—ššš›�žŸŸ¡¢¢Ÿ«®£¤¤§§¨©««¬­®­¯°°°µ·¹¸·¸¸¹¸¶º»½¾¾¿»¼¾¿ÀÀÂÄÇÇÇÊËËÉÊÊÊÌÌÉרÇÅÂÁÀÂÁÀ¼tuuuwwvwyxzz{|}€€���ƒ‚„†‡ˆˆŠ‹‹ŒŽŒ����’’�’”•–•˜”•š›™š�Ÿž¢££¤£¦·ª¨©©ªªª­¬®°­²²±³¶¹¹¹¾½½¿¼¼¼ÀÃÂÂÂÁÃÃÆÄÄÅÆÇÊÉÆÇÊÈËÍÌËÊÊÆÚÊÀÀ¿¿¾ÁÀ¿¼tuwwxxzyy{{{{||}~�ƒ†…„†‡ˆ‰ŠŠŒ��ŽŽ‘““••”•–—˜™šœœžŸŸŸ  ¢£££¥¡°¹¬ª«ª¬®®­¯±³µµ···º¼¾¾¿½¼½¾¿¿¿ÃÁÁÀ¿À¿ÁÄÇËÍÓÖÖ×ÖÕÔÒÑÑÑÏÞäÕÖÖÙÛØÕÓÒËuvuwyyz{~{z~~~€€‚�ƒ……†ˆ‰‰ˆ‡ŠŠ‹Œ����“••—˜˜š›œ›œ�œœŸŸŸŸ  ¡¡¡Ÿ››¡³œ—˜œ¢£¦ª®­­¯¬¬¬ª¨©«ª©§¦¥¥ÌÕÄÃÁÂÅÉÅÄÆÃÅÇÊÊÍÍÌÎÊÍÎÏÑÑÓâ×ÕÔÓÕ×ÓÔÖÕÏ_`k€{x{{zzywzyz{{{}~~€‚„……†††‡‡‰‰‰ŠŠ‹��“•™šœ���žŸ¡¢££¤¥¦§©¨©ª¦¶µ£§©®³µ®£œœ�žžŸŸŸ¡£¦©¨«¬ªÎÚÁÂÁÂÅÅÇÈÈÇËÍÏÏÐÍÍÑÒÓÕרÙâèÞÜÛÜÜÛÚÚרÕ8:E[‡{|€‚‚�}…„ƒ„…‡…‡‰‰‹ŒŒ��ŽŽ����’’’””˜˜˜˜š›Ÿ � £Ÿ¢¤¨§¨ªªª«¬­­¾¬­®±µµ¯¢™™šš›››œ›Ÿ¤¨¨©¬§ÆâÊÇÌÎÌÊÍÐÒÒÒÕÕÕÕÔÕÛÝáááááïæâäãäåãàßááÛ57@_WY…„€€�‚‚€ƒƒ……‡ˆˆˆŠŒŒ�Œ���‘‘’“”•––™š�žž   ¡¡¢£¥§¨¨ª««­¯¯²±Ä¿¨­´·´­¢š�¢¡ ¡ŸžŸ £ª¬­°©ÅéÑÏÑÓÓ×ØØØÛÞÞàäããåèèèëéèìóéèééëìêìííîê:9D`ny_i”ƒ€�‚ƒ†‚‡‰‡‡‡Š‹Š‰‹ŒŽŽŽ‘’“•–™™™›œž ¡¤¤£¥§¨©©®¯°¯®±³´³³´µ¾Î´¯·¹³®¨ �›žŸžŸ¡¦¬¯°¯´¸°ÈëÖØÙÙßßàèèëìëëïííññðððòîïôòôóôóõöö÷öóí8:B^kryxc}�„……††ˆ„†ŠŠ‹ŒŒ��Ž�‘‘’••˜˜˜™š›��Ÿ¡£¦§©«­¬¬­°±³´¶»½½¿¿¿Á¼ÈÑ·¿Â¸°¬§¨¯³³²¯¨ª®±´³´´¯ÇïÜÜßâæéìòôôöøøøøøóìæâÜÒÉ÷õóô÷ø÷÷îëôÝÛÚ8;C[gorv}wb‘�…ˆŠŠ‹ˆ†‹�Ž�‘’“““’”——˜š›�žŸ¡£¤¤¦ª«­°±²²²´²³·¸·µ¶¹»¹½ÄÊà ned_gx�­ÇÊÙñüýýýüüüüüüüüþþþþýýýýýýýýüüüüûûÕÑÀ®¥ß�·øúø¥0­çmšt9;D^iloquz~nq’xifdefq€„…ˆŠ‹���’“•—˜™›�Ÿ¡¢¦§§ª­°ª’Ÿ¥—¤½ÂÄÅÆÉËÍÐÓØÙÜç¨Õûûûü÷†1ÅýýýýýüüüüõèûüÚÞíÕûÛÀüýª¦ï‘ͺŒäØ�x—„^Ž[r‚‡ˆk4\|JSZ87A[gjknqtw{€f”öýýýûä�€��”–˜”•œŸžž ¢¡£¨¨«­°¯°°y962??XªÉÏÑÔÛßÍÇîñúà•ÁvÃøøüÃb0 n® ’WGa7-84Z`HA`Hu_NulKQwIaiTƒxNc‡w]uZm|‡�i&[~KQ_8:BZdeffcK5850)%)09::B6BAIAGIEB>]linhbc[e_^aRC71/4=Eera?=Y_=He<30(Wd0$FkenD9�„y_]wKQlImuVS|LvvSvrKT{MbqSƒ|R[ŠvSvUb€‰�]$\KM`;;CX`cba[A2/41)&2-/=74CC8H8?H?EUYVQF>7:>A,%(2-6A:;N@KBL:7L?G@UYJ@XEMQP\GTF@@4:58EHh}m/ 6nXO�mG*3q<S{jJ$)&lwqnUvG[n>FU�™hJƒcLƒqV|ƒStbW�…Mz�TcoY‹Œ’~3C‚iLq??ESURJA=46A+)*+*7>>>LEL>I?7G+,,0+<>>ES@KDGC;GBHBF^^X]aP[WEKBRNGC0969GKo„q45teW�jJERTOC3,7O_K*#h}{‡oRqJanUi†rwqW—]U„`W�kR†Qn�e[–…Z�]sŽ”�T1t~PrACEJIFKYWLB>>'#(-*8>>@REM) + &':=@CSDJ>GHUC/ Gˆ~„ƒPZWIr:37Q“Sn�V}�V~�Tyf_˜{\�”b|ca•”•\&a‚MeACEHGELUF6&6<@BREH;?KcaYUSNLRX`YWUEDB4;7?EVˆm*O{P'$&)8DIG;.'.S[E'2}�„^RiGh:*ED„[^�Vt†To‡Tjr\–…V‚•cqj`’“•b"[‡Oa?CHIGELQ?/1) -#+'&7=DTHI==L>GOFO=^\WRPUSYd^PKIHHC062;EP{‹}7 +=S*# (>RG9?9/ @VJ3'j~~ƒmUyGX1!FCujYŽUf†Za�XgƒY�ŽVz“ffub”•—k'UˆR]ACDEFFKL8'&#@UERnX-9BCNEDC=L=FPFL:X\RRSZYc]]YKPPOI3616CLn‰ƒL".),*-8A@;53/*%$8HH;R„}„~YmLC/#;Ec~YŒa[ˆ`[‰b\ŽY‚�Vp˜mgc““—r%RˆWXCCEFHFKG-+OA3;t„n98@@QFEJAS?GRGR:S`W]\_b`W[[P]VNH8845BIf…ˆ`" #&+/40/78/,+%!8NE>#B„�„‚^aW;2.9NY‹W~v]�q^ˆq^•Ys•^l�ui‡dŽ–˜{+O†_UACEEFCE>''')',JeZ=!7AQ@EPEP?P^Ycdc]WOXd\cSDG>46.CF[„�s4!!,42-.7;8)-EKEP@THIULTAMbajebUUV`h[XUFIN2;-;FW}‘�F%(4HPH=blQ49:1$f}w‡uZrF%.MjX€ee˜^�‡^{�]hc›ul¥…h�f†“•‰?G„lVBDDEHFC1(- +)2%0@DEKHS>SFIUFLCHachZYXW`fbUOYPUO19*2GPu�„B'8Od`Ue€�l<)51U†zƒ}`qN&QuTpwaœaoŠYm�]tr`�f¡�i’e~”—’EAƒqWEEGIHEG0! +#"6FEHQKTEQDERKMDEae^UR^^d\V[P`^KI3IIFOLU@NIHTKKDCe_ZTMkg\UXcW^^JH6:6+DGbЉ<@es€…††€~‚�žŸ“|I0*3.2y}ƒs‡Œ…„|ˆ‚z›a„ue‘eaŠe_ˆh•’`Œ—k„hr–”—]:z}YFEFIIJI323()UkO*(.9AIDBKGOCNJKRCNHA^UT[Jg`WVbdZV[JNA5<0>I\†.Ehpx}yxz{‹™£ž„I'!,$#g~‚�z�£¦«¬®¬©®¥nl„gŠt[†qcŠh€�Yu™fwii”�”i;oYEGIKLIPI;:GM[c^X[]acgklmmqpoqswuvwt{zy}z€‚†………‡†ˆ‡‰‹Œ��’›“BKSG<69G[ZI@EUlwT(I¦±¯¯±²°®®®°±±±¯¯°²´µ¶µµ´³²±±³³±²°°¯¯°¯¯®­¬¬ªª§FEFILMYgiikoprvwy}€}‚……†…†„…††…††‡†‡‡ˆ††‡‡‡‰‰‰ˆŠˆ‡‡‡ˆ‰ˆ†…„ƒY-UM2)-88{}B/'8Xsi4(Imnnmnmlhhigeccecb__`a^^\^]\\\]^]]][\^^``bbceebFGGJLLZYOMNOOQRTTSUVYYYZ[[\\^^___^^^`abbcegffffgijiknnnonooqY(2`TGCA=K¦©K9>V_xwHPo…†ˆ‰‰‰‹‹��ŽŽŽ�����“’’““•••———™˜—˜™™˜™š›šš™š›š˜HIJMMN^lqopqrsuwzz}ƒ‚‚„†‰�Œ�ŒŒ����ŽŽ��‘’“”””““”–••–˜››œ›œœšn4Aj�ymeiƒœ¨†`_v“ž�M@‚¦©©ªªª¬«­¬¬­®®«¬¯­®®®®°°¯­¬®®®®­ªª©¨©¨©©ªªª©¨§FGHJKKZghgilnoruwwz|}~‚ƒ‚ƒ„………………†‡ˆ‰ˆˆ‰Š‹Œ��Ž����ŽŽ�ŽŽ���Ž~M;aŠ�—˜¡��­¬«š­º¨wWj‚ŠŠ‰ˆ‰ˆˆ‡……‚ƒ„ƒ‚€€~}|{yxwvtrpomlkhffebaaa_\[YWTKMMLNMK8" +  + + + + + + + + +  +  ,?Qt‰œ§š†�˜ž·»´«”taA!!"$&%$&'''&(&'&'(&%%#%$"$$%#!"##"HKKJJKI?+    + +     + +ASd|“ ƒ>AGR¡¶®ž‰ve5"++!$" .12,!! "! ! JJLMLLKD5  +    +  +  +3P\m†•|E?Ww¤®Ÿ��z¦ƒ*11''1/ =AB)  KKNMKKID;%->5-:3:@C.5AC52=  (+ 3 !?Wf{Ž�~o{˜©¨™‹�²~(00&%-. #$EDN+   8WX=GCMZTZfdIL]IJLJKKKJA+1D3,@8FKL.9GG64F    kj(#$4S`u‚“¿Â£šž”ˆ|œÄx3qq;S¤Š69G6*MQQ( + +NeeRMDRd^]feGG[JJKLONMKE2>S@9LAVXY9H[]CG_) + + + \[%"$˜>cÊÃ�UYbksw‚ŒŠwx_’Þp:{s3O–v-I¿Óvj�¥°¾¼Î€z7GuhLc[�–˜{ts£Ÿ”¡¤ŽŠ’žJLNNOOUfkW`zL\ia|ƒoHv~�Soo  #& 5bR$AHM˜¡pMNUXSSZhqlkx^›ër0QK-.<:#2NUQmª´µÏÖÀeO:FMGCHR�¥”ssq†¥�ŽŸž’Œ–¡PORRRSdnmYb|Naj_}†rJx„Tsj   +$%  ˆyFLIQY]dhbgnvlÚú±=77*,43$8UZ\lŽ”½¼Ï¸IY\DNHBF\”¥�oop’³š‘ š–“— MOOOORdnmV`|Sgk^~‡uKw‚Tuh  #%+€¸¦UKKHEJS^dda[Ëûûýñ°^/1:8':VX`|˜¤ÆÃÖªKPICMD?Abš¨Žnrq�«—•ª¡“–˜¢NNMQSUgpoU^SgiZ�‰{Mx‚„Sye + + +  +%%!¤çٺɒBJNMKQ[\WL·ûûûýýýýû«G9$ ! >W[bx˜¡ËÅÛ³Z5G_LZN@q¢«Šnvs˜°”™¬ž˜œ¥¤MNOQQTgpnP^Zni\~†}Qu��U|c  + + +$& _×ÒáäÆÂÛyFKLKLNKO­ùúûûýýýýûûù¹K'%%EX[k�œª×èîˆAz�qv×ôúúüüùùýýýýüüüÊ…^^vœ¢jT[[;;*UzKYn^›´ª}x{©§’¥©£ž£¦ŸLMNOQViqkDN„bqt_…‹�^z‰ƒ_‹_  %&AÒïúúúúõèóõóà¢�f]kAjŸ†n¯êúúúüüûûýýýýüüüüùø§‚Ç¡nOOP7.Do[6^t³º�r��½«š¯°ª¦§£“PMMPRVjokIB�ilŽn~Ž•]x�Ša�d  +%'!?Ñøø÷ô÷÷öööôñôôôõ渲Ÿ‹‘ÝüííÛîûûûýýýýüüüüúùùúýýýýüÄÇØá¨7<3La^CV”·¼—l€šÇ¨¥´´±««µ”MNOQRYlpmK>€rc‘lx�–^v�Ž[ˆo   +')`êøøø÷õö÷öööóïóôôõõëÔÖÝäðë÷üúúûûûýýýýüüüüúøøúýýýýüßÉÒì¨QEMTQFHB�¿Á“s‚~¢Ñ³¨¹´²®­µ‰NMPOOYmpkN8|~`‘kv–�at�•^„z' +  '&:Éøøøø÷òó÷öööõñóôôõõîåõõøúüüüüûûûûýýýýüüüüúúúúýýýýüùñùûYƒ[[UTG@‡ÅÊŽw…zªÏ´®¼¶³ª¯µƒLMNPPYnrlO6zŠ]‡tp›Ÿcn’—`z€-  +   ))–ìïõøø÷ôõ÷öööõñóôôõõñæóùùúüüüüûûûûýýýýüüüüù÷÷úýýýüûü˵٠­a€²�˜²ˆ—ÀÇ�zƒ|­Ç±´Â¼µ±³²uNPQPQ]qtlN+o‘`{}t›žmg•šmw‹7 & +! !/MÈàáè÷÷ø÷÷øùùùøòôööõõóìðöööûûûûûûûûûûûûùùùùù÷÷ùúùúøùû¸OHnµlZ�FZ}Q¤Â¾„€†·Æª³Ã¿·´¸ªmNNMNQ]qtlP$a�^]Žr��vb•™xv�9   !!xúæÙâ÷÷øõöøùùùøõõööõõôóôöööûûûûûûûûûûûûùùùùùøøùõóúø÷úàkD\‹P|Ã]’­p¸À¸~„‰‰»Ã¡µÇÁµ±²›lLNPRR_wytgYbs]XpYk~UF{�ees, $!!6�æèÕØ÷÷ø÷÷øùùùùóôööõõõóõöööûûûûûûûûûûûûùùùùùøùùôõúúùøùû¶™–RazrVi‡ÇƬxˆ‡’ÅÀ¸³­‘nKLMPS`rssvy|ƒ†‹�‘“•™šœ�Ÿ£¥§©©«¬­««ª¨§¦¥¤£ ›°¼ÖðÛÏó÷øõõøùùùùôôööõõõôôôõöûûúúûûûûûûûûùùùùùøøùúúúúõëøð†LZ?HKDG:r¾±�kny•Ƴ§Â½¶´�¥‹wKLNPRZH9:99<=<>=@=::<;;==?@BGLORUY_ciosx~ƒ„€±ÄÏãоï÷øôóøöööõóöööõõõñóéó÷øøø÷ûûûûûûûûøøøøûûûû÷÷ùùôÓùùÜÑÑÒÔÔÕÖÖÕÔÔ×ÙÞÜÛÙ×ÖÖÙØ×ÙÚÜÙLKMOP^lnlllmnopsuuuwwvutsqpopnmmjhgeeb`__]\_»ÀÐÇÛÂç÷øõõøöööõðòööõõôïëÞô÷øøø÷ûûûûûûûûøøøøûùúûîñøù÷Ùúü¶x{}}~€��ƒ…‡ŠŠ‹�Œ���“”••–—˜–JLMKN\nrsru{}€…‡‹ŒŽ’“•”•—˜—˜™›�Ÿž  Ÿ¡££££¢£¯ßÆÚÂÚÐß÷øôôøõõöôîóööõõõðìä÷÷øøøøûûûûûûûûøøøøûûûûðòùùøâüüÕ…{zvvtrrqpprqpoommmmkkihgheLKJNOK: + +  $',048:>CHNTX^chd—æÉÍÇÂÇáöøôôøöööôíñööõõõîëñ÷÷ø÷õöûûûûûûûûøøøøûûûûÑßøõêàüüùØÉÇÅÅÄÄÄÄÅÃÄÄÄÄÂÁÁ¿¿¿½»º¸·´LMLLMNH*  }èÖËÚՏɸùõôùõõõóíñ÷÷öööðêöùùööòôûûûûúúúúùùùùûûûûÅÖöñÝäùùý¶o{�…ˆ��•™� ¢¥©®´¸·¸¹¼ÀÃÆÂLJJLJJG4 + †ëæÇâá½É÷ùõñøõõõôïð÷÷öööïé÷ùùööíðûûûûúúúúùùùùûûûûáêëáÍäùùýÐE(%!KKLLIIH>% ˆíïÓÚÙ¼Îõù÷ñ÷õõõõðñ÷÷öööïç÷ùùööóôûûûûúùùúùùùùûûûúãâåâÞôùùýõ{&#!! !!!!" !#LLKLKIE?-  �êóàÒÏ­Éóùøõøõõõôðð÷÷öööðçõùùööòóûûûûúøøúùùùùûö÷÷æÙÍÚÜôùùýý¯2&$#""!!! !!""!!"!#""$MKLMJFGB5   4¬ðöèÓÖ¥»ðøöôøõõõõñï÷÷÷÷÷ðâòøøööòôûûûûûùôúûûûûüüüæÏÊËÞàôüüûûì`+$#$$!$$""#! ######%'&KIJJIGEB:( N¾ñöìØÎ¶¿ëø÷òõõõõõïêö÷÷÷õëæ÷ø÷öôñôûûûûûöðùúûûûùíöâÉ»Îåéïûüûûû�#)'%$"###""#####!#%%&%&)KHHJIIFC?/ lÒò÷ñßɪ­áööô÷õõõòãÈì÷÷õðéê÷øøöôòöûûûûûìåúûûûûùêùá°¡ÚíöðûüûûûÃ<+($$$'&&$#$$%$#$%&&&),+KIHJJHGD?4# …Þô÷ôäÁ¦ ÒñõòöõóïëÛÃâóòíááóøøøöòîöûú÷øõäòûûûûûîáùâ«—Îìøìöüûûûós(*(&'&&&&&&&&&'('&)*,..IHHIJFECA9(-¢æö÷õฤžÅéòðõôïëèÚÄÙñòçßç÷øøøõðíóýýýýùôúûùùù÷ßÓëÚ¬§Éïûåèüúúúú¨7-,)(''&'''')(&'*-./123IIIHEFECA<0 =¹ìõ÷÷뾬¢¸×èæñóïëçÖ½Óëèßãòøøøøõíêôýýýüïãöûùùù÷ØØóЫºÈóüïðûúúúúã\0-*)(''''('')*+,--0123HHGHHIGEC>4%UÙùöö÷îó¥ºÖÜàôõòìçÜÉÏåÞ×çòøøøøõìèõýýýýéÜöûùùùõâèôÁ¦ÀÓúüòçùúúúúû�(,*+)))*+***+,-/223365GEHIFFDDB?7)kàúóñõí¶¡®ËÓÆæôòåÒÑÇÌáâäñòö÷øøôçäõýýýýöñúûùùøðÚïì°¯ÏëüüúïõúúúúûÈD0,**((*+++++./0344223GGHGGFIFCA<6-!FÁúúööóÚËØ©£»ÌÐÉÐÇÃÇÔÌÀÓçòñí÷ùúúöãßöüüüûïõûûúúöÜçú‘¬Ùöýûû÷éóûûûüüîk0/-/.,-./01212342243DDDEGGECB@<7."`¯÷úöööóáÞĪ»ÆÉ¼ÊÎÈÍÚλÓëõïí÷÷ø÷óÕßöüüüùèóûúùøîÛêò¹‹¦Ìðüûûûìîûûúûüü 1.-.--.-0/0223310110CBDDECDB??<80$,{w³Ù¼µ¿® ¯°§ºÅʶ¶¿Ç¼²º±ÆçóëèñóùùôÕÍôüüü÷âòûûòóòèõ÷¶‚”­àûúúúïÙòûûüüüÜZ111/./0110111310110BABDEEFC@?=;4)  7§Ïðúûí²‘�–Ž�¬ºÆº°¥”Š™§³ÉìôæÚêöôõõâÑòüüüøãíõôðõõñ÷÷ªy˜¤ÐííçÜÛìûûûüüüú’0200010011331110121D?ACEDEECA>;7,#lͺÎ÷ûûûûô®qy¢ ‘‰“§›qw’¢¼ìóßÜíôùùóâÌíüüüüòöûöóúúãîð–n›´È½ÝøúúûûûûüüüüÌM5331121/1220100220?=@BDDDDB@=97.%!¢Ì¯ÐñûŒ™ˆjrut˜¯¥~UhŠ¢ÆìÕÕëõùøðÝÇæüüüùëîìêíìäÚðìˆj’¤Ôýúúúúûûûûü÷ÍŸ`9431121212111100/00@=AAEHGDC@>:62&R¯…A*\qsrmaYWUk•±¤T#’ÊÚòóñøõçÉß÷úúñéñíï÷öíÚòæ€j� Àþøøøøû¿j;=UG7322243122112100110-.?=>@CDEDCA><83* ,0$,Rfgeb_URU]h�¨™S + ŽÈ×ÜïõöóåËÚóùúöôûüøøüöîøæ|b‘«›Çð¹X5?BIL;2222201232332111221011/?<=>BDDA@BA>;4+!  !" !""!$$%$'&(6Q\\_b]ZXZXR^yœ Y (œ¬ÁíõùùõçÍÓîúúúüüüûúú÷ñøÜŠo‡ Œ|Z:;AJOE7355356866544565565553311>=??BBCDCA@>950! "!!#"!""$$%#$$%%&*29GQUWYUTTLDEVWZeX9180>Ž£°òøùùöìÒÕæöúúüüüüùöñìõךry•�M==AJTS<6799788768987677886676765 \ No newline at end of file diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m b/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m new file mode 100755 index 0000000..a5fd7f2 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/readpgm.m @@ -0,0 +1,26 @@ +function img = pgmread(filename) +% function img = pgmread(filename) +% this is my version of pgmread for the pgm file created by XV. +% +% this program also corrects for the shifts in the image from pm file. + + +fid = fopen(filename,'r'); +fscanf(fid, 'P5\n'); +cmt = '#'; +while findstr(cmt, '#'), + cmt = fgets(fid); + if length(findstr(cmt, '#')) ~= 1, + YX = sscanf(cmt, '%d %d'); + y = YX(1); x = YX(2); + end +end + +fgets(fid); + +%img = fscanf(fid,'%d',size); +%img = img'; + +img = fread(fid,[y,x],'uint8'); +img = img'; +fclose(fid); diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m b/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m new file mode 100755 index 0000000..2186a6d --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/simulation.m @@ -0,0 +1,42 @@ +clear + +figure(1);colormap(gray); + +%------------ Parameters -------------------------- +window_size_h = 40; +window_size = 2*window_size_h+1; +noise_level = 40/256; + +% define A and D +x_ext = -0.423; +ext = 1.232; +A = [ext+x_ext, 0.2534; 0.3423,ext]; + +D = [3,1]; + +%------------- compute image I and J --------------- +disp('generating I') +I_init = gen_feature_s(window_size); +[size_y,size_x] = size(I_init); + +%define image center +[center_x,center_y] = find_center(size_x,size_y); + +% adding noise to image I +I = I_init+noise_level*rand(size_y,size_x); +% make sure all intensities are positive +I = I.*(I>0); + +disp('computing J') +J_init = compute_J(A,D,I_init,[center_x,center_y],[window_size_h,window_size_h]); +J = J_init+noise_level*rand(size_y,size_x); +J = J.*(J>0); + + +%------------- compute A and residue ---------------- +c = [center_x,center_y]; +num_iter = 8; w = 9;win_h = [window_size_h,window_size_h]; + +fig_disp = 1; +[Ac,Dc,mask] = compute_AD_disp(I,J,c,c,win_h,num_iter,w,fig_disp); + diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg b/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg new file mode 100755 index 0000000..39ebed5 Binary files /dev/null and b/SD-VBS/common/toolbox/toolbox_basic/affine/sports1_11_28.jpeg differ diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m b/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m new file mode 100755 index 0000000..41b48b9 --- /dev/null +++ b/SD-VBS/common/toolbox/toolbox_basic/affine/test_affine.m @@ -0,0 +1,33 @@ +%%% This is a test program for Affine tracker %%%% + +disp(sprintf('This is a test program of Affine tracker')); + +%% read in images + +disp(sprintf('read in images')); +I = readpgm('pan.0.pgm'); +J = readpgm('pan.1.pgm'); + +figure(1); im(I); colormap(gray); +figure(2); im(J); colormap(gray); + + +figure(1);disp(sprintf('click on the center of a image window')); +c = round(ginput(1)); + +%% compute the displacement of that image window +disp(sprintf('computing...')); + +win_hsize_temp = [8,8]; +w = 3; +num_iter = 6; + +disp_flag = 1; + +win_h = win_hsize_temp + [w,w]; +if disp_flag == 1, + figure_id = 3; + [A,D,mask] = compute_AD_disp(I,J,c,c,win_h,num_iter,w,figure_id); +else + [A,D,mask] = compute_AD(I,J,c,c,win_h,num_iter,w); +end -- cgit v1.2.2