% ========================================================================
% function By = mfBy(yc,para,flag);
% (c) Jan Modersitzki 2009/04/08, see FAIR.2 and FAIRcopyright.m.
%
% MatrixFree B*u for elastic, diffusion, curvature
% computes B*zy or B'*yc (depends on flag, works for dim=2,3)
% where B is implicitly given by the parameters para.
%=========================================================================
function By = mfBy(yc,para,flag);
% default is B*yc
if ~exist('flag','var'), flag = 'By'; end;
% extract parameters
omega = para.omega;
m = para.m;
dim = length(omega)/2;
h = (omega(2:2:end)-omega(1:2:end))./m;
if ~isfield(para,'mu'), para.mu = 0; end;
if ~isfield(para,'lambda'), para.lambda = 0; end;
a = sqrt(para.mu);
b = sqrt(para.mu+para.lambda);
nc = prod(m);
ns = prod(ones(length(m),1)*m+eye(length(m)),2);
flag = [para.regularizer,'-',flag,'-',int2str(dim)];
switch flag
% By for elastic-grad
% yc -> [u1,u2,u3]
%
% dim == 3, dim == 2,
% | d11 |
% | d21 |
% | d31 | | u1 | | d11 |
% | d12 | | | | d21 | | u1 |
% y= | d22 | * | u2 | y = | d12 | * | |
% | d32 | | | | d22 | | u2 |
% | d13 | | u3 | | d11 d22 |
% | d23 |
% | d33 |
% | d11 d22 d33 |
case 'mfElastic-By-2'
y1 = reshape(yc(1:ns(1)),m(1)+1,m(2));
y2 = reshape(yc(ns(1)+(1:ns(2))),m(1),m(2)+1);
p1 = nc; % 1:p1 d11 y1
p2 = p1+(m(1)+1)*(m(2)-1); % p1+1:p2 d21 y1
p3 = p2+(m(1)-1)*(m(2)+1); % p2+1:p3 d12 y2
p4 = p3+nc; % p3+1:p4 d22 y2
p5 = p4+nc; % p4+1:p5 div y
By = zeros(p5,1);
d1 = @(Y) reshape(Y(2:end,:)-Y(1:end-1,:),[],1)/h(1);
d2 = @(Y) reshape(Y(:,2:end)-Y(:,1:end-1),[],1)/h(2);
By(1:p4) = [d1(y1);d2(y1);d1(y2);d2(y2)];
% div y = d11 y1 + d22 y2
By(p4+1:p5) = By(1:p1) + By(p3+1:p4);
By(1:p4) = a*By(1:p4);
By(p4+1:p5) = b*By(p4+1:p5);
case 'mfElastic-BTy-2'
% the input yc is the result of B*y, therefore it can be splitted into 5
% parts: d11u1, d21u1,d12u2,d22u2,Divy
p1 = nc; % 1:p1 d11 y1
p2 = p1+(m(1)+1)*(m(2)-1); % p1+1:p2 d21 y1
p3 = p2+(m(1)-1)*(m(2)+1); % p2+1:p3 d12 y2
p4 = p3+nc; % p3+1:p4 d22 y2
p5 = p4+nc; % p4+1:p5 div y
By = zeros(sum(ns),1);
d1T = @(Y) reshape([-Y(1,:);Y(1:end-1,:)-Y(2:end,:);Y(end,:)],[],1)/h(1);
d2T = @(Y) reshape([-Y(:,1),Y(:,1:end-1)-Y(:,2:end),Y(:,end)],[],1)/h(2);
By(1:ns(1)) = a*d1T(reshape(yc( 1:p1),m)) ...
+ a*d2T(reshape(yc(p1+1:p2),m(1)+1,m(2)-1)) ...
+ b*d1T(reshape(yc(p4+1:p5),m));
By(1+ns(1):end) = a*d1T(reshape(yc(p2+1:p3),m(1)-1,m(2)+1)) ...
+ a*d2T(reshape(yc(p3+1:p4),m)) ...
+ b*d2T(reshape(yc(p4+1:p5),m));
case 'mfElastic-By-3'
y1 = reshape(yc(1:ns(1)),m(1)+1,m(2),m(3));
y2 = reshape(yc(ns(1)+(1:ns(2))),m(1),m(2)+1,m(3));
y3 = reshape(yc(ns(1)+ns(2)+(1:ns(3))),m(1),m(2),m(3)+1);
p1 = nc; % 1:p1 d11 y1
p2 = p1+(m(1)+1)*(m(2)-1)*m(3); % p1+1:p2 d21 y1
p3 = p2+(m(1)+1)*m(2)*(m(3)-1); % p2+1:p3 d31 y1
p4 = p3+(m(1)-1)*(m(2)+1)*m(3); % p3+1:p4 d12 y2
p5 = p4+nc; % p4+1:p5 d22 y2
p6 = p5+m(1)*(m(2)+1)*(m(3)-1); % p5+1:p6 d32 y2
p7 = p6+(m(1)-1)*m(2)*(m(3)+1); % p6+1:p7 d13 y3
p8 = p7+m(1)*(m(2)-1)*(m(3)+1); % p7+1:p8 d23 y3
p9 = p8+nc; % p8+1:p9 d33 y3
p10 = p9+nc; % p9+1:p10 div y
By = zeros(p10,1);
d1 = @(Y) reshape(Y(2:end,:,:)-Y(1:end-1,:,:),[],1)/h(1);
d2 = @(Y) reshape(Y(:,2:end,:)-Y(:,1:end-1,:),[],1)/h(2);
d3 = @(Y) reshape(Y(:,:,2:end)-Y(:,:,1:end-1),[],1)/h(3);
By(1:p9) = [...
d1(y1);d2(y1);d3(y1);...
d1(y2);d2(y2);d3(y2);...
d1(y3);d2(y3);d3(y3) ];
% div y = d11 y1 + d22 y2 + d33 y3
By(p9+1:p10) = By(1:p1) + By(p4+1:p5)+ By(p8+1:p9);
By( 1:p9 ) = a* By(1:p9);
By(p9+1:p10) = b* By(p9+1:p10);
case 'mfElastic-BTy-3'
% the input yc is the result of B*y, therefore it can be splitted into 10
% parts: d11y1, d21y1,d31y1,d12y2,d22y2,d32y2,d13y3,d23y3,u33y3,Divy
p1 = nc; % 1:p1 d11 y1
p2 = p1+(m(1)+1)*(m(2)-1)*m(3); % p1+1:p2 d21 y1
p3 = p2+(m(1)+1)*m(2)*(m(3)-1); % p2+1:p3 d31 y1
p4 = p3+(m(1)-1)*(m(2)+1)*m(3); % p3+1:p4 d12 y2
p5 = p4+nc; % p4+1:p5 d22 y2
p6 = p5+m(1)*(m(2)+1)*(m(3)-1); % p5+1:p6 d32 y2
p7 = p6+(m(1)-1)*m(2)*(m(3)+1); % p6+1:p7 d13 y3
p8 = p7+m(1)*(m(2)-1)*(m(3)+1); % p7+1:p8 d23 y3
p9 = p8+nc; % p8+1:p9 d33 y3
p10 = p9+nc; % p9+1:p10 div y
By = zeros(sum(ns),1);
d1T = @(Y) reshape(d1t(Y),[],1)/h(1);
d2T = @(Y) reshape(d2t(Y),[],1)/h(2);
d3T = @(Y) reshape(d3t(Y),[],1)/h(3);
By(1:ns(1)) = a*d1T(reshape(yc( 1:p1),m)) ...
+ a*d2T(reshape(yc(p1+1:p2),m(1)+1,m(2)-1,m(3))) ...
+ a*d3T(reshape(yc(p2+1:p3),m(1)+1,m(2),m(3)-1)) ...
+ b*d1T(reshape(yc(p9+1:p10),m));
By(ns(1)+(1:ns(2))) = ...
a*d1T(reshape(yc(p3+1:p4),m(1)-1,m(2)+1,m(3))) ...
+ a*d2T(reshape(yc(p4+1:p5),m)) ...
+ a*d3T(reshape(yc(p5+1:p6),m(1),m(2)+1,m(3)-1)) ...
+ b*d2T(reshape(yc(p9+1:p10),m));
By(ns(1)+ns(2)+1:end) = ...
a*d1T(reshape(yc(p6+1:p7),m(1)-1,m(2),m(3)+1)) ...
+ a*d2T(reshape(yc(p7+1:p8),m(1),m(2)-1,m(3)+1)) ...
+ a*d3T(reshape(yc(p8+1:p9),m)) ...
+ b*d3T(reshape(yc(p9+1:p10),m));
case {'mfCurvature-By-2','mfCurvature-BTy-2'},
%
% By = | \Delta y^1 0 | = | d_1^2 y^1 + d_2^2 y^1 |
% | 0 \Delta y^2 | = | d_1^2 y^2 + d_2^2 y^2 |
yc = reshape(yc,[m,2]);
d2 = @(i) D2(i,omega,m);
yc(:,:,1) = d2(1)*yc(:,:,1) + yc(:,:,1)*d2(2);
yc(:,:,2) = d2(1)*yc(:,:,2) + yc(:,:,2)*d2(2);
By = yc(:);
case {'mfCurvature-By-3','mfCurvature-BTy-3'},
%
% | \Delta y^1 0 0 | = | d_1^2 y^1 + d_2^2 y^1 + d_3^2 y^1 |
% By = | 0 \Delta y^2 0 | = | d_1^2 y^2 + d_2^2 y^2 + d_3^2 y^2 |
% | 0 0 \Delta y^3 | = | d_1^2 y^3 + d_2^2 y^3 + d_3^2 y^3 |
% efficient implementation of Bcurvature*Y
n = prod(m); % number of voxels
yc = reshape(yc,[m,3]); % note that now yc(:,:,:,ell) is the ell-th
% component of Y=(Y^1,Y^2,Y^3)
% of size m(1)-by-m(2)-by-m(3)
By = zeros(numel(yc),1); % allocate memory for the output
d2 = @(i) D2(i,omega,m); % this is a shortcut to the discrete second derivative
% the following line is a shortcut for
% - permuting the 3d-array using the permutation J
% - reshape it to a 2D-array of size q-by-prod(m)/q, where q=m(J(1))
% - multiply by A (which is q-by-q)
% - undo the reshape, i.e. make the result to m(J(1))-by-m(J(2))-by-m(J(3))
% - undo the permutation
operate = @(A,z,J) ipermute(reshape(A*reshape(permute(z,J),m(J(1)),[]),m(J)),J);
% run over all compunents y^ell of Y=(Y^1,Y^2,Y^3)
for ell=1:3,
% compute
% (I_3\otimes I_2\otimes d2(1) + I_3\otimes d2(2)\otimes I_1 ...
% + d2(3)\otimes I_2\otimes I_1) y^ell
for k=1:3,
z = operate(d2(k),yc(:
没有合适的资源?快使用搜索试试~ 我知道了~
flexible algorithms for image registration
共305个文件
m:288个
jpg:12个
mat:2个
4星 · 超过85%的资源 需积分: 10 27 下载量 31 浏览量
2011-05-25
22:27:38
上传
评论
收藏 2.49MB ZIP 举报
温馨提示
关于图像配准的各个部分介绍,包括相似性测度,优化算法,形变参量,还有很多不同配准的原始代码
资源推荐
资源详情
资源评论
收起资源包目录
flexible algorithms for image registration (305个子文件)
rhoSplineC.cc 12KB
US.jpg 74KB
USfair.jpg 27KB
HNSP-T.jpg 11KB
HNSP-R.jpg 11KB
PET-CT-CT.jpg 10KB
PET-CT-PET.jpg 9KB
hands-R.jpg 7KB
knee2D-T.jpg 6KB
knee2D-R.jpg 6KB
hands-T.jpg 6KB
MRIhead-T.jpg 6KB
MRIhead-R.jpg 5KB
mfBy.m 16KB
contents.m 15KB
FAIRplots.m 11KB
TrustRegion.m 10KB
MLIR.m 9KB
mfPu.m 8KB
GaussNewtonArmijo.m 8KB
getElasticMatrixStg.m 8KB
getMultilevel.m 7KB
SteepestDescent.m 6KB
lBFGS.m 6KB
options.m 6KB
NPIRobjFctn.m 6KB
MLPIR.m 6KB
mfvcycle.m 6KB
NGFcross.m 6KB
plotGrid.m 6KB
regularizer.m 6KB
imgmontage.m 6KB
rhoSpline.m 5KB
MIcc.m 5KB
E7.m 5KB
NGFdot.m 5KB
PIRobjFctn.m 5KB
PIRBFGSobjFctn.m 5KB
MIspline.m 5KB
NPIRBFGSobjFctn.m 5KB
getSplineCoefficients.m 5KB
stg2center.m 5KB
linearInter3D.m 5KB
viewImage.m 5KB
grid2grid.m 5KB
showResults.m 5KB
E4_US.m 5KB
splineInter3D.m 5KB
plotMLIterationHistory.m 4KB
BigTutorial2D.m 4KB
splineInter2D.m 4KB
PIRregularizer.m 4KB
LagPIRobjFctn.m 4KB
LMreg.m 4KB
YTPS.m 4KB
linearInter2D.m 4KB
viewSlices.m 4KB
nodal2center.m 4KB
E4_US_trafos.m 4KB
trafo.m 4KB
getLandmarks.m 4KB
splineInter1D.m 4KB
inter.m 4KB
E7_extended.m 4KB
mfAy.m 4KB
linearInter1D.m 4KB
rigid3D.m 4KB
volView.m 4KB
Armijo.m 4KB
splineTransformation3Dsparse.m 4KB
getStaggeredGrid.m 4KB
getTPSMatrix.m 4KB
splineTransformation2Dsparse.m 4KB
plotLM.m 4KB
getCenteredGrid.m 4KB
E7_Hands_distance_rotation_ext.m 4KB
testRegularizer.m 3KB
linearMatlab3D.m 3KB
splineTransformation2D.m 3KB
getNodalGrid.m 3KB
matVecQw.m 3KB
viewIP.m 3KB
overlayImage2D.m 3KB
SSDweighted.m 3KB
plotIterationHistory.m 3KB
SSD.m 3KB
rotation2D.m 3KB
NCC.m 3KB
evalTPS.m 3KB
getTPScoefficients.m 3KB
linearMatlab2D.m 3KB
viewImage2D.m 3KB
distance.m 3KB
checkDerivative.m 3KB
getCurvatureMatrix.m 3KB
contents.m 3KB
viewImage2Dsc.m 3KB
rigid2D.m 3KB
affine2D.m 3KB
E9_HNSP_NPIR_pre.m 3KB
共 305 条
- 1
- 2
- 3
- 4
zhangxyn
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于STM32使用HAL库实现USB组合设备之多路CDC源码+说明文档.zip
- 金融贸易项目springboot
- mybatis动态sqlSQL 映射 XML 文件是所有 sql 语句
- 基于基于STM32的智能家居系统源码+qt上位机源码.zip
- 深圳房地产资源数据报告
- 基于stm32的智能门禁系统源码+设计文档+演示视频.zip
- cef + chromium 完整源码支持h265和h264
- 基于SpringBoot的API管理平台源代码+数据库,以项目的形式管理API文档,可以进行API的编辑、测试、Mock等操作
- protobuf 3.11版本,静态编译
- 2023NOC创客智慧编程赛项真题图形化-选拔赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页