An error occurred while loading the file. Please try again.
-
Pierre Lassalle authored65f3020d
#ifndef __LSRM_GRAPH_TO_OTBIMAGE_TXX
#define __LSRM_GRAPH_TO_OTBIMAGE_TXX
#include "lsrmGraphToOtbImage.h"
#include "itkImageRegionIterator.h"
#include "itkGrayscaleFillholeImageFilter.h"
namespace lsrm
{
template<class TGraph>
typename GraphToOtbImage<TGraph>::LabelImageType::Pointer
GraphToOtbImage<TGraph>::GetLabelImage(const GraphType& graph,
const unsigned int width,
const unsigned int height)
{
LabelImageType::IndexType index;
LabelImageType::SizeType size;
LabelImageType::RegionType region;
index[0] = 0; index[1] = 0;
size[0] = width; size[1] = height;
region.SetIndex(index);
region.SetSize(size);
LabelImageType::Pointer label_img = LabelImageType::New();
label_img->SetRegions(region);
label_img->Allocate();
using LabelImageIterator = itk::ImageRegionIterator<LabelImageType>;
LabelImageIterator it(label_img, label_img->GetLargestPossibleRegion());
for(it.GoToBegin();!it.IsAtEnd(); ++it)
it.Set(0);
// Start at 1 (value 0 can be used for invalid pixels)
long unsigned int label = 1;
for(auto& region : graph.m_Nodes)
{
lp::CellLists borderPixels;
ContourOperator::GenerateBorderCells(borderPixels, region->m_Contour, region->m_Id, width);
for (auto& pix: borderPixels)
{
index[0] = pix % width;
index[1] = pix / width;
label_img->SetPixel(index, label);
}
++label;
}
// Fill holes
typedef itk::GrayscaleFillholeImageFilter<LabelImageType,LabelImageType> FillholeFilterType;
FillholeFilterType::Pointer fillFilter = FillholeFilterType::New();
fillFilter->SetInput(label_img);
fillFilter->Update();
return fillFilter->GetOutput();
}
/*template<class TGraph>
typename GraphToOtbImage<TGraph>::ClusteredImageType::Pointer
GraphToOtbImage<TGraph>::GetClusteredOutput(const GraphType& graph,
const unsigned int width,
const unsigned int height)
{
ClusteredImageType::IndexType index;
ClusteredImageType::SizeType size;
ClusteredImageType::RegionType region;
index[0] = 0; index[1] = 0;
size[0] = width; size[1] = height;
region.SetIndex(index);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
region.SetSize(size);
ClusteredImageType::Pointer clusterImg = ClusteredImageType::New();
clusterImg->SetRegions(region);
clusterImg->SetNumberOfComponentsPerPixel(3);
clusterImg->Allocate();
ClusteredImageType::PixelType pixelValue;
pixelValue.Reserve(3);
pixelValue[0] = 0;
pixelValue[1] = 0;
pixelValue[2] = 0;
using ClusterImageIterator = itk::ImageRegionIterator<ClusteredImageType>;
ClusterImageIterator it(clusterImg, clusterImg->GetLargestPossibleRegion());
for(it.GoToBegin();!it.IsAtEnd(); ++it)
it.Set(pixelValue);
srand(time(NULL));
unsigned char c1, c2, c3;
for(auto& region : graph.m_Nodes)
{
c1 = rand() % 256;
c2 = rand() % 256;
c3 = rand() % 256;
lp::CellLists borderPixels;
ContourOperator::GenerateBorderCells(borderPixels, region->m_Contour, region->m_Id, width);
for (auto& pix : borderPixels)
{
index[0] = pix % width;
index[1] = pix / width;
pixelValue[0] = c1;
pixelValue[1] = c2;
pixelValue[2] = c3;
clusterImg->SetPixel(index, pixelValue);
}
}
for(it.GoToBegin(); !it.IsAtEnd(); ++it)
{
auto pixel = it.Get();
if(pixel[0] == 0 && pixel[1] == 0 && pixel[2] == 0)
it.Set(pixelValue);
else
pixelValue = pixel;
}
return clusterImg;
}*/
} // end of namespace lsrm
#endif