diff --git a/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.txx b/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.txx index 154c73b8c4805ade35f63410d841b2999b2fe751..9595466d47d0a1bb66768e6d241a8c26f8341f88 100644 --- a/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.txx +++ b/Modules/Core/Common/include/otbImageRegionAdaptativeSplitter.txx @@ -107,10 +107,14 @@ ImageRegionAdaptativeSplitter<VImageDimension> // Now we can handle the case where we have a tile hint and a // non-trivial requested number of splits SizeType tilesPerDim, splitsPerDim; - - tilesPerDim[0] = (m_ImageRegion.GetSize()[0] + m_TileHint[0] -1) / m_TileHint[0]; - tilesPerDim[1] = (m_ImageRegion.GetSize()[1] + m_TileHint[1] -1) / m_TileHint[1]; - + IndexType firstTileCovered; + + // First, we need to get which tiles are covered by ROI + firstTileCovered[0] = m_ImageRegion.GetIndex()[0] / m_TileHint[0]; + firstTileCovered[1] = m_ImageRegion.GetIndex()[1] / m_TileHint[1]; + tilesPerDim[0] = (m_ImageRegion.GetIndex()[0] + m_ImageRegion.GetSize()[0] -1 + m_TileHint[0] -1) / m_TileHint[0] - firstTileCovered[0]; + tilesPerDim[1] = (m_ImageRegion.GetIndex()[1] + m_ImageRegion.GetSize()[1] -1 + m_TileHint[1] -1) / m_TileHint[1] - firstTileCovered[1]; + unsigned int totalTiles = tilesPerDim[0] * tilesPerDim[1]; // In this case, we have to group input tiles @@ -134,13 +138,14 @@ ImageRegionAdaptativeSplitter<VImageDimension> i = (i+1)%2; } + splitsPerDim[0] = tilesPerDim[0] / groupTiles[0]; + splitsPerDim[1] = tilesPerDim[1] / groupTiles[1]; // Handle the last small tile if any if(tilesPerDim[0] % groupTiles[0] > 0) splitsPerDim[0]++; - splitsPerDim[1] = tilesPerDim[1] / groupTiles[1]; if(tilesPerDim[1] % groupTiles[1] > 0) splitsPerDim[1]++; @@ -157,8 +162,8 @@ ImageRegionAdaptativeSplitter<VImageDimension> newSplitSize[0] = groupTiles[0] * m_TileHint[0]; newSplitSize[1] = groupTiles[1] * m_TileHint[1]; - newSplitIndex[0] = splitx * newSplitSize[0]; - newSplitIndex[1] = splity * newSplitSize[1]; + newSplitIndex[0] = firstTileCovered[0] * m_TileHint[0] + splitx * newSplitSize[0]; + newSplitIndex[1] = firstTileCovered[1] * m_TileHint[1] + splity * newSplitSize[1]; newSplit.SetIndex(newSplitIndex); newSplit.SetSize(newSplitSize); @@ -208,8 +213,8 @@ ImageRegionAdaptativeSplitter<VImageDimension> RegionType newSplit; IndexType newSplitIndex; - newSplitIndex[0] = tilex * m_TileHint[0] + divx * splitSize[0]; - newSplitIndex[1] = tiley * m_TileHint[1] + divy * splitSize[1]; + newSplitIndex[0] = (tilex + firstTileCovered[0]) * m_TileHint[0] + divx * splitSize[0]; + newSplitIndex[1] = (tiley + firstTileCovered[1]) * m_TileHint[1] + divy * splitSize[1]; newSplit.SetIndex(newSplitIndex); newSplit.SetSize(splitSize); diff --git a/Modules/Core/Common/test/CMakeLists.txt b/Modules/Core/Common/test/CMakeLists.txt index e32118293bc838491f5be7754ed53d22c35699b3..4a1a24db97c81f0ae6b4b08316c494f79126c795 100644 --- a/Modules/Core/Common/test/CMakeLists.txt +++ b/Modules/Core/Common/test/CMakeLists.txt @@ -78,6 +78,24 @@ otb_add_test(NAME coTvImageRegionAdaptativeSplitterStripLargeStream COMMAND otbC ${TEMP}/coTvImageRegionAdaptativeSplitterStripLargeStreamOutput.txt ) +otb_add_test(NAME coTvImageRegionAdaptativeSplitterShiftedROILargeStream COMMAND otbCommonTestDriver + --compare-ascii ${NOTOL} + ${BASELINE_FILES}/coTvImageRegionAdaptativeSplitterShiftedROILargeStreamOutput.txt + ${TEMP}/coTvImageRegionAdaptativeSplitterShiftedROILargeStreamOutput.txt + otbImageRegionAdaptativeSplitter + 1000 1000 4000 4000 2000 2000 5 + ${TEMP}/coTvImageRegionAdaptativeSplitterShiftedROILargeStreamOutput.txt + ) + +otb_add_test(NAME coTvImageRegionAdaptativeSplitterShiftedROISmallStream COMMAND otbCommonTestDriver + --compare-ascii ${NOTOL} + ${BASELINE_FILES}/coTvImageRegionAdaptativeSplitterShiftedROISmallStreamOutput.txt + ${TEMP}/coTvImageRegionAdaptativeSplitterShiftedROISmallStreamOutput.txt + otbImageRegionAdaptativeSplitter + 1000 1000 4000 4000 2000 2000 5 + ${TEMP}/coTvImageRegionAdaptativeSplitterShiftedROISmallStreamOutput.txt + ) + otb_add_test(NAME coTuRGBAPixelConverter COMMAND otbCommonTestDriver otbRGBAPixelConverterNew )