• 大小: 9.94MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-06
  • 语言: 其他
  • 标签:

资源简介

基于vs2013+opencv实现的平扫式CT二维断层重建,使用了FBP滤波反投影重建算法,注释详细。

资源截图

代码片段和文件信息

#include
#include   

using namespace cv;
using namespace std;
float correct(float *sinogram int width int angle float SD int rotate);//修正函数,包括正弦图,宽度,角度(高度),源到探测器距离,旋转中心
float convfiltering(float *sinogram int width int angle int start int end);//卷积滤波函数,包括正弦图,宽度,角度,开始与结束
float inprojection(float *sinogram int width int angle float anglestep float SD int rotate float *ROI int xmin int xmax int ymin int ymax int rotateangle);//加权反投影函数,包括正弦图,宽度,角度,步进角,源到探测器距离,旋转中心,重建结果,ROI区域x与y最小最大坐标,旋转角度

void main()
{
Mat angleimage = Mat(360 1920CV_32FC1Scalar(0.0));
Mat result(401401 CV_32FC1);
Mat picture;
char filename[256];
double start_t =(double)cvGetTickCount();
double run_time;
for(int j =500; j<600; j = j+100)    //重建的层号
{
for (int i = 0; i < 360; i++)
{
sprintf_s(filename “D:\\根系实验数据\\CTyushiyan\\2018.3.8-1youji\\%d.png“i);
            picture = imread(filename IMREAD_ANYDEPTH);//图片必须添加到工程目录
Mat(picture.col(j).t()).copyTo(angleimage.row(i));
}

correct((float *)angleimage.data 1920 360 4750.0730);
convfiltering((float *)angleimage.data 1920 36001900);
inprojection((float *)angleimage.data 1920 360 1.0 4750.0730 (float *)result.data -200200 -200 200 0);
normalize(result result 1.0 0.0 NORM_MINMAX);
result = result * 255;
sprintf_s(filename “D:\\根系实验数据\\CTyushiyan\\有机断面\\%d.png“j);
imwrite(filename result);
}

waitKey(0);
}

float correct(float *sinogram int width int angle float SD int rotate)//修正函数,包括正弦图,宽度,角度(高度),源到探测器距离,旋转中心
{
clock_t t_start t_end;//计时函数
t_start = clock();

int i j;
float k;
for (i = 0; i < width; i++)
{
k = SD / sqrt(SD*SD + (i - rotate)*(i - rotate));//修正表达式
for (j = 0; j < angle; j++)
{
sinogram[j*width + i] *= k;//将原正弦图乘以修正表达式,得到新的正弦图
}
}

t_end = clock();
float time = (float)(t_end - t_start) * 1000 / CLOCKS_PER_SEC;//计时函数,计算耗时
return time;
}


float convfiltering(float *sinogram int width int angle int start int end)//卷积滤波函数,包括正弦图,宽度,角度,开始与结束
{
clock_t t_start t_end;//计时函数
t_start = clock();

if (start >= end || start < 0 || end >= width)//纠错,防止出现错误
{
start = 0;
end = width - 1;
}
float *b = new float[2 * width - 1];
float *h = new float[width];
float *dst = new float[width];
int i j;
float a;
for (i = 0; i < width; i++) dst[i] = 0.0;
const float w = -0.20264236728f;//S-L滤波常数
for (i = 0; i < width; i++)
{
a = w / (4 * i * i - 1);//S-L滤波函数
b[width - 1 - i] = a;
b[width - 1 + i] = a;
}
for (j = 0; j < angle; j++)
{
for (i = 0; i < width; i++)
{
h[i] = sinogram[j*width + i];//将修正后的数据传递给需要进行卷积运算
}
int minradius = (2 * width - 1) / 2;
int maxradius = 2 * width - 1 - minradius;
int d e f;
for (d = start; d <= end; d++)
{
dst[d] = 0;
for (e = -maxradius + 1; e <= minradius; e++)
{
f = d + e;
if (f >= 0 && f < width)
dst

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-03-18 21:13  FBPtest1\
     目录           0  2018-03-18 19:13  FBPtest1\Debug\
     目录           0  2018-03-18 21:13  FBPtest1\FBPtest1\
     文件    26869760  2018-03-18 21:13  FBPtest1\FBPtest1.sdf
     文件        1397  2018-03-18 19:14  FBPtest1\FBPtest1.sln
     文件       33792  2018-03-18 21:13  FBPtest1\FBPtest1.v12.suo
     目录           0  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\
     文件      461620  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\fbp.obj
     文件        1534  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.log
     目录           0  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\
     文件         612  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\cl.command.1.tlog
     文件       31936  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\CL.read.1.tlog
     文件         408  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\CL.write.1.tlog
     文件         160  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\FBPtest1.lastbuildstate
     文件           2  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\link.command.1.tlog
     文件           2  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\link.read.1.tlog
     文件           2  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\link.write.1.tlog
     文件           0  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\FBPtest1.tlog\unsuccessfulbuild
     文件      879616  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\vc120.idb
     文件     1970176  2018-03-18 19:13  FBPtest1\FBPtest1\Debug\vc120.pdb
     文件        5082  2018-03-18 21:13  FBPtest1\FBPtest1\fbp.cpp
     文件        7416  2018-03-18 19:13  FBPtest1\FBPtest1\FBPtest1.vcxproj
     文件         944  2017-08-28 10:14  FBPtest1\FBPtest1\FBPtest1.vcxproj.filters
     文件         165  2017-08-28 10:18  FBPtest1\FBPtest1\FBPtest1.vcxproj.user
     目录           0  2017-08-28 10:14  FBPtest1\FBPtest1\x64\
     目录           0  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\
     文件      579722  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\fbp.obj
     文件         792  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\FBPtest1.Build.CppClean.log
     文件        1845  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\FBPtest1.log
     目录           0  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\FBPtest1.tlog\
     文件         598  2018-03-18 19:15  FBPtest1\FBPtest1\x64\Debug\FBPtest1.tlog\cl.command.1.tlog
............此处省略13个文件信息

评论

共有 条评论