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
Lozac'h Loic
otbtf
Commits
2a58c00b
Commit
2a58c00b
authored
Nov 06, 2018
by
remi cresson
Browse files
WIP
parent
9ed371d3
Changes
1
Hide whitespace changes
Inline
Side-by-side
include/otbTensorflowMultisourceModelFilter.hxx
View file @
2a58c00b
...
...
@@ -40,7 +40,6 @@ void
TensorflowMultisourceModelFilter
<
TInputImage
,
TOutputImage
>
::
SmartPad
(
RegionType
&
region
,
const
SizeType
&
patchSize
)
{
std
::
cout
<<
"SMARTPAD: patchSize="
<<
patchSize
<<
std
::
endl
;
for
(
unsigned
int
dim
=
0
;
dim
<
OutputImageType
::
ImageDimension
;
++
dim
)
{
const
SizeValueType
psz
=
patchSize
[
dim
];
...
...
@@ -127,27 +126,13 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
::
ImageToExtent
(
ImageType
*
image
,
PointType
&
extentInf
,
PointType
&
extentSup
,
const
SizeType
&
receptiveField
,
const
PointType
&
refExtInf
,
const
SpacingType
&
refSpacing
)
{
std
::
cout
<<
"ImageToExtent() "
<<
std
::
endl
;
// First, compute the image extent (Here, pixel = area)
std
::
cout
<<
"ComputeImageExtent() "
<<
std
::
endl
;
ComputeImageExtent
(
image
,
extentInf
,
extentSup
,
receptiveField
);
std
::
cout
<<
"extentInf "
<<
extentInf
<<
std
::
endl
;
std
::
cout
<<
"extentSup "
<<
extentSup
<<
std
::
endl
;
std
::
cout
<<
"refExtInf "
<<
refExtInf
<<
std
::
endl
;
std
::
cout
<<
"refSpacing "
<<
refSpacing
<<
std
::
endl
;
// Then, clip this physical extent to the reference image grid
std
::
cout
<<
"AlignExtentToReferenceGrid() "
<<
std
::
endl
;
AlignExtentToReferenceGrid
(
extentInf
,
extentSup
,
refExtInf
,
refSpacing
);
std
::
cout
<<
"extentInf "
<<
extentInf
<<
std
::
endl
;
std
::
cout
<<
"extentSup "
<<
extentSup
<<
std
::
endl
;
std
::
cout
<<
"refExtInf "
<<
refExtInf
<<
std
::
endl
;
std
::
cout
<<
"refSpacing "
<<
refSpacing
<<
std
::
endl
;
std
::
cout
<<
"ImageToExtent() ok"
<<
std
::
endl
;
}
/**
...
...
@@ -160,22 +145,14 @@ bool
TensorflowMultisourceModelFilter
<
TInputImage
,
TOutputImage
>
::
OutputRegionToInputRegion
(
const
RegionType
&
outputRegion
,
RegionType
&
inputRegion
,
ImageType
*
&
inputImage
)
{
std
::
cout
<<
"OutputRegionToInputRegion()"
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion(): outputRegion="
<<
outputRegion
<<
std
::
endl
;
// Mosaic Region Start & End (mosaic image index)
const
IndexType
outIndexStart
=
outputRegion
.
GetIndex
();
const
IndexType
outIndexEnd
=
outputRegion
.
GetUpperIndex
();
std
::
cout
<<
"OutputRegionToInputRegion(): outIndexStart="
<<
outIndexStart
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion(): outIndexEnd="
<<
outIndexEnd
<<
std
::
endl
;
// Mosaic Region Start & End (geo)
PointType
outPointStart
,
outPointEnd
;
this
->
GetOutput
()
->
TransformIndexToPhysicalPoint
(
outIndexStart
,
outPointStart
);
this
->
GetOutput
()
->
TransformIndexToPhysicalPoint
(
outIndexEnd
,
outPointEnd
);
std
::
cout
<<
"OutputRegionToInputRegion(): outPointStart="
<<
outPointStart
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion(): outPointEnd="
<<
outPointEnd
<<
std
::
endl
;
// Add the half-width pixel size of the input image
// and remove the half-width pixel size of the output image
...
...
@@ -185,7 +162,6 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
for
(
unsigned
int
dim
=
0
;
dim
<
OutputImageType
::
ImageDimension
;
++
dim
)
{
const
SpacingValueType
border
=
0.5
*
(
inputSpc
[
dim
]
-
outputSpc
[
dim
]);
std
::
cout
<<
"SpacingValueType="
<<
border
<<
std
::
endl
;
if
(
outPointStart
[
dim
]
<
outPointEnd
[
dim
])
{
outPointStart
[
dim
]
+=
border
;
...
...
@@ -197,17 +173,12 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
outPointEnd
[
dim
]
+=
border
;
}
}
std
::
cout
<<
"OutputRegionToInputRegion(): outPointStart="
<<
outPointStart
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion(): outPointEnd="
<<
outPointEnd
<<
std
::
endl
;
// Mosaic Region Start & End (input image index)
IndexType
defIndexStart
,
defIndexEnd
;
inputImage
->
TransformPhysicalPointToIndex
(
outPointStart
,
defIndexStart
);
inputImage
->
TransformPhysicalPointToIndex
(
outPointEnd
,
defIndexEnd
);
std
::
cout
<<
"OutputRegionToInputRegion(): defIndexStart="
<<
defIndexStart
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion(): defIndexEnd="
<<
defIndexEnd
<<
std
::
endl
;
// Compute input image region
for
(
unsigned
int
dim
=
0
;
dim
<
OutputImageType
::
ImageDimension
;
++
dim
)
{
...
...
@@ -215,16 +186,8 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
inputRegion
.
SetSize
(
dim
,
vnl_math_max
(
defIndexStart
[
dim
],
defIndexEnd
[
dim
])
-
inputRegion
.
GetIndex
(
dim
)
+
1
);
}
std
::
cout
<<
"OutputRegionToInputRegion(): inputRegion="
<<
inputRegion
<<
std
::
endl
;
// crop the input requested region at the input's largest possible region
std
::
cout
<<
"OutputRegionToInputRegion() ok"
<<
std
::
endl
;
bool
ret
=
inputRegion
.
Crop
(
inputImage
->
GetLargestPossibleRegion
()
);
std
::
cout
<<
"OutputRegionToInputRegion() returns "
<<
ret
<<
std
::
endl
;
std
::
cout
<<
"OutputRegionToInputRegion() returns "
<<
inputRegion
<<
std
::
endl
;
return
ret
;
return
inputRegion
.
Crop
(
inputImage
->
GetLargestPossibleRegion
()
);
}
...
...
@@ -266,7 +229,6 @@ void
TensorflowMultisourceModelFilter
<
TInputImage
,
TOutputImage
>
::
GenerateOutputInformation
()
{
std
::
cout
<<
"GenerateOutputInformation()"
<<
std
::
endl
;
Superclass
::
GenerateOutputInformation
();
//////////////////////////////////////////////////////////////////////////////////////////
...
...
@@ -277,17 +239,12 @@ std::cout << "GenerateOutputInformation()" << std::endl;
m_OutputSpacing
=
this
->
GetInput
(
m_ReferenceGridImage
)
->
GetSignedSpacing
();
m_OutputSpacing
[
0
]
*=
m_OutputSpacingScale
;
m_OutputSpacing
[
1
]
*=
m_OutputSpacingScale
;
std
::
cout
<<
"Compute the spacing from the scale factor and the reference grid"
<<
std
::
endl
;
// Compute the extent of the reference image
PointType
refExtInf
,
refExtSup
;
ImageType
*
refImage
=
static_cast
<
ImageType
*>
(
Superclass
::
ProcessObject
::
GetInput
(
m_ReferenceGridImage
)
);
ComputeImageExtent
(
refImage
,
refExtInf
,
refExtSup
,
this
->
GetInputReceptiveFields
().
at
(
m_ReferenceGridImage
));
std
::
cout
<<
"Compute the extent of the reference image"
<<
std
::
endl
;
std
::
cout
<<
"GenerateOutputInformation() refExtInf="
<<
refExtInf
<<
std
::
endl
;
std
::
cout
<<
"GenerateOutputInformation() refExtSup="
<<
refExtSup
<<
std
::
endl
;
// Compute the extent (pixel area) of each input images and update the global extent
PointType
extentInf
,
extentSup
;
extentSup
.
Fill
(
itk
::
NumericTraits
<
double
>::
max
());
...
...
@@ -300,8 +257,6 @@ std::cout << "GenerateOutputInformation() refExtSup=" << refExtSup << std::endl;
PointType
currentInputImageExtentInf
,
currentInputImageExtentSup
;
ImageToExtent
(
currentImage
,
currentInputImageExtentInf
,
currentInputImageExtentSup
,
this
->
GetInputReceptiveFields
()[
imageIndex
],
refExtInf
,
m_OutputSpacing
);
std
::
cout
<<
"GenerateOutputInformation() currentInputImageExtentInf="
<<
currentInputImageExtentInf
<<
std
::
endl
;
std
::
cout
<<
"GenerateOutputInformation() currentInputImageExtentSup="
<<
currentInputImageExtentSup
<<
std
::
endl
;
for
(
unsigned
int
dim
=
0
;
dim
<
ImageType
::
ImageDimension
;
++
dim
)
{
...
...
@@ -314,10 +269,7 @@ std::cout << "GenerateOutputInformation() refExtSup=" << refExtSup << std::endl;
for
(
unsigned
int
dim
=
0
;
dim
<
ImageType
::
ImageDimension
;
++
dim
)
m_OutputSize
[
dim
]
=
std
::
floor
(
(
extentSup
[
dim
]
-
extentInf
[
dim
])
/
vcl_abs
(
m_OutputSpacing
[
dim
])
)
;
m_OutputOrigin
[
0
]
=
extentInf
[
0
]
+
0.5
*
m_OutputSpacing
[
0
];
m_OutputOrigin
[
1
]
=
extentSup
[
1
]
+
0.5
*
m_OutputSpacing
[
0
];
std
::
cout
<<
"m_OutputOrigin="
<<
m_OutputOrigin
<<
std
::
endl
;
std
::
cout
<<
"Input Origin="
<<
this
->
GetInput
(
0
)
->
GetOrigin
()
<<
std
::
endl
;
m_OutputOrigin
[
1
]
=
extentSup
[
1
]
-
0.5
*
m_OutputSpacing
[
0
];
// Set output grid size
if
(
!
m_ForceOutputGridSize
)
...
...
@@ -381,8 +333,6 @@ std::cout << "GenerateOutputInformation() refExtSup=" << refExtSup << std::endl;
itk
::
EncapsulateMetaData
(
outputPtr
->
GetMetaDataDictionary
(),
MetaDataKey
::
TileHintX
,
m_OutputGridSize
[
0
]);
itk
::
EncapsulateMetaData
(
outputPtr
->
GetMetaDataDictionary
(),
MetaDataKey
::
TileHintY
,
m_OutputGridSize
[
1
]);
std
::
cout
<<
"largestPossibleRegion is "
<<
largestPossibleRegion
<<
std
::
endl
;
std
::
cout
<<
"GenerateOutputInformation() ok"
<<
std
::
endl
;
}
...
...
@@ -391,20 +341,15 @@ void
TensorflowMultisourceModelFilter
<
TInputImage
,
TOutputImage
>
::
GenerateInputRequestedRegion
()
{
std
::
cout
<<
"GenerateInputRequestedRegion()"
<<
std
::
endl
;
Superclass
::
GenerateInputRequestedRegion
();
// Output requested region
RegionType
requestedRegion
=
this
->
GetOutput
()
->
GetRequestedRegion
();
std
::
cout
<<
"Req output region (nefore aligment) : "
<<
requestedRegion
<<
std
::
endl
;
// First, align the output region
EnlargeToAlignedRegion
(
requestedRegion
);
std
::
cout
<<
"Req output region (after aligment) : "
<<
requestedRegion
<<
std
::
endl
;
// For each image, get the requested region
for
(
unsigned
int
i
=
0
;
i
<
this
->
GetNumberOfInputs
();
++
i
)
{
...
...
@@ -415,7 +360,7 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
if
(
!
OutputRegionToInputRegion
(
requestedRegion
,
inRegion
,
inputImage
)
)
{
// Image does not overlap requested region: set requested region to null
std
::
cout
<<
"Image #"
<<
i
<<
" :
\n
"
<<
inRegion
<<
" is outside the requested region"
<<
std
::
endl
;
itkExceptionMacro
(
"Image #"
<<
i
<<
" :
\n
"
<<
inRegion
<<
" is outside the requested region"
<<
std
::
endl
)
;
inRegion
.
GetModifiableIndex
().
Fill
(
0
);
inRegion
.
GetModifiableSize
().
Fill
(
0
);
}
...
...
@@ -426,9 +371,7 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
toPad
[
1
]
-=
1
+
(
this
->
GetOutputExpressionFields
().
at
(
0
)[
1
]
-
1
)
*
m_OutputSpacingScale
;
// Pad with radius
std
::
cout
<<
"Before smartpad image "
<<
i
<<
" req region is "
<<
inRegion
<<
std
::
endl
;
SmartPad
(
inRegion
,
toPad
);
std
::
cout
<<
"After smartpad image "
<<
i
<<
" req region is "
<<
inRegion
<<
std
::
endl
;
// We need to avoid some extrapolation when mode is patch-based.
// The reason is that, when some input have a lower spacing than the
...
...
@@ -445,10 +388,7 @@ TensorflowMultisourceModelFilter<TInputImage, TOutputImage>
// Update the requested region
inputImage
->
SetRequestedRegion
(
inRegion
);
std
::
cout
<<
"image "
<<
i
<<
" req region is "
<<
inRegion
<<
std
::
endl
;
}
// next image
std
::
cout
<<
"GenerateInputRequestedRegion() ok"
<<
std
::
endl
;
}
...
...
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