資源簡介
c語言,進行圖像三維26鄰域區域生長,種子點自己可以設定
代碼片段和文件信息
#include?“stdlib.h“
#include?“stdio.h“
#include?“ConfigReader.h“
#include?
#include?“ImageType.h“
#include?“ImgIO.h“
#include?“PreProcess.h“
#include
#include?se/array_ref.hxx>
#include?
#include?
#include?“itkCurvatureAnisotropicDiffusionImageFilter.h“
#include?“itkVectorCurvatureAnisotropicDiffusionImageFilter.h“
#include?
#include?“itkMeanImageFilter.h“?
#include?
#include?“tinyxml.h“
#define?MAXCOST?1000000?
using?namespace?std;
using?namespace?optnet;
?
#define?BYTESWAP_2(x)?((((x)?&?0xff)?<8)?|?((unsigned?short)(x)?>>?8))
#define?BYTESWAP_USHORT(x)?(*(unsigned?short?*)&(x)?=?BYTESWAP_2(*(unsigned?short?*)&(x)))
????//=====================================三維圖像堆棧實現區域生長==================================================
unsigned?short*flag=new?unsigned?short[imgWHD[0]*imgWHD[1]*imgWHD[2]];???//是否已經入棧的標記
for(int?k=0;k ????for(int?j=0;j ????????????for(int?i=0;i {
flag[k*imgWHD[0]*imgWHD[1]+j*imgWHD[0]+i]=1;??????//所有元素未入棧
}
?????unsigned?short?intensity=14500;????????????//6631用15000效果很好???用17000似乎有點大
?unsigned?short?threshold=1000;????????????//區域生長閾值2000?1000?1800
?????typedef?struct//保存種子像素
??????{
????????????int?x;
????????????int?y;
int?z;
???????}seedpoint;
?????stackseedS;????????//存儲對象seedpoint的堆棧seedS
?seedpoint?point;????????//創建對象
?for(int?k=0;k ????for(int?j=0;j ????????????for(int?i=0;i {
//把這里的seed_data改成!=1和==1會造成最后一個slice是否存在
if(seed_data[k*imgWHD[0]*imgWHD[1]+j*imgWHD[0]+i]==!1?&&?Data[k*imgWHD[0]*imgWHD[1]+j*imgWHD[0]+i] {?
??point.x=i;
??????????point.y=j;
??point.z=k; ?
??seedS.push(point);
?//flag[k*imgWHD[0]*imgWHD[1]+j*imgWHD[0]+i]=0;//已經如果棧的元素都標記為1
}
}
??????int?ii?=?0;
??????unsigned?short?*?result_data=new?unsigned?short[imgWHD[0]*imgWHD[1]*imgWHD[2]];
??while(ii ?{
?ii++;
??seedpoint?temppoint;?????//創建一個元素
??point=seedS.top();???????//取棧頂元素?????????//point為棧中元素的實體
??seedS.pop();?????????????//棧頂元素出棧
??flag[point.z*imgWHD[0]*imgWHD[1]+point.y*imgWHD[0]+point.x]=0;//將已經出棧的元素都標記為0
??if((point.x>0)&&(point.x<(imgWHD[0]-1))&&(point.y>0)&&(point.y<(imgWHD[1]-1))&&(point.z>0)&&(point.z<(imgWHD[2]-1)))??????//如果出棧的元素在圖像大小范圍內
??{
//1
???if(flag[point.z*imgWHD[0]*imgWHD[1]+point.y*imgWHD[0]+point.x-1]==1?&&?Data[(point.z)*imgWHD[0]*imgWHD[1]+(point.y)*imgWHD[0]+point.x-1]<=intensity?&&?(abs(Data[(point.z)*imgWHD[0]*imgWHD[1]+(point.y)*imgWHD[0]+point.x-1]-Data[((point.z)*imgWHD[0]*imgWHD[1]+(point.y)*imgWHD[0]+point.x)]) ???{
????result_data[(point.z)*imgWHD[0]*imgWHD[1]+(point.y)*imgWHD[0]+point.x-1]=256*256-1;
????temppoint.x=p
評論
共有 條評論