itk中的花式数据切割(二)
来源:互联网 发布:js namespace用法 编辑:程序博客网 时间:2024/05/29 19:18
上篇切割的特征是越切越小,这次换个不会变小的方法,当然不同的方法有利有弊,中间取舍,看实际情况。
0.先构建一个与原始数据同等大小的图像,这个是前提条件
略。。。(不清楚的请转《itk中的基本图像操作》一文)
1.沿着Z轴按照预设范围切出方盒子(其实随便XYZ那一边都一样)
ImageType::SizeType size = input_data->GetLargestPossibleRegion().GetSize();int min_temp = point_z[2] - min;int max_temp = point_z[2] + max;for(int k= min_temp; k<max_temp; k++){for(int j=0; j<size[1]; j++){for(int i=0; i<size[0]; i++){ImageType::IndexType point_temp;point_temp[0] = i;point_temp[1] = j;point_temp[2] = k;ImageType::PixelType value = input_data->GetPixel(point_temp);output_data->SetPixel(point_temp,1);}}}
思路:构建同等大小的容器,然后将需要的像素点放进去。
优点:结果图像和原始图像一样大小,可以直接做数学运算
缺点:由于像素点相等,所以在遍历时候运算速度受到一定影响
2.切出序列图像的某一层
ImageType::RegionType inputRegion = input_data->GetLargestPossibleRegion();ImageType::SizeType size = inputRegion.GetSize();if (factor_mode == X){int x = num_temp;for (int y=0;y<size[1];y++){for (int z=0;z<size[2];z++){ImageType::IndexType point_temp;point_temp[0] = x;point_temp[1] = y;point_temp[2] = z;ImageType::PixelType rad_value = input_data->GetPixel(point_temp);output_data->SetPixel(point_temp,rad_value);}}}else if (factor_mode == Y){int y = num_temp;for (int x=0;x<size[0];x++){for (int z=0;z<size[2];z++){ImageType::IndexType point_temp;point_temp[0] = x;point_temp[1] = y;point_temp[2] = z;ImageType::PixelType rad_value = input_data->GetPixel(point_temp);output_data->SetPixel(point_temp,rad_value);}}}else if(factor_mode == Z){int z = num_temp;for (int x=0;x<size[0];x++){for (int y=0;y<size[1];y++){ImageType::IndexType point_temp;point_temp[0] = x;point_temp[1] = y;point_temp[2] = z;ImageType::PixelType rad_value = input_data->GetPixel(point_temp);output_data->SetPixel(point_temp,rad_value);}}}
思路:和1中的方法如出一辙。只是提取了某一层。其实按照这方法,你可以把任何想提取的像素点放到对应的容器中。比如接下来的3。
3.切出一个球形(其实随便什么形状)
ImageType::RegionType inputRegion = input_data->GetLargestPossibleRegion();ImageType::SizeType size = inputRegion.GetSize();int radius2=radius*radius;for(int k=0;k<size[2];k++){for(int j=0;j<size[1];j++){for(int i=0;i<size[0];i++){if((i-x)*(i-x)+(j-y)*(j-y)+(k-z)*(k-z)<=radius2){ImageType::IndexType point_temp2;point_temp2[0] = i;point_temp2[1] = j;point_temp2[2] = k;output_data->SetPixel(point_temp2,density);}}}}}
对比上篇《一》的方法,思路刚好是相反的,《一》中是在原始数据的基础上,把不需要的删除,而这篇是从原始数据中把需要的提取出来。还是那句话,方法没有优劣,选择要看实际情况。
人法地,地法天,天法道,道法自然。
代码之余,时刻要提醒自己跳出程序之外,不要太忙,不要把编码时间安排的太满,走一走,停一停,回头看一看,想一想。代码撸的再好,始终只是用来糊口的术,用到什么,就去学什么好了,随时拿起,随时放下。真正需要思考的,是怎么才能过好这一生,这才是道。
阅读全文
0 0
- itk中的花式数据切割(二)
- itk中的花式数据切割(一)
- itk中的花式数据切割(三)
- itk中的花式数据切割(四)
- itk中的花式数据切割(五)
- itk中的特征提取算法(二)
- itk中的图像分割算法(二)
- itk中的数据变大变小
- itk中的数据孔洞填充
- itk中的数据细化算法
- itk中的数据翻转算法
- itk中的数据平滑算法(除噪)
- itk中的特征提取算法(一)
- itk中的特征提取算法(三)
- itk中的特征提取算法(四)
- itk中的特征提取算法(五)
- itk中的图像分割算法(一)
- itk中的图像分割算法(三)
- tensorflow : 使用预训练词向量
- 漫谈单点登录(SSO)
- 动态改变ListCtrl中的图标
- ubuntu 虚拟机设置无线上网
- 蓝桥杯 第七届决赛 平方末尾 JAVA
- itk中的花式数据切割(二)
- SylixOS ICAN 协议移植笔记
- elasticsearch 索引秘密
- springMVC下得excel上传下载
- 流媒体计划
- java多线程(八) 之 并发容器
- 关于session.isNew方法?
- iOS 判断当前时间是否处于某个时间段内
- JavaScript Array的常用方法(一)