itk 返回每个labelobject的坐标位置
vtk吧
全部回复
仅看楼主
level 8
臭臭爸YY 楼主
吧神 如题 下面是一副二值图 用itk已经可以获取到每一个labelobject了 就是所有像素值为1的连通区域 然后怎么获取每个连通区域里面的像素的坐标值呢?
int main(int argc, char * argv[])
{
vtkSmartPointer<vtkPoints> sourcePoint = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkPolyData> source = vtkSmartPointer<vtkPolyData>::New();
const int dim = 3;
typedef unsigned char PixelType;
typedef itk::Image< PixelType, dim > ImageType;
typedef itk::ImageFileReader< ImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("C:\\Users\\zgb\\Desktop\\01.png");
typedef unsigned long LabelType;
typedef itk::ShapeLabelObject< LabelType, dim > LabelObjectType;
typedef itk::LabelMap< LabelObjectType > LabelMapType;
typedef itk::BinaryImageToShapeLabelMapFilter< ImageType, LabelMapType > ConverterType;
ConverterType::Pointer converter = ConverterType::New();
converter->SetInput( reader->GetOutput() );
converter->SetFullyConnected(true);
converter->SetInputForegroundValue(255);
converter->Update();
LabelMapType::Pointer labelMap = converter->GetOutput();
for( unsigned int label=1; label<=labelMap->GetNumberOfLabelObjects(); label++ )
{
const LabelObjectType * labelObject = labelMap->GetLabelObject( label );
labelObject->GetPhysicalSize();
labelObject->GetCentroid() :
}
现在可以获取每个连通区域的大小质心之类的数据了 可是没找到合适成员函数返回每个连通区域的坐标值(也就是像素为1的坐标值)
吧神指教一二[乖]
2016年07月12日 08点07分 1
level 12
你要把每个连通域的所有为1 的坐标值都获取到吗?
2016年07月13日 00点07分 2
对呀 连通区域就是像素为1的区域呀 我想都返回坐标值 然后与质心坐标进行距离对比 取最远的那个点坐标
2016年07月13日 01点07分
level 12
如果我理解的没错,那么就easy了
你现在有个每个连通域的质心,就把这些质心当作seed
每个seed单独做个与connectedThreshold,
然后,
没了~~~!![正Music]
解决问题的方法有很多,看你怎么玩~
2016年07月13日 00点07分 3
@臭臭爸YY 区域生长这一块貌似~~~connectedThresholdimagefilter
2016年07月13日 01点07分
@臭臭爸YY 可是吧神 这个类里面也木有获取坐标的成员函数呀
2016年07月13日 01点07分
@臭臭爸YY [滑稽]我负责抛砖,引玉你来做~
2016年07月13日 02点07分
@rabbitbride [惊哭] 让我来试试 [狂汗]
2016年07月13日 02点07分
level 8
臭臭爸YY 楼主
vtkSmartPointer<vtkPolyData> PolyData= vtkSmartPointer<vtkPolyData>::New();
PolyData->SetLines(linesCellArray);
PolyData->SetPoints(points);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInput(PolyData);
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetColor(1,0,0);
actor->GetProperty()->SetLineWidth(5);
这是显示直线的那一部分,但是我发现用这个函数actor->GetProperty()->SetLineWidth(5);设置直线的宽度,当宽度稍微大点的时候,就不灵了。SetLineWidth(10)和SetLineWidth(100)显示的直线宽度是一样的~~~咋回事呀[泪]
2016年07月16日 12点07分 4
level 12
你这么无聊,宽度100的那还是线吗?
opengl最大支持到10。
若想再宽,请用矩形[冷]
2016年07月18日 01点07分 5
[委屈]。。。
2016年07月18日 01点07分
1