资源简介
基于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\li
文件 2 2018-03-18 19:13 FBPtest1\FBPtest1\Debug\FBPtest1.tlog\li
文件 2 2018-03-18 19:13 FBPtest1\FBPtest1\Debug\FBPtest1.tlog\li
文件 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个文件信息
评论
共有 条评论