CT图像三维重建(附源码)

合集下载

医学CT三维重建

医学CT三维重建

30
首都师范大学学报 (自然科学版)
2004 年
原始数据做“预处理”“, 图像重建”和“图像后续处 理”就可得到反映人体某断面几何结构的灰度图像. 例如 X 射线 CT ,此灰度图像反映了人体组织对 X 射 线的不同吸收系数 ,同一吸收系数具有相同的灰度 显示. 因为人体内不同组织的元素种类和密度不同 , 对 X 射线的吸收系数不同. 如果某一组织 (正常情 况下应具有相同的灰度) 的局部发生了病变 ,医生可 明显观察到此组织局部图像灰度的变化的直观显 示 ,从而帮助医生做出诊断.
下面分别对这几个过程中所涉及的关键技术进 行分析 :
1 获取断层图像信息
要进行三维重建 ,必须先得到清晰的二维断层 图像. 医学领域中 ,利用 X 射线 CT ,放射性核素 CT , 超声 CT 和核磁共振 CT 等技术获得人体断层图象. CT 图像向我们展示了人体内部有关病变的信息 ,把
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.
体素的获得有两种方法[4] : (1) 控制 CT 机使其 断层间隔减小 ,直至等于断层内的分辨率. 然而这将 增加检查成本 ,而且一般的 CT 机无法达到如此高 的分辨率. (2) 用计算机图像处理的方法 ,对现有的 断层图像进行插值运算 ,以获得立方体素表示的三 维物体. 插值后 ,断层图像数目增加 ,相当于层厚减 薄 ,这是国际上普遍采用的方法. 值得注意的是 ,插 值只是改变了断层间空间分辨率 ,使三维数据的处 理 、分析和显示更加方便 ,并没有产生新信息.
其次将医生感兴趣的组织从断层图像中分割开来再次在相邻两断层图像间进行内因为断层扫描间距一般比二维图像数据的象素尺寸要大以产生空间三个方向具有相同或相差不最后将重建后的三维图像数据在计算机屏幕上进行立体感显示要对它进行各种几何变换的运算实现多种投影显式方式及几何尺寸的测量等完成任意方位断层的重构任意方位立体视图手术摸拟和医学教学等

CT图像三维重建附源码

CT图像三维重建附源码

程序流图:MATLAB 源码: clc; clear all;close all;% load mri %载入mri 数据,是matlab 自带库 % ph = squeeze(D); %压缩载入的数据D ,并赋值给phph = phantom3d(128);prompt={'Enter the Piece num(1 to 128):'}; %提示信息“输入1到27的片的数字” name='Input number'; %弹出框名称defaultanswer={'1'}; %默认数字numInput=inputdlg(prompt,name,1,defaultanswer) %弹出框,并得到用户的输入信息P= squeeze(ph(:,:,str2num(cell2mat(numInput))));%将用户的输入信息转换成数字,并从ph 中得到相应的片信息Pimshow(P) %展示图片PD = 250; %将D 赋值为250,是从扇束顶点到旋转中心的像素距离。

生成128的图片信息 输入图片数字选择 对图片信息进行预处理,并进行展示 用函数fanbeam 进行映射,得到扇束的数据,并展示 用函数ifanbeam 根据扇束投影数据重建图像,并展示计算重建图像和原图的性噪比,并进行输出 结束dsensor1 = 2; %正实数指定扇束传感器的间距2F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1); %通过P,D等计算扇束的数据值dsensor2 = 1; %正实数指定扇束传感器的间距1F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2); %通过P,D等计算扇束的数据值dsensor3 = 0.25 %正实数指定扇束传感器的间距0.25 [F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,...'FanSensorSpacing',dsensor3); %通过P,D等计算扇束的数据值,并得到扇束传感器的位置sensor_pos3和旋转角度fan_rot_angles3figure, %创建窗口imagesc(fan_rot_angles3, sensor_pos3, F3) %根据计算出的位置和角度展示F3的图片colormap(hot); %设置色图为hotcolorbar; %显示色栏xlabel('Fan Rotation Angle (degrees)') %定义x坐标轴ylabel('Fan Sensor Position (degrees)') %定义y坐标轴output_size = max(size(P)); %得到P维数的最大值,并赋值给output_sizeIfan1 = ifanbeam(F1,D, ...'FanSensorSpacing',dsensor1,'OutputSize',output_size);%根据扇束投影数据F1及D等数据重建图像figure, imshow(Ifan1) %创建窗口,并展示图片Ifan1title('图一');disp('图一和原图的性噪比为:');result=psnr1(Ifan1,P);Ifan2 = ifanbeam(F2,D, ...'FanSensorSpacing',dsensor2,'OutputSize',output_size);%根据扇束投影数据F2及D等数据重建图像figure, imshow(Ifan2) %创建窗口,并展示图片Ifan2disp('图二和原图的性噪比为:');result=psnr1(Ifan2,P);title('图二');Ifan3 = ifanbeam(F3,D, ...'FanSensorSpacing',dsensor3,'OutputSize',output_size);%根据扇束投影数据F3及D等数据重建图像figure, imshow(Ifan3) %创建窗口,并展示图片Ifan3title('图三');disp('图三和原图的性噪比为:');result=psnr1(Ifan3,P);function [p,ellipse]=phantom3d(varargin)%PHANTOM3D Three-dimensional analogue of MATLAB Shepp-Logan phantom% P = PHANTOM3D(DEF,N) generates a 3D head phantom that can% be used to test 3-D reconstruction algorithms.%% DEF is a string that specifies the type of head phantom to generate.% Valid values are:%% 'Shepp-Logan' A test image used widely by researchers in% tomography% 'Modified Shepp-Logan' (default) A variant of the Shepp-Logan phantom % in which the contrast is improved for better % visual perception.%% N is a scalar that specifies the grid size of P.% If you omit the argument, N defaults to 64.%% P = PHANTOM3D(E,N) generates a user-defined phantom, where each row% of the matrix E specifies an ellipsoid in the image. E has ten columns,% with each column containing a different parameter for the ellipsoids:%% Column 1: A the additive intensity value of the ellipsoid% Column 2: a the length of the x semi-axis of the ellipsoid% Column 3: b the length of the y semi-axis of the ellipsoid% Column 4: c the length of the z semi-axis of the ellipsoid% Column 5: x0 the x-coordinate of the center of the ellipsoid% Column 6: y0 the y-coordinate of the center of the ellipsoid% Column 7: z0 the z-coordinate of the center of the ellipsoid% Column 8: phi phi Euler angle (in degrees) (rotation about z-axis)% Column 9: theta theta Euler angle (in degrees) (rotation about x-axis)% Column 10: psi psi Euler angle (in degrees) (rotation about z-axis)%% For purposes of generating the phantom, the domains for the x-, y-, and% z-axes span [-1,1]. Columns 2 through 7 must be specified in terms% of this range.%% [P,E] = PHANTOM3D(...) returns the matrix E used to generate the phantom.%% Class Support% -------------% All inputs must be of class double. All outputs are of class double.%% Remarks% -------% For any given voxel in the output image, the voxel's value is equal to the% sum of the additive intensity values of all ellipsoids that the voxel is a% part of. If a voxel is not part of any ellipsoid, its value is 0.%% The additive intensity value A for an ellipsoid can be positive or negative;% if it is negative, the ellipsoid will be darker than the surrounding pixels.% Note that, depending on the values of A, some voxels may have values outside % the range [0,1].%% Example% -------% ph = phantom3d(128);% figure, imshow(squeeze(ph(64,:,:)))%% Copyright 2005 Matthias Christian Schabel (matthias @ stanfordalumni . org) % University of Utah Department of Radiology% Utah Center for Advanced Imaging Research% 729 Arapeen Drive% Salt Lake City, UT 84108-1218%% This code is released under the Gnu Public License (GPL). For more information, % see : /copyleft/gpl.html%% Portions of this code are based on phantom.m, copyrighted by the Mathworks %[ellipse,n] = parse_inputs(varargin{:});p = zeros([n n n]);rng = ( (0:n-1)-(n-1)/2 ) / ((n-1)/2);[x,y,z] = meshgrid(rng,rng,rng);coord = [flatten(x); flatten(y); flatten(z)];p = flatten(p);for k = 1:size(ellipse,1)A = ellipse(k,1); % Amplitude change for this ellipsoidasq = ellipse(k,2)^2; % a^2bsq = ellipse(k,3)^2; % b^2csq = ellipse(k,4)^2; % c^2x0 = ellipse(k,5); % x offsety0 = ellipse(k,6); % y offsetz0 = ellipse(k,7); % z offsetphi = ellipse(k,8)*pi/180; % first Euler angle in radianstheta = ellipse(k,9)*pi/180; % second Euler angle in radianspsi = ellipse(k,10)*pi/180; % third Euler angle in radianscphi = cos(phi);sphi = sin(phi);ctheta = cos(theta);stheta = sin(theta);cpsi = cos(psi);spsi = sin(psi);% Euler rotation matrixalpha = [cpsi*cphi-ctheta*sphi*spsi cpsi*sphi+ctheta*cphi*spsi spsi*stheta;-spsi*cphi-ctheta*sphi*cpsi -spsi*sphi+ctheta*cphi*cpsi cpsi*stheta;stheta*sphi -stheta*cphi ctheta];% rotated ellipsoid coordinatescoordp = alpha*coord;idx = find((coordp(1,:)-x0).^2./asq + (coordp(2,:)-y0).^2./bsq + (coordp(3,:)-z0).^2./csq <= 1);p(idx) = p(idx) + A;endp = reshape(p,[n n n]);return;function out = flatten(in)out = reshape(in,[1 prod(size(in))]);return;function [e,n] = parse_inputs(varargin)% e is the m-by-10 array which defines ellipsoids% n is the size of the phantom brain imagen = 128; % The default sizee = [];defaults = {'shepp-logan', 'modified shepp-logan', 'yu-ye-wang'};for i=1:narginif ischar(varargin{i}) % Look for a default phantom def = lower(varargin{i});idx = strmatch(def, defaults);if isempty(idx)eid = sprintf('Images:%s:unknownPhantom',mfilename);msg = 'Unknown default phantom selected.';error(eid,'%s',msg);endswitch defaults{idx}case 'shepp-logan'e = shepp_logan;case 'modified shepp-logan'e = modified_shepp_logan;case 'yu-ye-wang'e = yu_ye_wang;endelseif numel(varargin{i})==1n = varargin{i}; % a scalar is the image size elseif ndims(varargin{i})==2 && size(varargin{i},2)==10e = varargin{i}; % user specified phantomelseeid = sprintf('Images:%s:invalidInputArgs',mfilename);msg = 'Invalid input arguments.';error(eid,'%s',msg);endend% ellipse is not yet definedif isempty(e)e = modified_shepp_logan;endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default head phantoms: % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%function e = shepp_logane = modified_shepp_logan;e(:,1) = [1 -.98 -.02 -.02 .01 .01 .01 .01 .01 .01];return;function e = modified_shepp_logan%% This head phantom is the same as the Shepp-Logan except% the intensities are changed to yield higher contrast in% the image. Taken from Toft, 199-200.%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .810 0 0 0 0 0 0-.8 .6624 .874 .780 0 -.0184 0 0 0 0-.2 .1100 .310 .220 .22 0 0 -18 0 10-.2 .1600 .410 .280 -.22 0 0 18 0 10.1 .2100 .250 .410 0 .35 -.15 0 0 0.1 .0460 .046 .050 0 .1 .25 0 0 0.1 .0460 .046 .050 0 -.1 .25 0 0 0.1 .0460 .023 .050 -.08 -.605 0 0 0 0.1 .0230 .023 .020 0 -.606 0 0 0 0.1 .0230 .046 .020 .06 -.605 0 0 0 0 ]; return;function e = yu_ye_wang%% Yu H, Ye Y, Wang G, Katsevich-Type Algorithms for Variable Radius Spiral Cone-Beam CT%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .900 0 0 0 0 0 0-.8 .6624 .874 .880 0 0 0 0 0 0-.2 .4100 .160 .210 -.22 0 -.25 108 0 0-.2 .3100 .110 .220 .22 0 -.25 72 0 0.2 .2100 .250 .500 0 .35 -.25 0 0 0.2 .0460 .046 .046 0 .1 -.25 0 0 0.1 .0460 .023 .020 -.08 -.65 -.25 0 0 0.1 .0460 .023 .020 .06 -.65 -.25 90 0 0.2 .0560 .040 .100 .06 -.105 .625 90 0 0-.2 .0560 .056 .100 0 .100 .625 0 0 0 ];return;% func——计算两幅图像的psnr值function result=psnr1(in1,in2)z=mse(in1,in2);result=10*log10(255.^2/z)% plot(result)function z=mse(x,y)if ndims(x)==3x=rgb2gray(x);endif ndims(y)==3y=rgb2gray(y);endx=double(x);y=double(y);[m1,n1]=size(x);[m2,n2]=size(y);m=min(m1,m2);n=min(n1,n2);z=0;for i=1:mfor j=1:nz=z+(x(i,j)-y(i,j)).^2;endendz=z/(m*n);。

CT三维重建指南.pdf

CT三维重建指南.pdf

CT三维重建指南1、脊柱重建:腰椎:西门子及GE图像均发送至西门子工作站,进入3D选项卡A、椎体矢状位及冠状位:a. 选择骨窗薄层图像(西门子 1mm 70s;GE BONE),载入3D重建,调整定位线,使椎体冠状位、矢状位定位线与解剖位置一致,并将横断位定位线与两者垂直,将三幅图像模式改为MPR;b. 横断位作为定位相,做矢状位重建,打开定位线选项卡,点击垂直定位线,变换数字顺序,使其从右向左,选择层厚3mm,层间距3mm,方向平行于棘突-椎体轴线,两边范围包全椎体及横突根部(一般为19层),点击确定,保存;c. 矢状位作为定位相,打开曲面重建选项卡,沿各椎体中心弧度画定位相曲线,范围包全,双击结束,选择层厚3mm,层间距3mm,变换数字顺序,使其从前向后,范围前至椎体前缘,后至棘突根部(一般为19层),点击确定,保存。

B、椎间盘重建:a. 选择软组织窗薄层图像(西门子 1mm 30s;GE STND),载入3D重建,调整定位线,使椎体冠状位、矢状位定位线与解剖位置一致,并将横断位定位线与两者垂直,将三幅图像模式改为MPR;b. 矢状位作为定位相,做椎间盘重建,打开定位线选项卡,点击水平定位线,变换数字顺序,使其从上向下,选择层厚3mm,层间距3mm,层数5层,方向沿椎间隙走行方向,做L1/2-L5/S1椎间盘,注意右下角图像放大,逐个保存。

注意:脊柱侧弯患者,椎间盘重建过程中需不断调整冠状位定位相上矢状定位线(红色),使其保持与相应椎间隙垂直。

C、椎体横断位重建:椎体骨质病变者,如压缩性骨折、骨转移、PVP术后等病人,加做椎体横断位重建,矢状位图像做定位相,沿病变椎体轴向,做横断位重建,注意重建图像放大,保存。

打片:矢状位及冠状位二维一张:8×5;椎间盘一张:6×5;若为椎体骨质病变者,椎间盘图像不打,打椎体横断位重建图像,共两张胶片。

颈椎A、椎体矢状位及冠状位:a. 选择骨窗薄层图像(西门子 1mm 70s;GE BONE),载入3D重建,调整定位线,使椎体冠状位、矢状位定位线与解剖位置一致,并将横断位定位线与两者垂直,将三幅图像模式改为MPR;b. 横断位作为定位相,做矢状位重建,打开定位线选项卡,点击垂直定位线,变换数字顺序,使其从右向左,选择层厚3mm,层间距3mm,方向平行于棘突-椎体轴线,两边范围包全椎体及横突根部(一般为17-19层),点击确定,保存;c. 矢状位作为定位相,打开曲面重建选项卡,沿各椎体中心弧度画定位相曲线,范围包全,注意从斜坡开始,双击结束,选择层厚3mm,层间距3mm,变换数字顺序,使其从前向后,范围前至椎体前缘,后至棘突根部(一般为15-17层),点击确定,保存。

数学建模之CT的图像重建

数学建模之CT的图像重建
2
Ax b min Axb xRn
2、无穷解的情形:
n
aij x j bi (i 1, 2, , n ) Ax b 无 穷 多 解
j 1
此时处理方式为: min xT x
Ax b s.t.Ax b
实践与思考题:P114,习题1
将待测物体的截面分成若干个体素每个体素为边长为的正方形设有一束射线的宽度为四模型的建立射线的强度以一定的速率被体素内的组织吸收而衰减衰减速率正比于该体素的衰减系个体素的射线密度为线性方程束射线我们就可以建如果有个体素记束射线穿过连续如果第射线的强度个体素的离开第射线的强度个体素的进入第射线密度为个体素的定义第99910将待检测的截面分成个体素并将它从束穿过个体素这些体素的编号为束穿过个体素这些体素的编号为其他所以式可写为若总共有束射线个体素这样ct图像重建的数学模型为
j1
ji1
(i1,2, ,n,k0,1,2, )
考 虑 方 程 组 : jn 1a aiijixja b iii (i1 ,2, ,n)
xik1xik
(bi
i1
aij
aii a j1 ii
xkj1jni1aaiiji
xkj)
(i1,2, ,n,k0,1,2, )
xk1 i
xik
( bi
某物 C质 值 T1的 00该 0物 水 质 水
CT值水1000水 水 水0
CT值 空 气10000 水 水1000
C T值 反 映 物 质 的 密 度 , 物 质 的 C T值 越 高 , 物 质 的 密 度 越 高
三、CT的结构与原理
平面CT的成像原理
体素、矩阵和象素
体 素:将选定层面分成若干个体积相同的立方体 数字矩阵:每个体素的X线衰减系数排列成矩阵 像 素:一幅CT的图象由许多按矩阵排列的小单元组 成,这些组成图象的基本单元称为像素

CT图像重建算法与三维可视化技术

CT图像重建算法与三维可视化技术

CT图像重建算法与三维可视化技术医疗行业一直是科技创新的重点,特别是在影像学领域,病人的诊断和治疗都需要借助高科技的医疗设备和技术。

计算机断层扫描技术(CT)是一项主流技术,它可以非常精确地显示人体内部的结构和器官。

CT扫描产生的图像数据是由计算机三维图像重建算法进行处理,然后再通过三维可视化技术呈现出来。

一、CT扫描的原理和流程CT扫描使用的是一种非常特殊的X射线机器,它可以沿着不同的方向从多个角度对身体进行扫描,然后收集图像数据。

这些数据包含了身体内部所有的结构和器官信息,但是它们是以二维的方式呈现的,需要通过三维图像重建算法进行处理。

CT图像重建算法的基本原理是将二维扫描数据通过计算机进行处理,将它们转化为三维的模型图像,这些模型图像可以用来呈现人体结构和器官的实际情况。

CT图像重建算法的种类较多,常见的包括基于插值法的Feldkamp算法及其变种、基于迭代法的ART算法、基于傅里叶变换的FBP算法和统计学方法。

二、三维可视化技术三维可视化技术一直是科技发展的焦点,它是将虚拟的三维物体以真实的方式呈现在屏幕上。

医学界常用的三维可视化技术主要包括直接体绘制,光线追踪、容积渲染、表面重建等多种方式。

直接体绘制是指在三维模型中直接绘制三维物体的方法。

光线追踪可以在保持真实性的同时,采用光线追踪技术来求解物体的表现方式,这种方法可以表现阴影、反射和折射等效应。

容积渲染则是将数据集表示为一组体元素(voxel),并利用光线传播和有效的颜色映射技术来生成具有透明度和色彩信息的图像。

表面重建是将容积表面转换为三角形网格的过程,从而实现三维模型的表面可视化。

三、可视化技术在医学诊断中的应用三维可视化技术在医疗领域应用广泛,它可以以更加直观的方式呈现病人身体的结构和器官情况,帮助医生诊断和制定治疗方案。

比如,医生可以使用三维可视化技术对肿瘤、脊柱和骨骼等进行预览,预测手术效果,规划术前准备,进行手术操作。

同时,在教育领域,三维可视化技术还可以对疾病的发展变化进行演示,帮助学生更好地理解医学知识,提高教育效果和学术思考能力。

MATLAB编程实现连续断层工业CT图像的三维重建_张爱东

MATLAB编程实现连续断层工业CT图像的三维重建_张爱东

第26卷 第4期核电子学与探测技术V ol.26 N o.42006年 7月Nuclear Electr onics &Detection T echnolo gyJuly 2006M AT LA B 编程实现连续断层工业CT 图像的三维重建张爱东,李 炬,孙灵霞(中国工程物理研究院,四川绵阳621900)摘要:工业CT 图像的三维重建是无损检测领域的重要组成部分。

应用M A T L AB 编程,对连续多层工业CT 图像进行了三维重建,获得了具有较好立体感显示的三维图像,通过对三维图像的剖切、透明等显示,可以观察到物体的内部结构,得到了更直观和丰富的物体检测信息。

关键词:工业CT ;M A T L A B;三维重建中图分类号: T L99 文献标识码: A 文章编号: 0258-0934(2006)04-0489-03收稿日期:2005-11-19作者简介:张爱东(1981)),女,湖南娄底人,硕士生,从事核探测技术、数字图像处理等的研究工业CT 图像的三维重建技术综合了计算机图形学、计算机视觉和计算机图像处理等学科,是计算机科学可视化的重要组成部分,也是无损检测领域的一门重要技术。

通过二维序列断层图像重建出具有直观立体效果的图像,展现被检测物体的三维结构与形态,使技术人员可以多方位地观察物体的结构,积极地参与计算机的操作,对物体的空间结构或者存在的缺陷,可以进行比较准确的定位分析,从而提高检测的方便性和准确率。

基于连续断层CT 图像的三维重建是指从一系列平行断面图像数据中恢复被重建对象原有的三维形貌,可以分为两种方法:面绘制和直接体绘制[1],其中面绘制又包括基于轮廓的表面重建、基于等值面的间接体三维重建[2]等。

本论文是在M AT LAB [3,4]环境下用基于等值面的间接体三维重建方法对空气滤清器、手动式吸锡器等被检测物体进行了三维重建。

1 三维重建本实验用M ATLAB 程序开发并实现了CT 图像的等值面三维重建,即将二维CT 图像进行灰度调整、平滑滤波、锐化滤波等增强处理和图像分割,形成三维体数据,应用等值面绘制方法对这些数据进行三维重建;同时,编程实现了对重建三维图像的任意位置的剖切显示和透明显示。

CT图像三维重建系统的设计与实现

CT图像三维重建系统的设计与实现

2 开 发 工具 及 开发 原 理
2 . 1 开发平 台
本 系 统 采 用 的开 发 平 台 是 V i s u a l C + + 和V T K ( V i — s u a i z a t i 0 n T o o l k i t ) .系 统 采用 C + + 进行系统界面设计 、 核 心 算 法 编程 和 系 统 集 成 . 用 V T K编 程 实 现 三 维 可 视
床 实 践 提 供 可 视化 和 模 拟 手 术 信 息 ,可 以大 大 提 高 医
配准 等操作 , 可将 原始数据分成物体 、 背景 、 骨骼 、 软组 织等 多种类 型 . 并将感兴趣的区域提取 出来圆 。
( 3 ) 支持海量 数据快速 分析计算 . 快速 实现 C T图
像三维医学体数据场 的可视化 .包括面绘制 和体绘制
效地去除随机噪声 . 而 且 对 边 缘 的模 糊 程 度较 小 。
测 量 等 功 能
3 . 3 三 维 绘 制技 术
经过图像分割等二维处理 .把 图像 中感兴 趣的 区
域 提 取 出来 后 , 需 要 对 这 些 数 据 进行 三 维 绘 制 . 本 系统
三维绘制模块中使用 面绘制和体绘制技术进行重建 面绘 制处理 的是整个体 数据 场 中的小部分 数据 . 速度较快 .可 以快速灵活地对 图像进行 变换和旋转等 操作 面绘制重建 的只是物体表面 . 内部丰富信息无法
关 键 词 :CT 图像 ;三 维重 建 ;面绘 制 ;体 绘 制
0 引

的显示 比例 . 例如 图像 的整体 或局 部缩放 、 多幅 图像 同
时显 示 、 分屏显示等 ; 可 以 对 图像 进 行 标 注 、 测量 , 以便 在 阅 片 的 同时 记 录 获 取 的 信 息 。 ( 2 ) 提供 预处理 功能 , 可以进行 增强 、 滤波 、 切割 、

CT图像重建技术

CT图像重建技术

CT图像重建技术由于csdn贴图不⽅便,并且不能上传附件,我把原⽂上传到了资源空间1.引⾔计算机层析成像(Computed Tomography,CT)是通过对物体进⾏不同⾓度的射线投影测量⽽获取物体横截⾯信息的成像技术,涉及到放射物理学、数学、计算机学、图形图像学和机械学等多个学科领域。

CT技术不但给诊断医学带来⾰命性的影响.还成功地应⽤于⽆损检测、产品反求和材料组织分析等⼯业领域。

CT技术的核⼼是由投影重建图像的理论,其实质是由扫描所得到的投影数据反求出成像平⾯上每个点的衰减系数值。

图像重建的算法有很多,本⽂根据CT扫描机的发展对不同时期CT所采⽤重建算法分别进⾏介绍。

2. 平⾏束投影重建算法第⼀代和第⼆代CT机获取⼀个单独投影的采样数据是从⼀组平⾏射线获取的,这种采样类型叫平⾏投影。

平⾏投影重建算法⼀般分为直接法与间接法两⼤类。

直接法是直接计算线性⽅程系数的⽅法,如矩阵法、迭代法等。

间接法是先计算投影的傅⽴叶变换,再导出吸收系数的⽅法,如反投影法、⼆维傅⽴叶重建[1]。

法和滤波反投影法等2.1 直接法2.1.1 矩阵法设⼀个物体的内部吸收系数矩阵为:(1)为了求得该矩阵中的元素值,我们可以先计算该矩阵在T个⾓度下的T组投影值,如设⽔平⽅向时,则:(2)同样其它⾓度下也有类似⽅程,把所有⽅程联⽴得到求解,即可求得所有u值。

通常情况下,由于联⽴⽅程组的数⽬往往不同于未知数个数,且可能有不少重复的⽅程,这样形成的不是⽅阵,所以⼀般不满秩,此时需要利⽤⼴义逆矩阵法进⾏求解。

2.1.2 迭代法实际应⽤中,由于图像尺⼨较⼤,联⽴的⽅程个数较多,采⽤直接采⽤解析法难度较⼤,因此提出了迭代重建⽅法。

迭代法的主要思想是:从⼀个假设的初[2]。

始图像出发,采⽤迭代的⽅法,将根据⼈为设定并经理论计算得到的投影值同实验测得的投影值⽐较,不断进⾏逼近,按照某种最优化准则寻找最优解[2]:通常有两种迭代公式,⼀种是加法迭代公式(3)[2]:另⼀种是乘法迭代公式(4)两式中是相邻两次迭代的结果;是某⼀⾓度的实测投影值,是计算过程的计算投影值,是投影的某⼀射线穿过点的点数,即计算投影值的射线所经过的像素的数⽬,是松弛因⼦。

CT图像的三维重建

CT图像的三维重建

河北工业大学硕士论文CT图像的三维重建摘要目前,CT,PET,MRI等成像设备均是获得人体某一部位的二维断层图像,再由一系列平行的二维断层图像来记录人体的三维信息。

在诊断中,医务人员只能通过观察一组二维断层图像,在大脑中进行三维数据的重建。

这就势必造成难以准确确定靶区的空间位置、大小及周围生物组织之间的关系。

因此,利用计算机进行医学图像的处理和分析,并加以三维重建和显示具有重要意义。

医学图像的三维可视化就是利用一系列的二维切片图像重建三维图像模型并进行定性、定量分析。

该技术可以为医生提供更逼真的显示手段和定量分析工具,并且其作为有力的辅助手段能够弥补影像成像设备在成像上的不足,能够为用户提供具有真实感的三维医学图像,便于医生从多角度、多层次进行观察和分析,能够使医生有效的参与数据的处理分析过程,在辅助医生诊断、手术仿真、引导治疗等方面都可以发挥重要的作用。

医学图像三维表面重建的主要研究内容包括医学图像的预处理,如插值、滤波等;组织或器官的分割与提取;复杂表面多相组织成份三维几何模型的构建等。

本文对CT 图像三维重建的关键技术进行研究,试图利用Marching Cubes(MC)算法实现对二维医学图像的三维重建,并且在重建前可以选择阈值,根据不同的阈值来重建不同的组织或器官。

而当前氩氦刀微创治疗肿瘤在国际国内得到了广泛的临床应用和研究。

因此,本文还对肿瘤的靶向治疗以及氩氦刀冷冻靶向治疗进行了一定的研究,特别针对靶向治疗中的精确定位进行相关的研究。

我们要分析氩氦刀定位中所需建立的复杂坐标系统,研究肿瘤靶向治疗中计算机精确定位系统的数学模型。

并在此基础,研究开发“氩氦刀靶向治疗计算机辅助精确定位系统”。

关键词:三维重建,靶向治疗,CT,图像处理,计算机辅助精确定位,氩氦刀iCT图像的三维重建ii THREE DIMENSION RECONSTRUCTION OF COMPUTEDTOMOGRAPHY IMAGESABSTRACTNowadays, imaging equipment, such as CT, PET, MRI, all have to follow the process ofderiving 3D data from a series of parallel 2D images to record the information of human body. Doctors can only observe 2D images and then reconstruct 3D data by imagination for diagnosis, which would surely lead to confusion in confirming the targeted region, targeted size and so forth. Therefore, it is of great significance to place computers onto the center stage in processing, analyzing, presenting, as well as 3D reconstructing of medical images.The so-called three-dimensional data visualization of medical images is to make full use of the 2D images in reconstructing 3D models, complemented by qualitative and quantitative analysis. This technology plays an important role in many fields. For instance, it provides doctors with a more real-world presentation and quantitative tool. It remedies the defect of imaging by some equipment as a powerful supplementary means. It offers users more real 3D medical images. It also gives doctors a chance to observe and analyze from multiple angles. More importantly, make them more involved in data analyzing and processing. In addition, it aids diagnosis, operation simulation and guide treatment as well.The main research contents of 3D surface reconstruction from medical images include image pre-processing, such as interpolating and filtering, segmenting and extracting tissues or organs of body, constructing 3D surface models.In this dissertation, key techniques for 3D reconstructing from medical images are studied. We use Marching Cubes arithmetic to reconstruct 3D images. In the course of reconstruction, the threshold could be inputed by user.Back to the real world, cryocare targeted cryoablation therapy is receiving widespread clinical practice and research both at home and abroad. For this reason, this dissertation has paid some special attention to tumour targeted and cryocare targeted cryoablation therapies, especially relevant research concerned with precise positioning. We should analyze the complicated coordinate systems required by cryocare targeting and study the mathematical model of computer aided navigation in exactitude for tumour targeted therapies. Building upon all these, our final goal is to develop a “Computer aided navigation in exactitude system for Cryocare Targeted Cryoablation Therapy”.KEY WORDS: 3D reconstruction, targeted therapy, CT, image processing, computer aided navigation in exactitude, cryocare河北工业大学硕士论文目录第一章绪论 (1)§1-1引言 (1)§1-2医学图像三维重建与可视化概念 (1)1-2-1三维重建的一般过程 (1)1-2-2可视化方法的概念及分类 (1)§1-3国内外研究概况 (3)§1-4本课题研究内容 (4)第二章医学图像信息的处理 (5)§2-1引言 (5)§2-2信息源的分析 (5)2-2-1信息源的类型 (5)2-2-2医学信息源的表现形式 (6)2-2-3不同格式医学图像的获取 (6)§2-3信息源的处理 (7)2-3-1信息的转化 (7)2-3-2医学数据的处理 (8)2-3-3CT数据的特点 (11)§2-4图像的预处理 (12)2-4-1平滑(滤波)处理的基本方法 (12)2-4-2断层图像间的插值 (15)2-4-3医学图像的分割 (17)第三章图像三维重建及可视化技术研究 (20)§3-1引言 (20)§3-2基于三维数据的建模方法 (20)3-2-1物体表面重建(基于表面的方法) (20)3-2-2直接体视法(基于体数据的方法) (22)§3-3医学图像的三维重建与可视化 (23)3-3-1三维可视化及重建的发展和现状 (23)3-3-2医学图像可视化及三维重建的应用 (25)3-3-3医学图像的三维重建技术 (26)iiiCT图像的三维重建第四章基于CT图像的三维重建 (30)§4-1引言 (30)§4-2医用CT机的历史与发展现状 (30)§4-3CT图像的获取、处理及重建 (32)§4-4CT图像的相关研究 (34)第五章肿瘤靶向治疗中的计算机精确定位系统的研究 (39)§5-1肿瘤靶向治疗的研究 (39)5-1-1肿瘤靶向治疗简介 (39)5-1-2氩氦刀肿瘤冷冻靶向治疗的一些相关研究 (40)5-1-3氩氦刀靶向治疗肿瘤的一些特点及应用 (44)§5-2靶向治疗计算机辅助精确定位研究 (45)5-2-1计算机辅助靶向治疗精确定位的必要性 (45)5-2-2坐标系的建立和转换 (47)5-2-3模型的建立 (50)§5-3氩氦刀靶向治疗计算机辅助精确定位系统的研究 (54)5-3-1平台的选择 (55)5-3-2系统界面及功能 (56)第六章结论 (62)§6-1本课题研究的总结 (62)§6-2本课题研究工作的展望 (63)参考文献 (65)致谢 (68)攻读学位期间所取得的相关科研成果 (69)iv河北工业大学硕士论文第一章绪论§1-1 引言进入70 年代以来,随着计算机断层扫描(CT:Computed Tomography),核磁共振成像(MRI:Magnetic Resonance Imaging),超声(US:Ultrasonography)等医学成像技术的产生和发展,人们可以得到人体及其内部器官的二维数字断层图像序列。

《CT三维重建》PPT课件

《CT三维重建》PPT课件

2021/6/10
15
MPR or CPR
让三维体元数据分别绕X、Y、Z轴旋转任意角度,再 用任意平面截取,或划一曲面线,以曲面线所确定的柱 面来截取新层面,构成多平面重组或曲面重组。
优点:①能以任何方位、角度、层厚、层数自由重 组新的断面图像;②重组图像可反映X线衰减值的差异, 当血管显示不清尤其有价值;③操作方便。
8、MRA ( TOF) 和( PC) 两种技术、二维(2D) 和三维(3D) 图像重建,3D - TOF 的图像分辨率较高,对血管的搏 动敏感性较差,对供血动脉较粗、血流速度快。而复 杂血管,例如动静脉畸形的检查较为理想;3D - PC 技 术,特别在血管畸形有明显出血的时候为最佳检查方 法。但是3D - PC 因需反复预测最佳血液流速,成像时 间长,临床应用较少。
小血管易产生狭窄、梗阻假象,轻-中度狭窄不易鉴别。
2021/6/10
21
SSD
2021/6/10
22
VR
给不同CT值指定不同的颜色和透明度, 则三维体元阵列视为半透明的,假想投射光 线以任意给定的角度穿过它,受到经过的体 元作用,通过观察平面得到图像。
优点:丢失信息最少,立体感强。 缺点:①操作选择适宜的CT值分类重要, 需要人机交互动态进行;②运算量大,需要 大容量计算机。
血管畸形:静脉型(海面状血管畸形、静脉畸形)
淋巴管型(淋巴管瘤、囊性水肿)
毛细血管型
动静脉型(动静脉畸形、动静脉瘘)
混合型
3、不足:海面状血管畸形及静脉畸形形态学及生物学不同
没有动脉型血管畸形一类
淋巴管型畸形不见于CNS
2021/6/10
3
Russell分类
1、病理解剖为基础,20年沿用 2、分类:动静脉畸形

三维重建学习记录2-将CT数据集转化为三维模型

三维重建学习记录2-将CT数据集转化为三维模型

三维重建学习记录2-将CT数据集转化为三维模型软件:VS2017+VTK8.2先上代码:1#define vtkRenderingCore_AUTOINIT 3(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingOpenGL2)2#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL2)3 #include "vtkDICOMImageReader.h"4 #include "vtkRenderWindowInteractor.h"5 #include "vtkRenderer.h"6 #include "vtkRenderWindow.h"7 #include "vtkMarchingCubes.h"8 #include "vtkStripper.h"9 #include "vtkActor.h"10 #include "vtkPolyDataMapper.h"11 #include "vtkProperty.h"12 #include "vtkCamera.h"13 #include "vtkBoxWidget.h"14 #include "vtkSmartPointer.h"15 #include "vtkTriangleFilter.h"16 #include "vtkMassProperties.h"17 #include "vtkSmoothPolyDataFilter.h"18 #include "vtkPolyDataNormals.h"19 #include "vtkContourFilter.h"20 #include "vtkRecursiveDividingCubes.h"21 #include "vtkSTLWriter.h"2223int main(int argc, char* argv[])24 {25 std::string filename = "out_Smooth.stl";//设置输出⽂件路径2627//读取⼆维切⽚数据序列28 vtkSmartPointer< vtkDICOMImageReader >reader =29 vtkSmartPointer< vtkDICOMImageReader >::New();30 reader->SetDataByteOrderToLittleEndian();31 reader->SetDirectoryName("E://dicomimage");//设置读取路径3233 reader->SetDataSpacing(1.0, 1.0, 1.0);//设置每个体素的⼤⼩34 reader->Update();353637//抽取等值⾯为⾻头的信息38//MC算法39 vtkSmartPointer< vtkMarchingCubes > boneExtractor =40 vtkSmartPointer< vtkMarchingCubes >::New();41 boneExtractor->SetInputConnection(reader->GetOutputPort());42 boneExtractor->SetValue(0, 400); //设置提取的等值信息43 boneExtractor->Update();444546//利⽤ContourFilter提取等值⾯47/*vtkSmartPointer< vtkContourFilter > boneExtractor =48 vtkSmartPointer< vtkContourFilter >::New();49 boneExtractor->SetInputConnection(reader->GetOutputPort());50 boneExtractor->SetValue(0, 200); //设置提取的等值信息51 boneExtractor->Update();*/5253//DC算法耗时长,模型有明显缝隙54/*vtkSmartPointer< vtkRecursiveDividingCubes > boneExtractor =55 vtkSmartPointer< vtkRecursiveDividingCubes >::New();56 boneExtractor->SetInputConnection(reader->GetOutputPort());57 boneExtractor->SetValue(500);58 boneExtractor->SetDistance(1);59 boneExtractor->SetIncrement(2);60 boneExtractor->Update();*/61626364//剔除旧的或废除的数据单元,提⾼绘制速度(可略去这⼀步)65 vtkSmartPointer< vtkStripper > boneStripper =66 vtkSmartPointer< vtkStripper >::New(); //三⾓带连接67 boneStripper->SetInputConnection(boneExtractor->GetOutputPort());68 boneStripper->Update();6970//平滑滤波71 vtkSmartPointer<vtkSmoothPolyDataFilter> pSmoothPolyDataFilter = vtkSmartPointer<vtkSmoothPolyDataFilter>::New();72 pSmoothPolyDataFilter->SetInputConnection(boneStripper->GetOutputPort());73//pSmoothPolyDataFilter->SetNumberOfIterations(m_nNumberOfIterations);74 pSmoothPolyDataFilter->SetRelaxationFactor(0.05);7576 vtkSmartPointer<vtkPolyDataNormals> pPolyDataNormals = vtkSmartPointer<vtkPolyDataNormals>::New();77 pPolyDataNormals->SetInputConnection(pSmoothPolyDataFilter->GetOutputPort());78//pPolyDataNormals->SetFeatureAngle(m_nFeatureAngle);798081//将模型输出到⼊STL⽂件82 vtkSmartPointer<vtkSTLWriter> stlWriter =83 vtkSmartPointer<vtkSTLWriter>::New();84 stlWriter->SetFileName(filename.c_str());85 stlWriter->SetInputConnection(pPolyDataNormals->GetOutputPort());86 stlWriter->Write();878889//建⽴映射90 vtkSmartPointer< vtkPolyDataMapper > boneMapper =91 vtkSmartPointer< vtkPolyDataMapper >::New();92 boneMapper->SetInputData(pPolyDataNormals->GetOutput());93 boneMapper->ScalarVisibilityOff();94//建⽴⾓⾊95 vtkSmartPointer< vtkActor > bone =96 vtkSmartPointer< vtkActor >::New();97 bone->SetMapper(boneMapper);9899 bone->GetProperty()->SetDiffuseColor(1.0, 1.0, 1.0);100 bone->GetProperty()->SetSpecular(.3);101 bone->GetProperty()->SetSpecularPower(20);102103//定义绘制器104 vtkSmartPointer< vtkRenderer > aRenderer =105 vtkSmartPointer< vtkRenderer >::New();106//定义绘制窗⼝107 vtkSmartPointer< vtkRenderWindow > renWin =108 vtkSmartPointer< vtkRenderWindow >::New();109 renWin->AddRenderer(aRenderer);110//定义窗⼝交互器111 vtkSmartPointer< vtkRenderWindowInteractor > iren =112 vtkSmartPointer< vtkRenderWindowInteractor >::New();113 iren->SetRenderWindow(renWin);114115//创建⼀个camera116 vtkSmartPointer< vtkCamera > aCamera =117 vtkSmartPointer< vtkCamera >::New();118 aCamera->SetViewUp(0, 0, -1);119 aCamera->SetPosition(0, 1, 0);120 aCamera->SetFocalPoint(0, 0, 0);121122 aRenderer->AddActor(bone);123 aRenderer->SetActiveCamera(aCamera);124 aRenderer->ResetCamera();125 aCamera->Dolly(1.5);126 aRenderer->SetBackground(0, 0, 0);127 aRenderer->ResetCameraClippingRange();128129//将3D模型渲染到绘制窗⼝130 iren->Initialize();131 iren->Start();132133return0;134 }View Code注:运⾏后笔记本要等⼏分钟,等待渲染完成。

CT图像三维重建(附源码)复习进程

CT图像三维重建(附源码)复习进程

程序流图:MATLAB 源码: clc; clear all;close all;% load mri %载入mri 数据,是matlab 自带库 % ph = squeeze(D); %压缩载入的数据D ,并赋值给phph = phantom3d(128);prompt={'Enter the Piece num(1 to 128):'}; %提示信息“输入1到27的片的数字” name='Input number'; %弹出框名称defaultanswer={'1'}; %默认数字numInput=inputdlg(prompt,name,1,defaultanswer) %弹出框,并得到用户的输入信息P= squeeze(ph(:,:,str2num(cell2mat(numInput))));%将用户的输入信息转换成数字,并从ph 中得到相应的片信息Pimshow(P) %展示图片PD = 250; %将D 赋值为250,是从扇束顶点到旋转中心的像素距离。

生成128的图片信息 输入图片数字选择 对图片信息进行预处理,并进行展示 用函数fanbeam 进行映射,得到扇束的数据,并展示 用函数ifanbeam 根据扇束投影数据重建图像,并展示计算重建图像和原图的性噪比,并进行输出 结束dsensor1 = 2; %正实数指定扇束传感器的间距2F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1); %通过P,D等计算扇束的数据值dsensor2 = 1; %正实数指定扇束传感器的间距1F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2); %通过P,D等计算扇束的数据值dsensor3 = 0.25 %正实数指定扇束传感器的间距0.25 [F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,...'FanSensorSpacing',dsensor3); %通过P,D等计算扇束的数据值,并得到扇束传感器的位置sensor_pos3和旋转角度fan_rot_angles3figure, %创建窗口imagesc(fan_rot_angles3, sensor_pos3, F3) %根据计算出的位置和角度展示F3的图片colormap(hot); %设置色图为hotcolorbar; %显示色栏xlabel('Fan Rotation Angle (degrees)') %定义x坐标轴ylabel('Fan Sensor Position (degrees)') %定义y坐标轴output_size = max(size(P)); %得到P维数的最大值,并赋值给output_sizeIfan1 = ifanbeam(F1,D, ...'FanSensorSpacing',dsensor1,'OutputSize',output_size);%根据扇束投影数据F1及D等数据重建图像figure, imshow(Ifan1) %创建窗口,并展示图片Ifan1title('图一');disp('图一和原图的性噪比为:');result=psnr1(Ifan1,P);Ifan2 = ifanbeam(F2,D, ...'FanSensorSpacing',dsensor2,'OutputSize',output_size);%根据扇束投影数据F2及D等数据重建图像figure, imshow(Ifan2) %创建窗口,并展示图片Ifan2disp('图二和原图的性噪比为:');result=psnr1(Ifan2,P);title('图二');Ifan3 = ifanbeam(F3,D, ...'FanSensorSpacing',dsensor3,'OutputSize',output_size);%根据扇束投影数据F3及D等数据重建图像figure, imshow(Ifan3) %创建窗口,并展示图片Ifan3title('图三');disp('图三和原图的性噪比为:');result=psnr1(Ifan3,P);function [p,ellipse]=phantom3d(varargin)%PHANTOM3D Three-dimensional analogue of MATLAB Shepp-Logan phantom% P = PHANTOM3D(DEF,N) generates a 3D head phantom that can% be used to test 3-D reconstruction algorithms.%% DEF is a string that specifies the type of head phantom to generate.% Valid values are:%% 'Shepp-Logan' A test image used widely by researchers in% tomography% 'Modified Shepp-Logan' (default) A variant of the Shepp-Logan phantom % in which the contrast is improved for better % visual perception.%% N is a scalar that specifies the grid size of P.% If you omit the argument, N defaults to 64.%% P = PHANTOM3D(E,N) generates a user-defined phantom, where each row% of the matrix E specifies an ellipsoid in the image. E has ten columns,% with each column containing a different parameter for the ellipsoids:%% Column 1: A the additive intensity value of the ellipsoid% Column 2: a the length of the x semi-axis of the ellipsoid% Column 3: b the length of the y semi-axis of the ellipsoid% Column 4: c the length of the z semi-axis of the ellipsoid% Column 5: x0 the x-coordinate of the center of the ellipsoid% Column 6: y0 the y-coordinate of the center of the ellipsoid% Column 7: z0 the z-coordinate of the center of the ellipsoid% Column 8: phi phi Euler angle (in degrees) (rotation about z-axis)% Column 9: theta theta Euler angle (in degrees) (rotation about x-axis)% Column 10: psi psi Euler angle (in degrees) (rotation about z-axis)%% For purposes of generating the phantom, the domains for the x-, y-, and% z-axes span [-1,1]. Columns 2 through 7 must be specified in terms% of this range.%% [P,E] = PHANTOM3D(...) returns the matrix E used to generate the phantom.%% Class Support% -------------% All inputs must be of class double. All outputs are of class double.%% Remarks% -------% For any given voxel in the output image, the voxel's value is equal to the% sum of the additive intensity values of all ellipsoids that the voxel is a% part of. If a voxel is not part of any ellipsoid, its value is 0.%% The additive intensity value A for an ellipsoid can be positive or negative;% if it is negative, the ellipsoid will be darker than the surrounding pixels.% Note that, depending on the values of A, some voxels may have values outside % the range [0,1].%% Example% -------% ph = phantom3d(128);% figure, imshow(squeeze(ph(64,:,:)))%% Copyright 2005 Matthias Christian Schabel (matthias @ stanfordalumni . org) % University of Utah Department of Radiology% Utah Center for Advanced Imaging Research% 729 Arapeen Drive% Salt Lake City, UT 84108-1218%% This code is released under the Gnu Public License (GPL). For more information, % see : /copyleft/gpl.html%% Portions of this code are based on phantom.m, copyrighted by the Mathworks %[ellipse,n] = parse_inputs(varargin{:});p = zeros([n n n]);rng = ( (0:n-1)-(n-1)/2 ) / ((n-1)/2);[x,y,z] = meshgrid(rng,rng,rng);coord = [flatten(x); flatten(y); flatten(z)];p = flatten(p);for k = 1:size(ellipse,1)A = ellipse(k,1); % Amplitude change for this ellipsoidasq = ellipse(k,2)^2; % a^2bsq = ellipse(k,3)^2; % b^2csq = ellipse(k,4)^2; % c^2x0 = ellipse(k,5); % x offsety0 = ellipse(k,6); % y offsetz0 = ellipse(k,7); % z offsetphi = ellipse(k,8)*pi/180; % first Euler angle in radianstheta = ellipse(k,9)*pi/180; % second Euler angle in radianspsi = ellipse(k,10)*pi/180; % third Euler angle in radianscphi = cos(phi);sphi = sin(phi);ctheta = cos(theta);stheta = sin(theta);cpsi = cos(psi);spsi = sin(psi);% Euler rotation matrixalpha = [cpsi*cphi-ctheta*sphi*spsi cpsi*sphi+ctheta*cphi*spsi spsi*stheta;-spsi*cphi-ctheta*sphi*cpsi -spsi*sphi+ctheta*cphi*cpsi cpsi*stheta;stheta*sphi -stheta*cphi ctheta];% rotated ellipsoid coordinatescoordp = alpha*coord;idx = find((coordp(1,:)-x0).^2./asq + (coordp(2,:)-y0).^2./bsq + (coordp(3,:)-z0).^2./csq <= 1);p(idx) = p(idx) + A;endp = reshape(p,[n n n]);return;function out = flatten(in)out = reshape(in,[1 prod(size(in))]);return;function [e,n] = parse_inputs(varargin)% e is the m-by-10 array which defines ellipsoids% n is the size of the phantom brain imagen = 128; % The default sizee = [];defaults = {'shepp-logan', 'modified shepp-logan', 'yu-ye-wang'};for i=1:narginif ischar(varargin{i}) % Look for a default phantom def = lower(varargin{i});idx = strmatch(def, defaults);if isempty(idx)eid = sprintf('Images:%s:unknownPhantom',mfilename);msg = 'Unknown default phantom selected.';error(eid,'%s',msg);endswitch defaults{idx}case 'shepp-logan'e = shepp_logan;case 'modified shepp-logan'e = modified_shepp_logan;case 'yu-ye-wang'e = yu_ye_wang;endelseif numel(varargin{i})==1n = varargin{i}; % a scalar is the image size elseif ndims(varargin{i})==2 && size(varargin{i},2)==10e = varargin{i}; % user specified phantomelseeid = sprintf('Images:%s:invalidInputArgs',mfilename);msg = 'Invalid input arguments.';error(eid,'%s',msg);endend% ellipse is not yet definedif isempty(e)e = modified_shepp_logan;endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default head phantoms: % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%function e = shepp_logane = modified_shepp_logan;e(:,1) = [1 -.98 -.02 -.02 .01 .01 .01 .01 .01 .01];return;function e = modified_shepp_logan%% This head phantom is the same as the Shepp-Logan except% the intensities are changed to yield higher contrast in% the image. Taken from Toft, 199-200.%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .810 0 0 0 0 0 0-.8 .6624 .874 .780 0 -.0184 0 0 0 0-.2 .1100 .310 .220 .22 0 0 -18 0 10-.2 .1600 .410 .280 -.22 0 0 18 0 10.1 .2100 .250 .410 0 .35 -.15 0 0 0.1 .0460 .046 .050 0 .1 .25 0 0 0.1 .0460 .046 .050 0 -.1 .25 0 0 0.1 .0460 .023 .050 -.08 -.605 0 0 0 0.1 .0230 .023 .020 0 -.606 0 0 0 0.1 .0230 .046 .020 .06 -.605 0 0 0 0 ]; return;function e = yu_ye_wang%% Yu H, Ye Y, Wang G, Katsevich-Type Algorithms for Variable Radius Spiral Cone-Beam CT%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .900 0 0 0 0 0 0-.8 .6624 .874 .880 0 0 0 0 0 0-.2 .4100 .160 .210 -.22 0 -.25 108 0 0-.2 .3100 .110 .220 .22 0 -.25 72 0 0.2 .2100 .250 .500 0 .35 -.25 0 0 0.2 .0460 .046 .046 0 .1 -.25 0 0 0.1 .0460 .023 .020 -.08 -.65 -.25 0 0 0.1 .0460 .023 .020 .06 -.65 -.25 90 0 0.2 .0560 .040 .100 .06 -.105 .625 90 0 0-.2 .0560 .056 .100 0 .100 .625 0 0 0 ];return;% func——计算两幅图像的psnr值function result=psnr1(in1,in2)z=mse(in1,in2);result=10*log10(255.^2/z)% plot(result)function z=mse(x,y)if ndims(x)==3x=rgb2gray(x);endif ndims(y)==3y=rgb2gray(y);endx=double(x);y=double(y);[m1,n1]=size(x);[m2,n2]=size(y);m=min(m1,m2);n=min(n1,n2);z=0;for i=1:mfor j=1:nz=z+(x(i,j)-y(i,j)).^2;endendz=z/(m*n);。

最新CT三维重建-(NXPowerLite)课件PPT

最新CT三维重建-(NXPowerLite)课件PPT
4、MRA 无创伤性检查,特别对有出血倾向,肝、肾功能不 全,碘造影剂过敏的病人,是最理想最安全的检查方法。
5、MRA 显示血管畸形的供血动脉、畸形血管团的大小和范 围、引流静脉的类型和引流部位等。
6、MRI 与MRA 结合更能够清晰显示脑血管畸形的解剖结构 和病理变化。
7、动静脉畸形、动静脉瘘、静脉瘤和静脉曲张适合MRA 检 查。海绵状血管瘤无明显增粗的供血动脉和引流静脉,瘤 内血流极其缓慢,仅能在常规MRI 中显示。毛细血管扩张 症MRI 和MRA 均不能显示。常规MRI 检查根据血管畸形 所致的流空现象,可以显示隐匿性血管畸形。
供血动脉与引流静脉之间的关系,但是创伤性检 查,并有一定危险性,严重的可导致死亡。 3、CT 缺乏特征性,显示病灶的继发性改变,例如 钙化、出血、脑梗塞、萎缩及软化等较好,对异 常供血动脉及引流静脉不能显示。增强CT显示畸 形的血管,有不同程度的创伤,少数可能出现过 敏反应,有一定的危险性。
MR在血管畸形诊断中应用
CT容积扫描数据X、Y轴分辨率高,Z轴分辨率低。 三维重建必须在相邻层面间插入假想层面,使Z轴方 向与X、Y轴方向等间隔,形成三维立方的体元(Voxel), 插入的像素值用插值法计算得出(常用线性插值)。每 个体元可以从﹣1024~﹢3071HU。这样可完成三维重建 方式,得出在二维屏幕上表达三维结构。
动静脉分流型畸形 典型的脑(软脑膜)动静脉畸形 软脑膜动静脉瘘 颈动脉海绵窦瘘 硬脑膜动静脉窦瘘(硬脑膜动静脉畸形) Galen动静脉畸形(Galen动静脉瘘)
混合型畸形 静脉-海绵型畸形 动静脉型-静脉型畸形 海绵型-动静脉畸形
综合征型CNS血管畸形 (特殊类别)
血管畸形诊断检查方法
1、DSA、CT、MR ,有其优缺点。 2、DSA是最可靠的方法,可以直接显示异常血管、

CT图像重建(CT Image Reconstruction)

CT图像重建(CT Image Reconstruction)

Shepp-Logan体模
S-L体模是CT图像重建领域用于仿真计算的经典头部模型, 于1974年由L.A.Shepp和B.F.Logan首次提出,可生成2D或者 3D的标准投影数据。S-L体模通过椭圆来表征不同的形状, 不同的灰度用来模拟不同组织的衰减系数,例如最外层的椭 圆模拟头骨,内部的两个小椭圆模拟大脑内部特征或者肿瘤。
CT图像重建 (CT Image Reconstruction)
学习内容(Learning objects)
❖ CT图像重建的历史( A brief history ) ❖ 基本术语(Some basic terms) ❖ 图像重建思想(Reconstruction ideas) ❖ 图像重建算法(Reconstruction algorithms)
Johann Radon entered the University of Vienna where he was awarded a doctorate in 1910 for a dissertation on the calculus of variations. The year 1911 he spent in Göttingen, became assistant professor at the University of Brünn (now Brno) for a year and then moved to the Technische Hochschule in Vienna. In 1919 Radon became assistant professor at Hamburg becoming a full professor in Greifswald in 1922. He was appointed to the University of Vienna in 1947 and he remained there for the rest of his life.

VTK实现CT图像三维重建

VTK实现CT图像三维重建
aRenderer->SetActiveCamera(aCamera);
aRenderer->ResetCamera ();
aCamera->Dolly(1.5);
// Set a background color for the renderer and set the size of the
aCamera->SetPosition (0, 1, 0);
aCamera->SetFocalPoint (0, 0, 0);
aCamera->ComputeViewPlaneNormal();
// Actors are added to the renderer. An initial camera view is created.
skinNormals->SetFeatureAngle(60.0);
vtkPolyDataMapper *skinMapper = vtkPolyDataMapper::New();
skinMapper->SetInputConnection(skinNormals->GetOutputPort());
// keyboard-based interaction with the data within the render window.
//
vtkRenderer *aRenderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
skinExtractor->Delete();
skinNormals->Delete();

CT-重建

CT-重建
最大/最小强度投影
MaxIP:显示血管、血管分支和血管壁钙化较好,但无 法显示重叠的血管和骨性结构;
MinIP:用于显示肺部结构;
SSD:显示人体部位的形态及与周围解剖结构的关系, 如器官、血管和骨性结构,但无法像MIP显示血管及其 内部结构; VRT:成像时容易掉失信息,须结合MPR才能完整地 显示人体器官像。
3D & Virtual Reality(虚拟现实)
肺:绿色 心脏与动静脉:红色 左:腹部大动脉重建 右上:CT扫描原图 右下:内部观察
VRT
VRTVRTMIP源自SSD虚拟技术图像重建
CT图像重建与仿真
MPR:Multiplanar Reformation 多平面重建 VRT:Volume Rendering Technique
体积重现法
3D SSD:3D Surface Shade Display 三维表面阴影显示法
MIP:Maximum and Minmum Intensity Project

CT图像三维重建(附源码)

CT图像三维重建(附源码)

程序流图:MATLAB 源码:clc;clear all;close all;载入mri数据,是matlab自带库压缩载入的数据D,并赋值给ph ph = phantom3d(128);prompt={'Enter the 提示信息“输入1到27的片的数字”弹出框名称defaultanswer={'1'}; %默认数字numInput=inputdlg(prompt,name,1,defaultanswer) %弹出框,并得到用户的输入信息P= squeeze(ph(:,:,str2num(cell2mat(numInput))));%将用户的输入信息转换成数字,并从ph中得到相应的片信息Pimshow(P) %展示图片PD = 250; %将D赋值为250,是从扇束顶点到旋转中心的像素距离。

dsensor1 = 2; %正实数指定扇束传感器的间距2F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1); %通过P,D等计算扇束的数据值dsensor2 = 1; %正实数指定扇束传感器的间距1F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2); %通过P,D等计算扇束的数据值dsensor3 = 0.25 %正实数指定扇束传感器的间距0.25 [F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,...'FanSensorSpacing',dsensor3); %通过P,D等计算扇束的数据值,并得到扇束传感器的位置sensor_pos3和旋转角度fan_rot_angles3figure, %创建窗口imagesc(fan_rot_angles3, sensor_pos3, F3) %根据计算出的位置和角度展示F3的图片colormap(hot); %设置色图为hotcolorbar; %显示色栏xlabel('Fan Rotation Angle (degrees)') %定义x坐标轴ylabel('Fan Sensor Position (degrees)') %定义y坐标轴output_size = max(size(P)); %得到P维数的最大值,并赋值给output_sizeIfan1 = ifanbeam(F1,D, ...'FanSensorSpacing',dsensor1,'OutputSize',output_size);%根据扇束投影数据F1及D等数据重建图像figure, imshow(Ifan1) %创建窗口,并展示图片Ifan1title('图一');disp('图一和原图的性噪比为:');result=psnr1(Ifan1,P);Ifan2 = ifanbeam(F2,D, ...'FanSensorSpacing',dsensor2,'OutputSize',output_size);%根据扇束投影数据F2及D等数据重建图像figure, imshow(Ifan2) %创建窗口,并展示图片Ifan2disp('图二和原图的性噪比为:');result=psnr1(Ifan2,P);title('图二');Ifan3 = ifanbeam(F3,D, ...'FanSensorSpacing',dsensor3,'OutputSize',output_size);%根据扇束投影数据F3及D等数据重建图像figure, imshow(Ifan3) %创建窗口,并展示图片Ifan3title('图三');disp('图三和原图的性噪比为:');result=psnr1(Ifan3,P);function [p,ellipse]=phantom3d(varargin)%PHANTOM3D Three-dimensional analogue of MATLAB Shepp-Logan phantom% P = PHANTOM3D(DEF,N) generates a 3D head phantom that can% be used to test 3-D reconstruction algorithms.%% DEF is a string that specifies the type of head phantom to generate.% Valid values are:%% 'Shepp-Logan' A test image used widely by researchers in% tomography% 'Modified Shepp-Logan' (default) A variant of the Shepp-Logan phantom % in which the contrast is improved for better % visual perception.%% N is a scalar that specifies the grid size of P.% If you omit the argument, N defaults to 64.%% P = PHANTOM3D(E,N) generates a user-defined phantom, where each row% of the matrix E specifies an ellipsoid in the image. E has ten columns,% with each column containing a different parameter for the ellipsoids:%% Column 1: A the additive intensity value of the ellipsoid% Column 2: a the length of the x semi-axis of the ellipsoid% Column 3: b the length of the y semi-axis of the ellipsoid% Column 4: c the length of the z semi-axis of the ellipsoid% Column 5: x0 the x-coordinate of the center of the ellipsoid% Column 6: y0 the y-coordinate of the center of the ellipsoid% Column 7: z0 the z-coordinate of the center of the ellipsoid% Column 8: phi phi Euler angle (in degrees) (rotation about z-axis)% Column 9: theta theta Euler angle (in degrees) (rotation about x-axis)% Column 10: psi psi Euler angle (in degrees) (rotation about z-axis)%% For purposes of generating the phantom, the domains for the x-, y-, and% z-axes span [-1,1]. Columns 2 through 7 must be specified in terms% of this range.%% [P,E] = PHANTOM3D(...) returns the matrix E used to generate the phantom.%% Class Support% -------------% All inputs must be of class double. All outputs are of class double.%% Remarks% -------% For any given voxel in the output image, the voxel's value is equal to the% sum of the additive intensity values of all ellipsoids that the voxel is a% part of. If a voxel is not part of any ellipsoid, its value is 0.%% The additive intensity value A for an ellipsoid can be positive or negative;% if it is negative, the ellipsoid will be darker than the surrounding pixels.% Note that, depending on the values of A, some voxels may have values outside % the range [0,1].%% Example% -------% ph = phantom3d(128);% figure, imshow(squeeze(ph(64,:,:)))%% Copyright2005MatthiasChristianSchabel(***************************) % University of Utah Department of Radiology% Utah Center for Advanced Imaging Research% 729 Arapeen Drive% Salt Lake City, UT 84108-1218%% This code is released under the Gnu Public License (GPL). For more information, % see : /copyleft/gpl.html%% Portions of this code are based on phantom.m, copyrighted by the Mathworks %[ellipse,n] = parse_inputs(varargin{:});p = zeros([n n n]);rng = ( (0:n-1)-(n-1)/2 ) / ((n-1)/2);[x,y,z] = meshgrid(rng,rng,rng);coord = [flatten(x); flatten(y); flatten(z)];p = flatten(p);for k = 1:size(ellipse,1)A = ellipse(k,1); % Amplitude change for this ellipsoidasq = ellipse(k,2)^2; % a^2bsq = ellipse(k,3)^2; % b^2csq = ellipse(k,4)^2; % c^2x0 = ellipse(k,5); % x offsety0 = ellipse(k,6); % y offsetz0 = ellipse(k,7); % z offsetphi = ellipse(k,8)*pi/180; % first Euler angle in radianstheta = ellipse(k,9)*pi/180; % second Euler angle in radianspsi = ellipse(k,10)*pi/180; % third Euler angle in radianscphi = cos(phi);sphi = sin(phi);ctheta = cos(theta);stheta = sin(theta);cpsi = cos(psi);spsi = sin(psi);% Euler rotation matrixalpha = [cpsi*cphi-ctheta*sphi*spsi cpsi*sphi+ctheta*cphi*spsi spsi*stheta;-spsi*cphi-ctheta*sphi*cpsi -spsi*sphi+ctheta*cphi*cpsi cpsi*stheta;stheta*sphi -stheta*cphi ctheta];% rotated ellipsoid coordinatescoordp = alpha*coord;idx = find((coordp(1,:)-x0).^2./asq + (coordp(2,:)-y0).^2./bsq + (coordp(3,:)-z0).^2./csq <= 1);p(idx) = p(idx) + A;endp = reshape(p,[n n n]);return;function out = flatten(in)out = reshape(in,[1 prod(size(in))]);return;function [e,n] = parse_inputs(varargin)% e is the m-by-10 array which defines ellipsoids% n is the size of the phantom brain imagen = 128; % The default sizee = [];defaults = {'shepp-logan', 'modified shepp-logan', 'yu-ye-wang'};for i=1:narginif ischar(varargin{i}) % Look for a default phantom def = lower(varargin{i});idx = strmatch(def, defaults);if isempty(idx)eid = sprintf('Images:%s:unknownPhantom',mfilename);msg = 'Unknown default phantom selected.';error(eid,'%s',msg);endswitch defaults{idx}case 'shepp-logan'e = shepp_logan;case 'modified shepp-logan'e = modified_shepp_logan;case 'yu-ye-wang'e = yu_ye_wang;endelseif numel(varargin{i})==1n = varargin{i}; % a scalar is the image size elseif ndims(varargin{i})==2 && size(varargin{i},2)==10e = varargin{i}; % user specified phantomelseeid = sprintf('Images:%s:invalidInputArgs',mfilename);msg = 'Invalid input arguments.';error(eid,'%s',msg);endend% ellipse is not yet definedif isempty(e)e = modified_shepp_logan;endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default head phantoms: % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%function e = shepp_logane = modified_shepp_logan;e(:,1) = [1 -.98 -.02 -.02 .01 .01 .01 .01 .01 .01];return;function e = modified_shepp_logan%% This head phantom is the same as the Shepp-Logan except% the intensities are changed to yield higher contrast in% the image. Taken from Toft, 199-200.%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .810 0 0 0 0 0 0-.8 .6624 .874 .780 0 -.0184 0 0 0 0-.2 .1100 .310 .220 .22 0 0 -18 0 10-.2 .1600 .410 .280 -.22 0 0 18 0 10.1 .2100 .250 .410 0 .35 -.15 0 0 0.1 .0460 .046 .050 0 .1 .25 0 0 0.1 .0460 .046 .050 0 -.1 .25 0 0 0.1 .0460 .023 .050 -.08 -.605 0 0 0 0.1 .0230 .023 .020 0 -.606 0 0 0 0.1 .0230 .046 .020 .06 -.605 0 0 0 0 ]; return;function e = yu_ye_wang%% Yu H, Ye Y, Wang G, Katsevich-Type Algorithms for Variable Radius Spiral Cone-Beam CT%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .900 0 0 0 0 0 0-.8 .6624 .874 .880 0 0 0 0 0 0-.2 .4100 .160 .210 -.22 0 -.25 108 0 0-.2 .3100 .110 .220 .22 0 -.25 72 0 0.2 .2100 .250 .500 0 .35 -.25 0 0 0.2 .0460 .046 .046 0 .1 -.25 0 0 0.1 .0460 .023 .020 -.08 -.65 -.25 0 0 0.1 .0460 .023 .020 .06 -.65 -.25 90 0 0.2 .0560 .040 .100 .06 -.105 .625 90 0 0-.2 .0560 .056 .100 0 .100 .625 0 0 0 ];return;% func——计算两幅图像的psnr值function result=psnr1(in1,in2)z=mse(in1,in2);result=10*log10(255.^2/z)% plot(result)function z=mse(x,y)if ndims(x)==3x=rgb2gray(x);endif ndims(y)==3y=rgb2gray(y);endx=double(x);y=double(y);[m1,n1]=size(x);[m2,n2]=size(y);m=min(m1,m2);n=min(n1,n2);z=0;for i=1:mfor j=1:nz=z+(x(i,j)-y(i,j)).^2;endendz=z/(m*n);。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序流图:MATLAB 源码: clc;clear all;close all;% load mri %载入mri 数据,是matlab 自带库% ph = squeeze(D); %压缩载入的数据D ,并赋值给ph ph = phantom3d(128);prompt={'Enter the Piece num(1 to 128):'}; %提示信息“输入1到27的片的数字”name='Input number'; %弹出框名称defaultanswer={'1'}; %默认数字numInput=inputdlg(prompt,name,1,defaultanswer) %弹出框,并得到用户的输入信息 P= squeeze(ph(:,:,str2num(cell2mat(numInput))));%将用户的输入信息转换成数字,并从ph 中得到相应的片信息Pimshow(P) %展示图片PD = 250; %将D 赋值为250,是从扇束顶点到旋转中心的像素距离。

dsensor1 = 2; %正实数指定扇束传感器的间距2F1 = fanbeam(P,D,'FanSensorSpacing',dsensor1); %通过P ,D 等计算扇束的数据值 dsensor2 = 1; %正实数指定扇束传感器的间距1F2 = fanbeam(P,D,'FanSensorSpacing',dsensor2); %通过P ,D 等计算扇束的数据值dsensor3 = 0.25 %正实数指定扇束传感器的间距0.25 [F3, sensor_pos3, fan_rot_angles3] = fanbeam(P,D,...'FanSensorSpacing',dsensor3); %通过P ,D 等计算扇束的数据值,并得到扇束传感器的位置sensor_pos3和旋转角度fan_rot_angles3figure, %创建窗口imagesc(fan_rot_angles3, sensor_pos3, F3) %根据计算出的位置和角度展示F3的图片colormap(hot); %设置色图为hot colorbar; %显示色栏xlabel('Fan Rotation Angle (degrees)') %定义x 坐标轴ylabel('Fan Sensor Position (degrees)') %定义y 坐标轴output_size = max(size(P)); %得到P 维数的最大值,并赋值给output_size Ifan1 = ifanbeam(F1,D, ... 'FanSensorSpacing',dsensor1,'OutputSize',output_size);%根据扇束投影数据F1及D 等数据重建图像figure, imshow(Ifan1) %创建窗口,并展示图片Ifan1title('图一');disp('图一和原图的性噪比为:');result=psnr1(Ifan1,P);Ifan2 = ifanbeam(F2,D, ...'FanSensorSpacing',dsensor2,'OutputSize',output_size);%根据扇束投影数据F2及D 等数据重建图像figure, imshow(Ifan2) %创建窗口,并展示图片Ifan2disp('图二和原图的性噪比为:');result=psnr1(Ifan2,P);title('图二');Ifan3 = ifanbeam(F3,D, ...生成128的输入图片数字对图片信息进行预处用函数fanbeam 进行映射,得到扇束的数据,并用函数ifanbeam 根据扇束投影数据重建图像,并计算重建图像和原图的结束'FanSensorSpacing',dsensor3,'OutputSize',output_size);%根据扇束投影数据F3及D等数据重建图像figure, imshow(Ifan3) %创建窗口,并展示图片Ifan3title('图三');disp('图三和原图的性噪比为:');result=psnr1(Ifan3,P);function [p,ellipse]=phantom3d(varargin)%PHANTOM3D Three-dimensional analogue of MATLAB Shepp-Logan phantom% P = PHANTOM3D(DEF,N) generates a 3D head phantom that can% be used to test 3-D reconstruction algorithms.%% DEF is a string that specifies the type of head phantom to generate.% Valid values are:%% 'Shepp-Logan' A test image used widely by researchers in% tomography% 'Modified Shepp-Logan' (default) A variant of the Shepp-Logan phantom% in which the contrast is improved for better% visual perception.%% N is a scalar that specifies the grid size of P.% If you omit the argument, N defaults to 64.%% P = PHANTOM3D(E,N) generates a user-defined phantom, where each row% of the matrix E specifies an ellipsoid in the image. E has ten columns,% with each column containing a different parameter for the ellipsoids:%% Column 1: A the additive intensity value of the ellipsoid% Column 2: a the length of the x semi-axis of the ellipsoid% Column 3: b the length of the y semi-axis of the ellipsoid% Column 4: c the length of the z semi-axis of the ellipsoid% Column 5: x0 the x-coordinate of the center of the ellipsoid% Column 6: y0 the y-coordinate of the center of the ellipsoid% Column 7: z0 the z-coordinate of the center of the ellipsoid% Column 8: phi phi Euler angle (in degrees) (rotation about z-axis)% Column 9: theta theta Euler angle (in degrees) (rotation about x-axis) % Column 10: psi psi Euler angle (in degrees) (rotation about z-axis)%% For purposes of generating the phantom, the domains for the x-, y-, and % z-axes span [-1,1]. Columns 2 through 7 must be specified in terms% of this range.%% [P,E] = PHANTOM3D(...) returns the matrix E used to generate the phantom. %% Class Support% -------------% All inputs must be of class double. All outputs are of class double.%% Remarks% -------% For any given voxel in the output image, the voxel's value is equal to the% sum of the additive intensity values of all ellipsoids that the voxel is a% part of. If a voxel is not part of any ellipsoid, its value is 0.%% The additive intensity value A for an ellipsoid can be positive or negative;% if it is negative, the ellipsoid will be darker than the surrounding pixels.% Note that, depending on the values of A, some voxels may have values outside % the range [0,1].%% Example% -------% ph = phantom3d(128);% figure, imshow(squeeze(ph(64,:,:)))%% Copyright 2005 Matthias Christian Schabel (matthias @ stanfordalumni . org) % University of Utah Department of Radiology% Utah Center for Advanced Imaging Research% 729 Arapeen Drive% Salt Lake City, UT 84108-1218%% This code is released under the Gnu Public License (GPL). For more information, % see : /copyleft/gpl.html%% Portions of this code are based on phantom.m, copyrighted by the Mathworks %[ellipse,n] = parse_inputs(varargin{:});p = zeros([n n n]);rng = ( (0:n-1)-(n-1)/2 ) / ((n-1)/2);[x,y,z] = meshgrid(rng,rng,rng);coord = [flatten(x); flatten(y); flatten(z)];p = flatten(p);for k = 1:size(ellipse,1)A = ellipse(k,1); % Amplitude change for this ellipsoidasq = ellipse(k,2)^2; % a^2bsq = ellipse(k,3)^2; % b^2csq = ellipse(k,4)^2; % c^2x0 = ellipse(k,5); % x offsety0 = ellipse(k,6); % y offsetz0 = ellipse(k,7); % z offsetphi = ellipse(k,8)*pi/180; % first Euler angle in radianstheta = ellipse(k,9)*pi/180; % second Euler angle in radianspsi = ellipse(k,10)*pi/180; % third Euler angle in radianscphi = cos(phi);sphi = sin(phi);ctheta = cos(theta);stheta = sin(theta);cpsi = cos(psi);spsi = sin(psi);% Euler rotation matrixalpha = [cpsi*cphi-ctheta*sphi*spsi cpsi*sphi+ctheta*cphi*spsi spsi*stheta;-spsi*cphi-ctheta*sphi*cpsi -spsi*sphi+ctheta*cphi*cpsi cpsi*stheta;stheta*sphi -stheta*cphi ctheta];% rotated ellipsoid coordinatescoordp = alpha*coord;idx = find((coordp(1,:)-x0).^2./asq + (coordp(2,:)-y0).^2./bsq + (coordp(3,:)-z0).^2./csq <= 1);p(idx) = p(idx) + A;endp = reshape(p,[n n n]);return;function out = flatten(in)out = reshape(in,[1 prod(size(in))]);return;function [e,n] = parse_inputs(varargin)% e is the m-by-10 array which defines ellipsoids% n is the size of the phantom brain imagen = 128; % The default sizee = [];defaults = {'shepp-logan', 'modified shepp-logan', 'yu-ye-wang'};for i=1:narginif ischar(varargin{i}) % Look for a default phantomdef = lower(varargin{i});idx = strmatch(def, defaults);if isempty(idx)eid = sprintf('Images:%s:unknownPhantom',mfilename);msg = 'Unknown default phantom selected.';error(eid,'%s',msg);endswitch defaults{idx}case 'shepp-logan'e = shepp_logan;case 'modified shepp-logan'e = modified_shepp_logan;case 'yu-ye-wang'e = yu_ye_wang;endelseif numel(varargin{i})==1n = varargin{i}; % a scalar is the image size elseif ndims(varargin{i})==2 && size(varargin{i},2)==10e = varargin{i}; % user specified phantomelseeid = sprintf('Images:%s:invalidInputArgs',mfilename);msg = 'Invalid input arguments.';error(eid,'%s',msg);endend% ellipse is not yet definedif isempty(e)e = modified_shepp_logan;endreturn;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Default head phantoms: % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%function e = shepp_logane = modified_shepp_logan;e(:,1) = [1 -.98 -.02 -.02 .01 .01 .01 .01 .01 .01];return;function e = modified_shepp_logan%% This head phantom is the same as the Shepp-Logan except% the intensities are changed to yield higher contrast in% the image. Taken from Toft, 199-200.%% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .810 0 0 0 0 0 0-.8 .6624 .874 .780 0 -.0184 0 0 0 0-.2 .1100 .310 .220 .22 0 0 -18 0 10-.2 .1600 .410 .280 -.22 0 0 18 0 10.1 .2100 .250 .410 0 .35 -.15 0 0 0.1 .0460 .046 .050 0 .1 .25 0 0 0.1 .0460 .046 .050 0 -.1 .25 0 0 0.1 .0460 .023 .050 -.08 -.605 0 0 0 0.1 .0230 .023 .020 0 -.606 0 0 0 0.1 .0230 .046 .020 .06 -.605 0 0 0 0 ];return;function e = yu_ye_wang%% Yu H, Ye Y, Wang G, Katsevich-Type Algorithms for Variable Radius Spiral Cone-Beam CT %% A a b c x0 y0 z0 phi theta psi% -----------------------------------------------------------------e = [ 1 .6900 .920 .900 0 0 0 0 0 0-.8 .6624 .874 .880 0 0 0 0 0 0-.2 .4100 .160 .210 -.22 0 -.25 108 0 0-.2 .3100 .110 .220 .22 0 -.25 72 0 0.2 .2100 .250 .500 0 .35 -.25 0 0 0.2 .0460 .046 .046 0 .1 -.25 0 0 0.1 .0460 .023 .020 -.08 -.65 -.25 0 0 0.1 .0460 .023 .020 .06 -.65 -.25 90 0 0.2 .0560 .040 .100 .06 -.105 .625 90 0 0-.2 .0560 .056 .100 0 .100 .625 0 0 0 ]; return;% func——计算两幅图像的psnr值function result=psnr1(in1,in2)z=mse(in1,in2);result=10*log10(255.^2/z)% plot(result)function z=mse(x,y)if ndims(x)==3x=rgb2gray(x);endif ndims(y)==3y=rgb2gray(y);endx=double(x);y=double(y);[m1,n1]=size(x);[m2,n2]=size(y);m=min(m1,m2);n=min(n1,n2);z=0;for i=1:mfor j=1:nz=z+(x(i,j)-y(i,j)).^2;endendz=z/(m*n);。

相关文档
最新文档