Skip to content
Snippets Groups Projects
Commit e9f6b955 authored by Guillaume Pasero's avatar Guillaume Pasero
Browse files

Merge branch 'bugfix-983-next' into develop

Conflicts:
	Modules/Core/Common/test/CMakeLists.txt
parents 085c0ab1 d08877e2
No related branches found
No related tags found
No related merge requests found
......@@ -186,7 +186,9 @@ ImageRegionAdaptativeSplitter<VImageDimension>
unsigned int i = 1;
while(totalTiles * (divideTiles[0] * divideTiles[1]) < m_RequestedNumberOfSplits)
// Exit condition if divideTiles=m_TileHint (i.e. no more subdivision available)
while(totalTiles * (divideTiles[0] * divideTiles[1]) < m_RequestedNumberOfSplits
&& (divideTiles[0] < m_TileHint[0] || divideTiles[1] < m_TileHint[1]))
{
if(divideTiles[i] < m_TileHint[i])
{
......@@ -200,6 +202,8 @@ ImageRegionAdaptativeSplitter<VImageDimension>
splitSize[0] = (m_TileHint[0] + divideTiles[0] - 1)/ divideTiles[0];
splitSize[1] = (m_TileHint[1] + divideTiles[1] - 1)/ divideTiles[1];
RegionType tileHintRegion;
tileHintRegion.SetSize(m_TileHint);
// Fill the tiling scheme
for(unsigned int tiley = 0; tiley < tilesPerDim[1]; ++tiley)
{
......@@ -219,13 +223,21 @@ ImageRegionAdaptativeSplitter<VImageDimension>
newSplit.SetIndex(newSplitIndex);
newSplit.SetSize(splitSize);
tileHintRegion.SetIndex(0, tilex * m_TileHint[0]);
tileHintRegion.SetIndex(1, tiley * m_TileHint[1]);
bool cropped = newSplit.Crop(m_ImageRegion);
// If newSplit could not be cropped, it means that it is
// outside m_ImageRegion. In this case we ignore it.
if(cropped)
{
m_StreamVector.push_back(newSplit);
// check that the split stays inside its tile
cropped = newSplit.Crop(tileHintRegion);
if (cropped)
{
m_StreamVector.push_back(newSplit);
}
}
}
}
......
......@@ -96,6 +96,18 @@ otb_add_test(NAME coTvImageRegionAdaptativeSplitterShiftedROISmallStream COMMAND
${TEMP}/coTvImageRegionAdaptativeSplitterShiftedROISmallStreamOutput.txt
)
otb_add_test(NAME coTvImageRegionAdaptativeSplitterMissingLine COMMAND otbCommonTestDriver
otbImageRegionAdaptativeSplitter
0 0 1000 1000 1000 1 37
${TEMP}/coTvImageRegionAdaptativeSplitterMissingLine.txt
)
otb_add_test(NAME coTvImageRegionAdaptativeSplitterDivideBlock COMMAND otbCommonTestDriver
otbImageRegionAdaptativeSplitter
0 0 10 10 5 5 36
${TEMP}/coTvImageRegionAdaptativeSplitterDivideBlock.txt
)
otb_add_test(NAME coTuRGBAPixelConverter COMMAND otbCommonTestDriver
otbRGBAPixelConverterNew
)
......
......@@ -59,16 +59,63 @@ int otbImageRegionAdaptativeSplitter(int itkNotUsed(argc), char * argv[])
unsigned int nbSplits = splitter->GetNumberOfSplits(region, requestedNbSplits);
std::vector<RegionType> splits;
outfile<<splitter<<std::endl;
outfile<<"Split map: "<<std::endl;
for(unsigned int i = 0; i < nbSplits; ++i)
{
outfile<<"Split "<<i<<": "<<splitter->GetSplit(i, requestedNbSplits, region);
RegionType tmpRegion = splitter->GetSplit(i, requestedNbSplits, region);
splits.push_back(tmpRegion);
outfile<<"Split "<<i<<": "<<tmpRegion;
}
outfile.close();
// Basic consistency check on split map
if (requestedNbSplits != nbSplits)
{
std::cout << "Wrong number of splits : got "<<nbSplits<<" , expected "<<requestedNbSplits<< std::endl;
}
IndexType tmpIndex;
for (unsigned int i=regionIndex[0] ; i<(regionIndex[0]+regionSize[0]) ; ++i)
{
for (unsigned int j=regionIndex[1] ; j<(regionIndex[1]+regionSize[1]) ; ++j)
{
tmpIndex[0] = i;
tmpIndex[1] = j;
unsigned int count = 0;
for (unsigned int k=0 ; k<nbSplits ; ++k )
{
if (splits[k].IsInside(tmpIndex))
{
count++;
}
}
if (count == 0)
{
std::cout << "Index ["<<i<<","<<j<<"] is missing in split map" << std::endl;
return EXIT_FAILURE;
}
if (count > 1)
{
std::cout << "Index ["<<i<<","<<j<<"] occurs more than once in the split map" << std::endl;
return EXIT_FAILURE;
}
}
}
unsigned int pixelInSplit = 0;
for (unsigned int k=0 ; k<nbSplits ; ++k )
{
pixelInSplit += splits[k].GetSize(0) * splits[k].GetSize(1);
}
if (pixelInSplit != regionSize[0]*regionSize[1])
{
std::cout << "Wrong number of pixels in split : got "<<pixelInSplit << " , expected "<< regionSize[0]*regionSize[1] << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment