Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Cresson Remi
LSGRM
Commits
07554cbf
Commit
07554cbf
authored
Nov 17, 2017
by
Gaetano Raffaele
Browse files
FIX: fixed some 64-bit type related problems for large images under Windows
parent
3c558d44
Changes
4
Hide whitespace changes
Inline
Side-by-side
include/lsgrmController.txx
View file @
07554cbf
...
...
@@ -88,6 +88,7 @@ void Controller<TSegmenter>::RunSegmentation()
// Run first partial segmentation
boost::timer t; t.restart();
auto accumulatedMemory = RunFirstPartialSegmentation<TSegmenter>(
m_InputImage,
m_SpecificParameters,
...
...
@@ -140,7 +141,7 @@ void Controller<TSegmenter>::RunSegmentation()
numberOfIterationsRemaining -= numberOfIterationsForPartialSegmentations;
}
}
#ifdef OTB_USE_MPI
// Only the master process is doing the next part
// TODO: Use the MPI process wich has the largest amount of memory
...
...
include/lsgrmGraphOperations.h
View file @
07554cbf
...
...
@@ -98,7 +98,8 @@ void BuildBorderPixelMap(typename TSegmenter::GraphType& graph,
const
unsigned
int
nbTilesY
,
std
::
unordered_map
<
std
::
size_t
,
std
::
vector
<
typename
TSegmenter
::
NodePointerType
>
>&
borderPixelMap
,
const
unsigned
int
imageWidth
);
const
unsigned
int
imageWidth
,
bool
merging
=
false
);
template
<
class
TSegmenter
>
void
InsertNodesFromTile
(
typename
TSegmenter
::
GraphType
&
graph
,
...
...
include/lsgrmGraphOperations.txx
View file @
07554cbf
...
...
@@ -69,7 +69,7 @@ MergeAllGraphsAndAchieveSegmentation(
std::cout << "\tBuildBorderPixelMap..." << std::endl;
BuildBorderPixelMap<TSegmenter>(segmenter.m_Graph, tiles[row*nbTilesX + col], row, col,
nbTilesX, nbTilesY, borderPixelMap, imageWidth);
nbTilesX, nbTilesY, borderPixelMap, imageWidth
, true
);
std::cout << "\tRemoveDuplicatedNodes..." << std::endl;
...
...
@@ -93,7 +93,9 @@ MergeAllGraphsAndAchieveSegmentation(
segmenter.SetNumberOfIterations(numberOfIterations);
grm::GraphOperations<TSegmenter>::PerfomAllIterationsWithLMBFAndConstThreshold(segmenter);
// patch raf (sort using node id directly --> seems ok)
// Sort the nodes top-->down and left-->right
/*
std::sort(segmenter.m_Graph.m_Nodes.begin(), segmenter.m_Graph.m_Nodes.end(),
[imageWidth](const auto & a, const auto & b) -> bool
{
...
...
@@ -101,8 +103,10 @@ MergeAllGraphsAndAchieveSegmentation(
lp::ContourOperations::GenerateBorderCells(borderPixelsA, a->m_Contour, a->m_Id, imageWidth);
lp::ContourOperations::GenerateBorderCells(borderPixelsB, b->m_Contour, b->m_Id, imageWidth);
unsigned int offA = 0;
unsigned int offB = 0;
// patch raf (were unsigned int)
std::size_t offA = 0;
std::size_t offB = 0;
// end patch
for (auto& pix: borderPixelsA)
if (pix>offA)
offA=pix;
...
...
@@ -113,6 +117,13 @@ MergeAllGraphsAndAchieveSegmentation(
return offA > offB;
});
*/
std::sort(segmenter.m_Graph.m_Nodes.begin(), segmenter.m_Graph.m_Nodes.end(),
[](const auto & a, const auto & b) -> bool
{
return a->m_Id < b->m_Id;
});
// end patch
return segmenter.m_Graph;
}
...
...
@@ -466,7 +477,8 @@ void BuildBorderPixelMap(typename TSegmenter::GraphType& graph,
const unsigned int nbTilesY,
std::unordered_map<std::size_t,
std::vector<typename TSegmenter::NodePointerType> >& borderPixelMap,
const unsigned int imageWidth)
const unsigned int imageWidth,
bool merging)
{
unsigned int rowPixel, colPixel;
unsigned int rowMin = (tile.rows[0] > 0) ? tile.rows[0] - 1 : tile.rows[0];
...
...
@@ -483,6 +495,15 @@ void BuildBorderPixelMap(typename TSegmenter::GraphType& graph,
{
continue;
}
// patch raf (exclude nodes all outside tiles - on merging stage only)
else if(merging && (node->m_Bbox.m_UX > tile.columns[1] ||
node->m_Bbox.m_UY > tile.rows[1] ||
node->m_Bbox.m_UX + node->m_Bbox.m_W - 1 < tile.columns[0] ||
node->m_Bbox.m_UY + node->m_Bbox.m_H - 1 < tile.rows[0]))
{
continue;
}
// end patch
else
{
lp::CellLists borderPixels;
...
...
@@ -618,9 +639,11 @@ long long unsigned int RunFirstPartialSegmentation(
std::cout << "--- Running fist partial segmentation...\nNumber of neighbor layers " << numberOfNeighborLayers << std::endl;
for(unsigned int row = 0; row < nbTilesY; ++row)
//for(unsigned int row = 0; row < nbTilesY; ++row)
for(unsigned int row = 24; row < 25; ++row)
{
for(unsigned int col = 0; col < nbTilesX; col++)
//for(unsigned int col = 0; col < nbTilesX; col++)
for(unsigned int col = 30; col < 31; col++)
{
#ifdef OTB_USE_MPI
if (MyTurn(row*nbTilesX + col))
...
...
@@ -645,7 +668,7 @@ long long unsigned int RunFirstPartialSegmentation(
segmenter.SetNumberOfIterations(niter);
segmenter.SetInput(imageTile);
segmenter.Update();
if(segmenter.GetComplete() == false)
isFusion = true;
...
...
@@ -658,7 +681,7 @@ long long unsigned int RunFirstPartialSegmentation(
tileWidth,
tileHeight,
imageWidth);
// Remove unstable segments
std::cout << "\tRemoving unstable segments..." << std::endl;
RemoveUnstableSegments<TSegmenter>(segmenter.m_Graph, currentTile, imageWidth);
...
...
@@ -991,7 +1014,7 @@ void RescaleGraph(typename TSegmenter::GraphType& graph,
// Start pixel index of the node (in the image)
rowNodeImg = rowTile * tileHeight + rowNodeTile - tile.margin[0];
colNodeImg = colTile * tileWidth + colNodeTile - tile.margin[3];
node->m_Id =
rowNodeImg * imageWidth +
colNodeImg;
node->m_Id =
(std::size_t)rowNodeImg * (std::size_t)imageWidth + (std::size_t)
colNodeImg;
// Change also its bounding box
node->m_Bbox.m_UX = colTile * tileWidth + node->m_Bbox.m_UX - tile.margin[3];
...
...
include/otbStreamingGraphToImageFilter.txx
View file @
07554cbf
...
...
@@ -131,9 +131,17 @@ StreamingGraphToImageFilter<TGraph, TLabelImage>
for (auto& pix: borderPixels)
{
index[0] = pix % m_OutputSize[0];
index[1] = pix / m_OutputSize[0];
// patch raf (catch exception if position of pixel to set is not correct)
try {
index[0] = (unsigned int)(pix % (std::size_t)(m_OutputSize[0]));
index[1] = (unsigned int)(pix / (std::size_t)(m_OutputSize[0]));
labelImage->SetPixel(index, res.second);
} catch (std::exception e) {
std::cout << "Pixel ID: " << pix << std::endl;
std::cout << "Derived index: " << index[0] << "," << index[1] << std::endl;
std::cout << "Node position in list: " << res.second << std::endl;
}
// end patch
}
}
itkDebugMacro( << "Burning boundaries ok ");
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment