From 5c1d68e443fe7aed66eb9084384b328728f09ac8 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Fri, 24 Jul 2026 11:08:22 -0400 Subject: [PATCH] DOC: Comprehensive filter documentation review and figures Multi-batch documentation overhaul across SimplnxCore, OrientationAnalysis, and ITKImageProcessing, plus supporting figures. Documentation review (Batches 1-9, ~284 filters): * Rewrote filter docs for accuracy against the implementation: explicit units on parameters, "Required Input Sources" sections naming the upstream producer filters, and MyST cross-references between filters. * Covered orientation/crystallography, alignment, segmentation, neighbor and kernel operations, geometry creation/manipulation, data manipulation, I/O filters, the ITK image-processing wrappers (88), and the remaining SimplnxCore filters. * Fixed doc/code mismatches surfaced during review (e.g. ErodeDilate Coordination Number uses CN >= threshold; Write GBCD Triangles column legend header). * Moved 6 disabled ITK filter docs to docs_disabled/ so only built filters ship, clearing stale MyST cross-reference warnings. * Added reference docs: upstream-filter-sources.md, filter-figure-style.md, and the documentation_review_tracker.md. Figures: * EBSDSegmentFeatures before/after screenshot pilot (IPF map -> segmented grains) with a reproducibility pipeline and .d3dstate files under docs/figure-generation/. * 15 hand-authored conceptual SVG/PNG diagrams: coordination number, sample-vs-geometric rotation, geometry types, image-geometry origin/ spacing/dimensions, erode/dilate iteration, sample-vs-crystal reference frame, axis-angle transform, cell/feature/ensemble data model, equivalent sphere diameter, orientation representations, resample spacing/cell-count, misorientation, morphological opening/closing, HDF5 tuples/components, and Abaqus voxel-to-hexahedron. Signed-off-by: Michael Jackson --- CLAUDE.md | 308 --- docs/documentation_review_tracker.md | 1950 +++++++++++++++++ .../ebsd_segment_grains.d3dstate | 429 ++++ .../ebsd_segment_ipf.d3dstate | 429 ++++ .../ebsd_segment_pilot.d3dpipeline | 130 ++ docs/filter-figure-style.md | 109 + docs/style_palette_final.svg | 257 +++ .../2026-04-12-documentation-review-design.md | 327 +++ docs/upstream-filter-sources.md | 73 + src/Plugins/ITKImageProcessing/CMakeLists.txt | 2 +- .../docs/ITKAbsImageFilter.md | 4 +- .../docs/ITKAcosImageFilter.md | 13 +- ...daptiveHistogramEqualizationImageFilter.md | 22 +- ...ApproximateSignedDistanceMapImageFilter.md | 38 +- .../docs/ITKAsinImageFilter.md | 13 +- .../docs/ITKAtanImageFilter.md | 11 +- .../docs/ITKBinaryContourImageFilter.md | 20 +- .../docs/ITKBinaryDilateImageFilter.md | 34 +- .../docs/ITKBinaryErodeImageFilter.md | 34 +- ...TKBinaryMorphologicalClosingImageFilter.md | 34 +- ...TKBinaryMorphologicalOpeningImageFilter.md | 34 +- ...inaryOpeningByReconstructionImageFilter.md | 33 +- .../docs/ITKBinaryProjectionImageFilter.md | 34 +- .../docs/ITKBinaryThinningImageFilter.md | 18 +- .../docs/ITKBinaryThresholdImageFilter.md | 22 +- .../docs/ITKBlackTopHatImageFilter.md | 33 +- .../ITKClosingByReconstructionImageFilter.md | 35 +- .../docs/ITKConnectedComponentImageFilter.md | 20 +- .../docs/ITKCosImageFilter.md | 13 +- ...urvatureAnisotropicDiffusionImageFilter.md | 34 +- .../docs/ITKCurvatureFlowImageFilter.md | 37 +- .../ITKDanielssonDistanceMapImageFilter.md | 35 +- .../ITKDilateObjectMorphologyImageFilter.md | 19 +- .../docs/ITKDiscreteGaussianImageFilter.md | 28 +- .../docs/ITKDoubleThresholdImageFilter.md | 21 +- .../ITKErodeObjectMorphologyImageFilter.md | 20 +- .../docs/ITKExpImageFilter.md | 4 +- .../docs/ITKExpNegativeImageFilter.md | 6 +- ...GradientAnisotropicDiffusionImageFilter.md | 29 +- .../docs/ITKGradientMagnitudeImageFilter.md | 17 +- ...ntMagnitudeRecursiveGaussianImageFilter.md | 33 +- .../docs/ITKGrayscaleDilateImageFilter.md | 20 +- .../docs/ITKGrayscaleErodeImageFilter.md | 20 +- .../docs/ITKGrayscaleFillholeImageFilter.md | 23 +- .../docs/ITKGrayscaleGrindPeakImageFilter.md | 23 +- ...rayscaleMorphologicalClosingImageFilter.md | 21 +- ...rayscaleMorphologicalOpeningImageFilter.md | 21 +- .../docs/ITKHConvexImageFilter.md | 18 +- .../docs/ITKHMaximaImageFilter.md | 17 +- .../docs/ITKHMinimaImageFilter.md | 18 +- .../docs/ITKImageReaderFilter.md | 4 +- .../docs/ITKImportFijiMontageFilter.md | 78 +- .../docs/ITKImportImageStackFilter.md | 4 +- .../docs/ITKIntensityWindowingImageFilter.md | 21 +- .../docs/ITKInvertIntensityImageFilter.md | 10 +- .../docs/ITKIsoContourDistanceImageFilter.md | 35 +- .../docs/ITKLabelContourImageFilter.md | 23 +- ...TKLaplacianRecursiveGaussianImageFilter.md | 14 +- .../docs/ITKLog10ImageFilter.md | 4 +- .../docs/ITKLogImageFilter.md | 4 +- .../docs/ITKMaskImageFilter.md | 31 +- .../docs/ITKMaximumProjectionImageFilter.md | 29 +- .../docs/ITKMeanProjectionImageFilter.md | 31 +- .../docs/ITKMedianImageFilter.md | 16 +- .../docs/ITKMedianProjectionImageFilter.md | 31 +- .../docs/ITKMhaFileReaderFilter.md | 11 +- .../docs/ITKMinMaxCurvatureFlowImageFilter.md | 33 +- .../docs/ITKMinimumProjectionImageFilter.md | 31 +- .../ITKMorphologicalGradientImageFilter.md | 22 +- ...ologicalWatershedFromMarkersImageFilter.md | 44 - .../ITKMorphologicalWatershedImageFilter.md | 27 +- .../docs/ITKNormalizeImageFilter.md | 4 +- .../docs/ITKNotImageFilter.md | 21 +- .../ITKOpeningByReconstructionImageFilter.md | 35 +- .../ITKOtsuMultipleThresholdsImageFilter.md | 25 +- .../docs/ITKRegionalMaximaImageFilter.md | 24 +- .../docs/ITKRegionalMinimaImageFilter.md | 26 +- .../docs/ITKRelabelComponentImageFilter.md | 21 +- .../docs/ITKRescaleIntensityImageFilter.md | 20 +- .../docs/ITKSigmoidImageFilter.md | 24 +- ...KSignedDanielssonDistanceMapImageFilter.md | 32 +- .../ITKSignedMaurerDistanceMapImageFilter.md | 36 +- .../docs/ITKSinImageFilter.md | 4 +- ...TKSmoothingRecursiveGaussianImageFilter.md | 29 - .../docs/ITKSqrtImageFilter.md | 2 +- .../docs/ITKSquareImageFilter.md | 2 + ...KStandardDeviationProjectionImageFilter.md | 45 - .../docs/ITKSumProjectionImageFilter.md | 45 - .../docs/ITKTanImageFilter.md | 4 +- .../docs/ITKThresholdImageFilter.md | 23 +- ...ldMaximumConnectedComponentsImageFilter.md | 32 +- .../ITKValuedRegionalMaximaImageFilter.md | 30 +- .../ITKValuedRegionalMinimaImageFilter.md | 21 +- .../docs/ITKWhiteTopHatImageFilter.md | 29 +- .../docs/ITKZeroCrossingImageFilter.md | 28 +- .../ITKBoundedReciprocalImageFilter.md | 2 +- ...ologicalWatershedFromMarkersImageFilter.md | 38 + .../ITKNormalizeToConstantImageFilter.md | 10 +- ...TKSmoothingRecursiveGaussianImageFilter.md | 32 + ...KStandardDeviationProjectionImageFilter.md | 37 + .../ITKSumProjectionImageFilter.md | 41 + .../ITKIsoContourDistanceImageFilter.cpp | 5 +- .../docs/AlignSectionsMisorientationFilter.md | 42 +- .../AlignSectionsMutualInformationFilter.md | 45 +- .../BadDataNeighborOrientationCheckFilter.md | 65 +- .../docs/CAxisSegmentFeaturesFilter.md | 51 +- .../docs/ComputeAvgCAxesFilter.md | 4 +- .../docs/ComputeAvgOrientationsFilter.md | 13 +- .../docs/ComputeBoundaryStrengthsFilter.md | 43 +- .../docs/ComputeCAxisLocationsFilter.md | 32 +- ...FeatureNeighborCAxisMisalignmentsFilter.md | 32 +- ...uteFeatureNeighborMisorientationsFilter.md | 21 +- ...tureReferenceCAxisMisorientationsFilter.md | 31 +- ...teFeatureReferenceMisorientationsFilter.md | 27 +- .../docs/ComputeGBCDFilter.md | 46 +- .../docs/ComputeGBCDMetricBasedFilter.md | 19 +- .../docs/ComputeGBPDMetricBasedFilter.md | 23 +- .../ComputeKernelAvgMisorientationsFilter.md | 56 +- .../docs/ComputeSchmidsFilter.md | 38 +- .../docs/ComputeShapesFilter.md | 45 +- .../docs/ComputeShapesTriangleGeomFilter.md | 31 +- .../ComputeSlipTransmissionMetricsFilter.md | 46 +- .../docs/ComputeTwinBoundariesFilter.md | 30 +- .../docs/ConvertOrientationsFilter.md | 14 +- .../docs/EBSDSegmentFeaturesFilter.md | 69 +- ...uteKernelAvgMisorientations_1D_Radius1.png | Bin 0 -> 41131 bytes ...uteKernelAvgMisorientations_1D_Radius1.svg | 65 + ...uteKernelAvgMisorientations_1D_Radius2.png | Bin 0 -> 42811 bytes ...uteKernelAvgMisorientations_1D_Radius2.svg | 71 + ...eKernelAvgMisorientations_2D_Radius110.png | Bin 0 -> 58365 bytes ...eKernelAvgMisorientations_2D_Radius110.svg | 92 + ...eKernelAvgMisorientations_2D_Radius120.png | Bin 0 -> 62805 bytes ...eKernelAvgMisorientations_2D_Radius120.svg | 93 + ...omputeKernelAvgMisorientations_Formula.png | Bin 0 -> 66249 bytes ...omputeKernelAvgMisorientations_Formula.svg | 21 + .../ComputeKernelAvgMisorientations_Table.png | Bin 0 -> 56174 bytes .../ComputeKernelAvgMisorientations_Table.svg | 47 + .../Images/ComputeSchmids_SchmidFactor.png | Bin 0 -> 123154 bytes .../Images/ComputeSchmids_SchmidFactor.svg | 82 + .../ConvertOrientations_Representations.png | Bin 0 -> 159404 bytes .../ConvertOrientations_Representations.svg | 81 + .../EBSDSegmentFeatures_after_grains.png | Bin 0 -> 25442 bytes .../Images/EBSDSegmentFeatures_before_ipf.png | Bin 0 -> 88069 bytes .../EBSD_SampleVsCrystalReferenceFrame.png | Bin 0 -> 84483 bytes .../EBSD_SampleVsCrystalReferenceFrame.svg | 8 + .../docs/Images/Misorientation_Concept.png | Bin 0 -> 79017 bytes .../docs/Images/Misorientation_Concept.svg | 8 + .../docs/MergeTwinsFilter.md | 56 +- .../NeighborOrientationCorrelationFilter.md | 10 +- .../docs/ReadAngDataFilter.md | 16 +- .../docs/ReadChannel5DataFilter.md | 39 +- .../docs/ReadCtfDataFilter.md | 26 +- .../docs/ReadEnsembleInfoFilter.md | 14 +- .../docs/ReadGrainMapper3DFilter.md | 28 +- .../docs/ReadH5EbsdFilter.md | 24 +- .../docs/ReadH5EspritDataFilter.md | 26 +- .../docs/ReadH5OimDataFilter.md | 24 +- .../docs/ReadH5OinaDataFilter.md | 74 +- .../docs/WriteGBCDGMTFileFilter.md | 29 +- .../docs/WriteGBCDTriangleDataFilter.md | 42 +- .../docs/WriteINLFileFilter.md | 31 +- .../docs/WriteStatsGenOdfAngleFileFilter.md | 12 +- .../Algorithms/WriteGBCDTriangleData.cpp | 2 +- .../SimplnxCore/docs/AddBadDataFilter.md | 38 +- .../AlignSectionsFeatureCentroidFilter.md | 29 +- .../docs/AlignSectionsListFilter.md | 80 +- .../docs/AppendImageGeometryFilter.md | 9 +- .../ApplyTransformationToGeometryFilter.md | 132 +- .../docs/ApproximatePointCloudHullFilter.md | 17 +- .../SimplnxCore/docs/ArrayCalculatorFilter.md | 5 + .../docs/ChangeAngleRepresentationFilter.md | 4 + .../docs/CombineAttributeArraysFilter.md | 6 + .../docs/CombineNodeBasedGeometriesFilter.md | 22 +- .../SimplnxCore/docs/CombineStlFilesFilter.md | 4 +- .../CombineTransformationMatricesFilter.md | 29 +- .../ComputeArrayHistogramByFeatureFilter.md | 8 +- .../docs/ComputeArrayHistogramFilter.md | 291 +-- .../docs/ComputeArrayStatisticsFilter.md | 67 +- .../docs/ComputeBiasedFeaturesFilter.md | 16 +- .../docs/ComputeBoundaryCellsFilter.md | 6 + .../ComputeBoundaryElementFractionsFilter.md | 15 +- .../docs/ComputeBoundingBoxStatsFilter.md | 14 +- .../docs/ComputeCoordinateThresholdFilter.md | 6 +- .../docs/ComputeCoordinatesImageGeomFilter.md | 29 +- .../docs/ComputeDifferencesMapFilter.md | 8 +- .../docs/ComputeEuclideanDistMapFilter.md | 28 +- .../docs/ComputeFeatureBoundsFilter.md | 12 +- .../docs/ComputeFeatureClusteringFilter.md | 25 +- .../docs/ComputeFeatureNeighborsFilter.md | 32 +- .../docs/ComputeFeaturePhasesBinaryFilter.md | 10 +- .../docs/ComputeFeaturePhasesFilter.md | 9 +- .../docs/ComputeFeatureRectFilter.md | 8 +- .../docs/ComputeFeatureSizesFilter.md | 6 + .../docs/ComputeGroupingDensityFilter.md | 8 +- .../SimplnxCore/docs/ComputeKMeansFilter.md | 24 +- .../SimplnxCore/docs/ComputeKMedoidsFilter.md | 22 +- .../docs/ComputeLargestCrossSectionsFilter.md | 8 +- .../docs/ComputeMomentInvariants2DFilter.md | 22 +- .../ComputeNeighborListStatisticsFilter.md | 30 +- .../docs/ComputeNeighborhoodsFilter.md | 17 +- .../docs/ComputeNumFeaturesFilter.md | 8 +- .../docs/ComputeSurfaceAreaToVolumeFilter.md | 12 +- .../docs/ComputeSurfaceFeaturesFilter.md | 14 +- .../docs/ComputeTriangleAreasFilter.md | 20 +- .../ComputeTriangleGeomCentroidsFilter.md | 31 +- .../docs/ComputeTriangleGeomVolumesFilter.md | 39 +- .../docs/ComputeVectorColorsFilter.md | 8 +- .../ComputeVertexToTriangleDistancesFilter.md | 12 +- .../docs/ComputeVolumeFractionsFilter.md | 12 +- .../docs/ConcatenateDataArraysFilter.md | 6 + .../docs/ConditionalSetValueFilter.md | 53 +- .../docs/ConvertColorToGrayScaleFilter.md | 31 +- .../SimplnxCore/docs/ConvertDataFilter.md | 9 + .../SimplnxCore/docs/CopyDataObjectFilter.md | 7 +- .../CopyFeatureArrayToElementArrayFilter.md | 14 +- .../docs/CreateAMScanPathsFilter.md | 11 +- .../docs/CreateAttributeMatrixFilter.md | 24 +- .../SimplnxCore/docs/CreateColorMapFilter.md | 15 +- .../docs/CreateDataArrayAdvancedFilter.md | 8 +- .../SimplnxCore/docs/CreateDataArrayFilter.md | 9 +- .../SimplnxCore/docs/CreateDataGroupFilter.md | 12 +- ...reateFeatureArrayFromElementArrayFilter.md | 21 +- .../SimplnxCore/docs/CreateGeometryFilter.md | 146 +- .../docs/CreateImageGeometryFilter.md | 28 +- .../docs/CreatePythonSkeletonFilter.md | 23 +- .../docs/CropEdgeGeometryFilter.md | 10 +- .../docs/CropImageGeometryFilter.md | 92 +- .../docs/CropVertexGeometryFilter.md | 27 +- src/Plugins/SimplnxCore/docs/DBSCANFilter.md | 26 +- .../SimplnxCore/docs/DeleteDataFilter.md | 23 +- .../docs/ErodeDilateBadDataFilter.md | 46 +- .../ErodeDilateCoordinationNumberFilter.md | 46 +- .../SimplnxCore/docs/ErodeDilateMaskFilter.md | 42 +- .../SimplnxCore/docs/ExecuteProcessFilter.md | 11 + .../docs/ExtractComponentAsArrayFilter.md | 20 +- .../docs/ExtractFeatureBoundaries2DFilter.md | 33 +- ...ernalSurfacesFromTriangleGeometryFilter.md | 23 +- .../docs/ExtractPipelineToFileFilter.md | 16 +- .../docs/ExtractVertexGeometryFilter.md | 10 +- .../docs/FeatureFaceCurvatureFilter.md | 35 +- .../SimplnxCore/docs/FillBadDataFilter.md | 46 +- .../SimplnxCore/docs/FlyingEdges3DFilter.md | 28 +- .../docs/HierarchicalSmoothFilter.md | 20 +- .../docs/IdentifyDuplicateVerticesFilter.md | 4 +- .../SimplnxCore/docs/IdentifySampleFilter.md | 26 +- ...pplyTransformationToGeometry_AxisAngle.png | Bin 0 -> 164940 bytes ...pplyTransformationToGeometry_AxisAngle.svg | 59 + ...ComputeFeatureSizes_EquivalentDiameter.png | Bin 0 -> 144338 bytes ...ComputeFeatureSizes_EquivalentDiameter.svg | 51 + .../Images/CreateGeometry_GeometryTypes.png | Bin 0 -> 148312 bytes .../Images/CreateGeometry_GeometryTypes.svg | 103 + ...eImageGeometry_OriginSpacingDimensions.png | Bin 0 -> 149507 bytes ...eImageGeometry_OriginSpacingDimensions.svg | 54 + .../Images/DataModel_CellFeatureEnsemble.png | Bin 0 -> 97329 bytes .../Images/DataModel_CellFeatureEnsemble.svg | 8 + .../ErodeDilateBadData_IterationSequence.png | Bin 0 -> 140852 bytes .../ErodeDilateBadData_IterationSequence.svg | 63 + ...eCoordinationNumber_CoordinationNumber.png | Bin 0 -> 176529 bytes ...eCoordinationNumber_CoordinationNumber.svg | 117 + .../docs/Images/Morphology_OpeningClosing.png | Bin 0 -> 180664 bytes .../docs/Images/Morphology_OpeningClosing.svg | 63 + .../ReadHDF5Dataset_TuplesComponents.png | Bin 0 -> 118542 bytes .../ReadHDF5Dataset_TuplesComponents.svg | 56 + .../ResampleImageGeom_SpacingCellCount.png | Bin 0 -> 135414 bytes .../ResampleImageGeom_SpacingCellCount.svg | 44 + ...RotateSampleRefFrame_SampleVsGeometric.png | Bin 0 -> 138619 bytes ...RotateSampleRefFrame_SampleVsGeometric.svg | 89 + .../WriteAbaqusHexahedron_VoxelToHex.png | Bin 0 -> 167908 bytes .../WriteAbaqusHexahedron_VoxelToHex.svg | 58 + .../SimplnxCore/docs/InitializeDataFilter.md | 127 +- .../docs/InitializeImageGeomCellDataFilter.md | 31 +- ...nterpolatePointCloudToRegularGridFilter.md | 6 +- .../docs/IterativeClosestPointFilter.md | 31 +- .../docs/LabelTriangleGeometryFilter.md | 6 +- .../docs/LaplacianSmoothingFilter.md | 42 +- .../docs/MapPointCloudToRegularGridFilter.md | 16 +- .../SimplnxCore/docs/MoveDataFilter.md | 19 +- .../docs/MultiThresholdObjectsFilter.md | 10 +- .../NearestPointFuseRegularGridsFilter.md | 21 +- .../docs/PadImageGeometryFilter.md | 48 +- .../docs/PartitionGeometryFilter.md | 8 +- .../docs/PointSampleEdgeGeometryFilter.md | 29 +- .../docs/PointSampleTriangleGeometryFilter.md | 38 +- .../docs/QuickSurfaceMeshFilter.md | 80 +- .../docs/RandomizeFeatureIdsFilter.md | 12 +- .../docs/ReadBinaryCTNorthstarFilter.md | 10 +- .../SimplnxCore/docs/ReadCSVFileFilter.md | 26 +- .../SimplnxCore/docs/ReadDREAM3DFilter.md | 28 +- .../docs/ReadDeformKeyFileV12Filter.md | 38 +- .../SimplnxCore/docs/ReadHDF5DatasetFilter.md | 62 +- .../SimplnxCore/docs/ReadImageFilter.md | 10 +- .../SimplnxCore/docs/ReadImageStackFilter.md | 16 +- .../SimplnxCore/docs/ReadNIfTIFileFilter.md | 45 +- .../SimplnxCore/docs/ReadRawBinaryFilter.md | 4 + .../SimplnxCore/docs/ReadStlFileFilter.md | 43 +- .../docs/ReadStringDataArrayFilter.md | 10 +- .../docs/ReadTextDataArrayFilter.md | 14 +- .../docs/ReadVolumeGraphicsFileFilter.md | 27 +- .../docs/ReadVtkStructuredPointsFilter.md | 27 +- .../docs/ReadZeissTxmFileFilter.md | 12 +- .../RegularGridSampleSurfaceMeshFilter.md | 7 + .../docs/RemoveFlaggedEdgesFilter.md | 31 +- .../docs/RemoveFlaggedFeaturesFilter.md | 23 +- .../docs/RemoveFlaggedTrianglesFilter.md | 35 +- .../docs/RemoveFlaggedVerticesFilter.md | 6 +- .../docs/RenameDataObjectFilter.md | 20 +- ...ementAttributesWithNeighborValuesFilter.md | 85 +- .../docs/RequireMinNumNeighborsFilter.md | 19 +- .../docs/RequireMinimumSizeFeaturesFilter.md | 35 +- .../docs/ResampleImageGeomFilter.md | 75 +- .../docs/ResampleRectGridToImageGeomFilter.md | 25 +- .../docs/ReshapeDataArrayFilter.md | 32 +- .../docs/ReverseTriangleWindingFilter.md | 10 +- .../docs/RobustAutomaticThresholdFilter.md | 12 +- .../docs/RotateSampleRefFrameFilter.md | 19 +- .../docs/ScalarSegmentFeaturesFilter.md | 53 +- .../docs/SetImageGeomOriginScalingFilter.md | 32 +- .../docs/SharedFeatureFaceFilter.md | 32 +- .../SimplnxCore/docs/SilhouetteFilter.md | 17 +- .../docs/SliceTriangleGeometryFilter.md | 10 +- .../docs/SplitDataArrayByComponentFilter.md | 8 +- .../docs/SplitDataArrayByTupleFilter.md | 8 + .../SimplnxCore/docs/SurfaceNetsFilter.md | 61 +- .../docs/TriangleCentroidFilter.md | 16 +- .../docs/TriangleDihedralAngleFilter.md | 19 +- .../SimplnxCore/docs/TriangleNormalFilter.md | 28 +- ...rtainRegularGridSampleSurfaceMeshFilter.md | 23 +- .../docs/VerifyTriangleWindingFilter.md | 43 +- .../SimplnxCore/docs/WriteASCIIDataFilter.md | 10 +- .../docs/WriteAbaqusHexahedronFilter.md | 159 +- .../WriteAvizoRectilinearCoordinateFilter.md | 25 +- .../docs/WriteAvizoUniformCoordinateFilter.md | 30 +- .../SimplnxCore/docs/WriteBinaryDataFilter.md | 26 +- .../SimplnxCore/docs/WriteDREAM3DFilter.md | 8 + .../docs/WriteFeatureDataCSVFilter.md | 12 +- .../SimplnxCore/docs/WriteImageFilter.md | 4 + .../SimplnxCore/docs/WriteLAMMPSFileFilter.md | 35 +- .../docs/WriteLosAlamosFFTFilter.md | 42 +- .../docs/WriteNodesAndElementsFilesFilter.md | 8 +- .../docs/WriteSPParksSitesFilter.md | 77 +- .../SimplnxCore/docs/WriteStlFileFilter.md | 11 +- .../docs/WriteVtkRectilinearGridFilter.md | 15 +- .../docs/WriteVtkStructuredPointsFilter.md | 19 +- 343 files changed, 9710 insertions(+), 3486 deletions(-) delete mode 100644 CLAUDE.md create mode 100644 docs/documentation_review_tracker.md create mode 100644 docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_grains.d3dstate create mode 100644 docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_ipf.d3dstate create mode 100644 docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_pilot.d3dpipeline create mode 100644 docs/filter-figure-style.md create mode 100644 docs/style_palette_final.svg create mode 100644 docs/superpowers/specs/2026-04-12-documentation-review-design.md create mode 100644 docs/upstream-filter-sources.md delete mode 100644 src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedFromMarkersImageFilter.md delete mode 100644 src/Plugins/ITKImageProcessing/docs/ITKSmoothingRecursiveGaussianImageFilter.md delete mode 100644 src/Plugins/ITKImageProcessing/docs/ITKStandardDeviationProjectionImageFilter.md delete mode 100644 src/Plugins/ITKImageProcessing/docs/ITKSumProjectionImageFilter.md rename src/Plugins/ITKImageProcessing/{docs => docs_disabled}/ITKBoundedReciprocalImageFilter.md (70%) create mode 100644 src/Plugins/ITKImageProcessing/docs_disabled/ITKMorphologicalWatershedFromMarkersImageFilter.md rename src/Plugins/ITKImageProcessing/{docs => docs_disabled}/ITKNormalizeToConstantImageFilter.md (76%) create mode 100644 src/Plugins/ITKImageProcessing/docs_disabled/ITKSmoothingRecursiveGaussianImageFilter.md create mode 100644 src/Plugins/ITKImageProcessing/docs_disabled/ITKStandardDeviationProjectionImageFilter.md create mode 100644 src/Plugins/ITKImageProcessing/docs_disabled/ITKSumProjectionImageFilter.md create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius1.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius1.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius120.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius120.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Table.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Table.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeSchmids_SchmidFactor.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ComputeSchmids_SchmidFactor.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/EBSDSegmentFeatures_after_grains.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/EBSDSegmentFeatures_before_ipf.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/EBSD_SampleVsCrystalReferenceFrame.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/EBSD_SampleVsCrystalReferenceFrame.svg create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/Misorientation_Concept.png create mode 100644 src/Plugins/OrientationAnalysis/docs/Images/Misorientation_Concept.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/CreateImageGeometry_OriginSpacingDimensions.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/CreateImageGeometry_OriginSpacingDimensions.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/DataModel_CellFeatureEnsemble.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/DataModel_CellFeatureEnsemble.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ErodeDilateCoordinationNumber_CoordinationNumber.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ErodeDilateCoordinationNumber_CoordinationNumber.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.svg create mode 100644 src/Plugins/SimplnxCore/docs/Images/WriteAbaqusHexahedron_VoxelToHex.png create mode 100644 src/Plugins/SimplnxCore/docs/Images/WriteAbaqusHexahedron_VoxelToHex.svg diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 5f1d38f26b..0000000000 --- a/CLAUDE.md +++ /dev/null @@ -1,308 +0,0 @@ -# Project Guidelines for Claude - -## Project Overview - -[SIMPLNX Issue 1284](https://github.com/BlueQuartzSoftware/simplnx/issues/1284) -I would like to work on this issue more by converting Filters that have anything more than a trivial execute implementation to move that implementation to an "Algorithm" class like the bulk of the other filters. - -The Algorithm files are located in src/Plugins/SimplnxCore/src/SimplnxCore/Filters/Algorithms/not_used. - -Look at the other filters and understand how we create the Algorithm classes and follow that same style. - -Each Algorithm class that gets updated should be moved out of the "not_used" folder. - -If anything is ambiguous please ask. - -## Directory Structure -- `src/simplnx/` - Core library (Common, Core, DataStructure, Filter, Parameters, Pipeline, Plugin, Utilities) -- `src/Plugins/` - Plugin modules -- `src/nxrunner/` - CLI runner -- `test/` - Test files -- `cmake/` - CMake configuration -- Additional Plugin at "/Users/mjackson/Workspace1/DREAM3D_Plugins/SimplnxReview" -- Additional Plugin at "/Users/mjackson/Workspace1/DREAM3D_Plugins/FileStore" -- Additional Plugin at "/Users/mjackson/Workspace1/DREAM3D_Plugins/Synthetic" -- DREAM3DNX application located in "/Users/mjackson/Workspace1/DREAM3DNX" - -## Directories to Ignore -- `scripts/` - Build/utility scripts -- `conda/` - Conda packaging - -## Coding Standards - -### C++ Style (from .clang-format) -- C++20 standard -- Allman brace style (braces on new lines for classes, control statements, enums, functions, namespaces, structs, before else) -- 200 column limit -- 2-space indentation, no tabs -- Pointer alignment left (`int* ptr` not `int *ptr`) -- No space before parentheses -- Sort includes alphabetically -- No short functions on single line -- Always break template declarations -- Constructor initializers break before comma - -### Naming Conventions (from .clang-tidy) -- C++ header files: `.hpp` extension -- C++ source files: `.cpp` extension -- Namespaces: `lower_case` -- Classes: `CamelCase` -- Structs: `CamelCase` -- Class methods: `camelBack` -- Functions: `camelBack` -- Variables: `camelBack` -- Private members: `m_` prefix + `CamelCase` (e.g., `m_MemberVariable`) -- Global variables: `CamelCase` -- Global constants: `k_` prefix + `CamelCase` (e.g., `k_DefaultValue`) -- Local pointers: `camelBack` + `Ptr` suffix (e.g., `dataPtr`) -- Type aliases: `CamelCase` + `Type` suffix (e.g., `ValueType`) -- Macros: `UPPER_CASE` - -### Descriptive Variable Naming -Use suffixes to make variable types and purposes immediately clear: - -**Geometry variables use `Geom` suffix:** -- Correct: `const auto& imageGeom = dataStructure.getDataRefAs(path);` -- Incorrect: `const auto& image = dataStructure.getDataRefAs(path);` - -**DataStore references use `Ref` suffix:** -- Correct: `const auto& verticesRef = vertexGeom.getVertices()->getDataStoreRef();` -- Incorrect: `const auto& vertices = vertexGeom.getVertices()->getDataStoreRef();` - -Examples: -```cpp -// Geometry variables -auto& imageGeom = dataStructure.getDataRefAs(imagePath); -const auto& rectGridGeom = dataStructure.getDataRefAs(rectPath); -const auto& edgeGeom = dataStructure.getDataRefAs(edgePath); - -// DataStore references -const auto& xBoundsRef = rectGridGeom.getXBounds()->getDataStoreRef(); -const auto& yBoundsRef = rectGridGeom.getYBounds()->getDataStoreRef(); -const auto& verticesRef = edgeGeom.getVertices()->getDataStoreRef(); -``` - -These conventions improve code clarity and distinguish between geometry objects and their underlying data references. - -### File Organization -- When creating a C++ based simplnx filter inside a plugin, the complete filter will have a "NameFilter.hpp" and "NameFilter.cpp" file, an "Algorithm/Name.hpp" and "Algorithm/Name.cpp". -- Filter documentation files are created in Markdown and are in the "docs" subfolder inside the Plugins directory -- Unit tests should be created in the 'test' subfolder and use the 'catch2' unit testing framework. - -## Filter Implementation Guidelines - -### Parameter Validation -- Selection parameters (GeometrySelectionParameter, ArraySelectionParameter, DataGroupSelectionParameter, etc.) automatically validate that the selected object exists in the DataStructure. Do NOT add null checks for these in preflightImpl() or executeImpl(). -- Only add explicit existence checks for objects that are not validated by a selection parameter. - -### DataStructure Access -- Use `getDataRefAs()` to get a reference when you know the object exists (e.g., validated by a selection parameter). -- Use `getDataAs()` to get a pointer only when you need to check if an object exists or when the object may not be present. -- **IMPORTANT**: In unit tests, always wrap `getDataRefAs()` calls with `REQUIRE_NOTHROW()` to provide clear test failure messages if the object doesn't exist. - -Example - Correct: -```cpp -// Parameter already validated this exists, use reference -const auto& imageGeom = dataStructure.getDataRefAs(pInputImageGeometryPathValue); -SizeVec3 dims = imageGeom.getDimensions(); -``` - -Example - Incorrect: -```cpp -// Unnecessary null check - parameter already validated existence -const auto* imageGeomPtr = dataStructure.getDataAs(pInputImageGeometryPathValue); -if(imageGeomPtr == nullptr) -{ - return {MakeErrorResult(-1000, "Could not find geometry")}; -} -``` - -## Thread Safety - -### DataArray and DataStore Classes Are NOT Thread-Safe -- `DataArray`, `DataStore`, and `AbstractDataStore` classes are **NOT thread-safe** for concurrent read or write access. -- The subscript operator (`operator[]`) and other access methods may have internal state or go through virtual function calls that are not safe for concurrent access, even when accessing different indices. -- Some `DataStore` subclasses use out-of-core implementations where data may not be resident in memory. Getting raw pointers to the underlying data is dangerous and should be avoided. - -### Parallelization Guidelines -- When writing parallel algorithms using `ParallelDataAlgorithm`, be aware that passing `DataArray` or `DataStore` references to worker classes can cause random failures on different platforms. -- If parallel access to data arrays is required, consider: - 1. Disabling parallelization with `parallelAlgorithm.setParallelizationEnabled(false)` for correctness - 2. Using thread-local storage for intermediate results - 3. Structuring the algorithm to avoid concurrent access to the same DataArray -- Do NOT assume that writing to different indices of a DataArray from multiple threads is safe. - -Example - Potentially Unsafe: -```cpp -// This pattern can cause random failures even when threads write to different indices -class MyParallelWorker -{ - DataArray& m_OutputArray; // NOT thread-safe for concurrent access - void operator()(const Range& range) const - { - for(usize i = range.min(); i < range.max(); i++) - { - m_OutputArray[i] = computeValue(i); // May fail randomly - } - } -}; -``` - -## Build System -- vcpkg for dependency management -- CMake-based build system - -Example configuring the project -```bash -cd /Users/mjackson/Workspace2/simplnx && cmake --preset simplnx-Rel -``` - -- Build directory is located at "/Users/mjackson/Workspace2/DREAM3D-Build/simplnx-Rel" - -Example building the project -```bash -cd /Users/mjackson/Workspace2/DREAM3D-Build/simplnx-Rel && cmake --build . --target all -``` - -Ensuring all test data files are downloaded -```bash -cd /Users/mjackson/Workspace2/DREAM3D-Build/simplnx-Rel && cmake --build . --target Fetch_Remote_Data_Files -``` - -- Python anaconda environment 'dream3d' can be used if needed - -## Testing -- Unit tests use the Catch2 framework. -- Each `TEST_CASE` should include `UnitTest::CheckArraysInheritTupleDims(dataStructure);` near the end of the test to ensure all created data arrays have correct tuple dimensions inherited from their parent groups. -- Use the `ctest` to run unit tests - -### Running Unit Tests -- Always use `ctest` to run unit tests, NOT the test binary directly -- The `ctest` command handles test data extraction and cleanup automatically -- Use the `-R` flag to run specific tests by name pattern - -Example - Running a specific test: -```bash -cd /Users/mjackson/Workspace2/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel && ctest -R "SimplnxCore::FillBadData" --verbose -``` - -Example - Running all SimplnxCore tests: -```bash -cd /Users/mjackson/Workspace2/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel && ctest -R "SimplnxCore::" --verbose -``` - -### Printing debug statements in unit tests - -Example - Correct - -auto executeResult = filter.execute(dataStructure, args, nullptr, IFilter::MessageHandler{[](const IFilter::Message& message){ fmt::print("{}\n", message.message); }}); - -### Exemplar-Based Testing Pattern -- Many tests use "exemplar" datasets - pre-generated golden reference data stored in `.dream3d` files -- Exemplar datasets are generated by running pipeline files (`.d3dpipeline`) that configure and execute filters - -#### Workflow for Creating and Publishing Test Data: -1. **Generate test data locally**: Create pipeline file with filter configurations and `WriteDREAM3DFilter` to save results -2. **Execute pipeline**: Run the pipeline to generate exemplar `.dream3d` file and any input data files -3. **Package as tar.gz**: Compress test data (no `6_6_` prefix needed - that was only for legacy DREAM3D data) - ```bash - tar -zvcf test_name.tar.gz test_directory/ - ``` -4. **Compute SHA512 hash**: - ```bash - shasum -a 512 test_name.tar.gz - ``` -5. **Upload to GitHub**: Upload to the [DREAM3D data archive release](https://github.com/BlueQuartzSoftware/simplnx/releases/tag/Data_Archive) -6. **Update CMakeLists.txt**: Add `download_test_data()` call in `src/Plugins/[PluginName]/test/CMakeLists.txt`: - ```cmake - download_test_data(DREAM3D_DATA_DIR ${DREAM3D_DATA_DIR} - ARCHIVE_NAME test_name.tar.gz - SHA512 ) - ``` -7. **Test data auto-downloads**: When tests run, the sentinel mechanism automatically downloads and extracts the tar.gz to `unit_test::k_TestFilesDir` - -#### Test Data Archive Naming and Versioning: -- **Base naming**: Use descriptive names that match the test: `test_name.tar.gz` -- **Version suffixes**: When updating existing test data, append version numbers: `test_name_v2.tar.gz`, `test_name_v3.tar.gz` -- **When to version**: - - Original archive already exists in GitHub data archive - - Test requirements changed (new exemplars, different parameters, additional data files) - - Cannot overwrite original because other code may depend on it - - CMakeLists.txt may reference both old and new versions for different tests -- **Check before creating**: Browse the [Data_Archive release](https://github.com/BlueQuartzSoftware/simplnx/releases/tag/Data_Archive) to see if your test data name already exists -- **Legacy prefixes**: The `6_6_` and `6_5_` prefixes are for data from legacy DREAM3D/SIMPL versions - do NOT use for new DREAM3DNX test data - -#### Test Code Pattern: -```cpp -namespace -{ -const std::string k_TestDataDirName = "test_name"; -const fs::path k_TestDataDir = fs::path(unit_test::k_TestFilesDir.view()) / k_TestDataDirName; -const fs::path k_ExemplarFile = k_TestDataDir / "test_name.dream3d"; -const fs::path k_InputImageFile = k_TestDataDir / "input_file.tif"; -} -``` - -**Example**: If `import_image_stack_test.tar.gz` exists in the archive and you need to upload updated test data with new exemplars, create `import_image_stack_test_v2.tar.gz`. Update CMakeLists.txt to reference the new version, and optionally keep the old version if other tests depend on it. - -#### Comparing Test Results Against Exemplars: -- **Load exemplar DataStructure**: Use `UnitTest::LoadDataStructure(exemplarFilePath)` to load the .dream3d file -- **ALWAYS use `REQUIRE_NOTHROW()` before `getDataRefAs()`**: This applies to ALL `getDataRefAs` calls - both generated and exemplar data -- **Get generated data**: Use `getDataRefAs()` wrapped in `REQUIRE_NOTHROW()` since objects were just created by the filter -- **Get exemplar data**: Use `getDataRefAs()` wrapped in `REQUIRE_NOTHROW()` to verify the exemplar exists before accessing -- **Compare geometries**: Use `UnitTest::CompareImageGeometry(&exemplarGeom, &generatedGeom)` - takes two pointers -- **Compare arrays**: Use `UnitTest::CompareDataArrays(exemplarArray, generatedArray)` - type-specific template -- **Switch on data type** when comparing arrays to handle different types (uint8, uint16, uint32, float32, etc.) - -Example pattern: -```cpp -// Load exemplar -DataStructure exemplarDS = UnitTest::LoadDataStructure(k_ExemplarFile); - -// Get geometries - ALWAYS wrap getDataRefAs with REQUIRE_NOTHROW -REQUIRE_NOTHROW(dataStructure.getDataRefAs(generatedGeomPath)); -const auto& generatedGeom = dataStructure.getDataRefAs(generatedGeomPath); -REQUIRE_NOTHROW(exemplarDS.getDataRefAs(DataPath({exemplarGeomName}))); -const auto& exemplarGeom = exemplarDS.getDataRefAs(DataPath({exemplarGeomName})); - -// Compare geometries (dimensions, origin, spacing) - pass pointers -UnitTest::CompareImageGeometry(&exemplarGeom, &generatedGeom); - -// Get arrays - ALWAYS wrap getDataRefAs with REQUIRE_NOTHROW -REQUIRE_NOTHROW(dataStructure.getDataRefAs(generatedDataPath)); -const auto& generatedArray = dataStructure.getDataRefAs(generatedDataPath); -REQUIRE_NOTHROW(exemplarDS.getDataRefAs(exemplarDataPath)); -const auto& exemplarArray = exemplarDS.getDataRefAs(exemplarDataPath); - -// Compare arrays based on type -switch(generatedArray.getDataType()) -{ -case DataType::uint8: - UnitTest::CompareDataArrays(exemplarArray, generatedArray); - break; -case DataType::uint16: - UnitTest::CompareDataArrays(exemplarArray, generatedArray); - break; -// ... etc -} -``` - -**Important**: Use the standardized `UnitTest::` comparison methods directly in test code. - -### Test Organization -- Each test should call `UnitTest::LoadPlugins()` before executing filters -- Use `DYNAMIC_SECTION()` for parameterized tests that generate multiple test cases - -## Pipeline Files -- JSON format with `.d3dpipeline` extension -- Contains array of filter configurations with arguments -- Each filter has: - - `args`: Dictionary of parameter keys and values - - `comments`: Description of what the filter does - - `filter`: Name and UUID - - `isDisabled`: Boolean to skip filter execution -- Common pattern: Multiple filter configurations followed by WriteDREAM3DFilter to save all results to one `.dream3d` file -- Output geometry paths in pipeline must match exemplar names expected by tests - -## Additional Notes - diff --git a/docs/documentation_review_tracker.md b/docs/documentation_review_tracker.md new file mode 100644 index 0000000000..5e965436e3 --- /dev/null +++ b/docs/documentation_review_tracker.md @@ -0,0 +1,1950 @@ +# DREAM3DNX Filter Documentation Review Tracker + +**Design Spec:** [docs/superpowers/specs/2026-04-12-documentation-review-design.md](superpowers/specs/2026-04-12-documentation-review-design.md) +**Style Guide:** [docs/style_palette_final.svg](style_palette_final.svg) +**Branch:** topic/documentation_update (will submit as single PR when complete) + +--- + +## Progress Summary + +| Batch | Category | Total Filters | Triaged | Rewritten | Status | +|-------|----------|---------------|---------|-----------|--------| +| 1 | Orientation / Crystallography Statistics | 17 | 17 | 17 | Complete | +| 2 | Alignment Filters | 5 | 5 | 5 | Complete | +| 3 | Segmentation / Feature Identification | 10 | 10 | 10 | Complete | +| 4 | Neighbor / Kernel Operations | 11 | 11 | 11 | Complete | +| 5 | Geometry Creation / Manipulation | 15 | 15 | 15 | Complete | +| 6 | Data Manipulation (Copy, Create, Delete, Rename) | 21 | 21 | 21 | Complete | +| 7 | I/O Filters (Read/Write) | 44 | 44 | 44 | Complete | +| 8 | Image Processing (ITK wrappers) | 88 | 88 | 88 | Complete | +| 9 | Remaining SimplnxCore filters | 73 | 73 | 73 | Complete | + +--- + +## Batch 1: Orientation / Crystallography Statistics + +**Plugin:** OrientationAnalysis +**Filters:** 17 (15 crystallography + 2 morphological) + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeAvgCAxes | OrientationAnalysis | Done | +| ComputeCAxisLocations | OrientationAnalysis | Done | +| ComputeGBCD | OrientationAnalysis | Done | +| ComputeSchmids | OrientationAnalysis | Done | + +- [x] **ComputeAvgCAxesFilter** (OrientationAnalysis) + - **Clarity:** Assumed deep quaternion/transform knowledge; no explanation of what C-axis is + - **Figures Needed:** Hexagonal unit cell with C-axis labeled + - **Real-World Viz:** IPF color map showing C-axis orientations + - **Concept Links:** C-axis, hexagonal materials, quaternions, reference frames + - **Changes Made:** Added "What is the C-Axis?" section with example materials, plain-language algorithm, hexagonal-only explanation. Added hexagonal unit cell figure. + +- [x] **ComputeCAxisLocationsFilter** (OrientationAnalysis) + - **Clarity:** Very sparse, just restated algorithm + - **Figures Needed:** Same hexagonal C-axis figure (shared with ComputeAvgCAxes) + - **Real-World Viz:** C-axis direction map colored by orientation + - **Concept Links:** C-axis, hexagonal materials, quaternions, reference frames + - **Changes Made:** Added "What is the C-Axis?" section, upper-hemisphere convention note, comparison with ComputeAvgCAxes to help users pick the right filter. Shared hexagonal unit cell figure. + +- [x] **ComputeGBCDFilter** (OrientationAnalysis) + - **Clarity:** 2-sentence stub; non-expert cannot understand what GBCD is + - **Figures Needed:** Conceptual diagram of 5D boundary space (deferred -- complex) + - **Real-World Viz:** GBCD pole figure output screenshot + - **Concept Links:** grain boundaries, misorientation, boundary normals, MRD units + - **Changes Made:** Added "What is the GBCD?" section explaining 5 parameters, MRD units, algorithm steps, resolution parameter. Added Rohrer citations [1][2]. Cross-reference to metric-based filter. + +- [x] **ComputeSchmidsFilter** (OrientationAnalysis) + - **Clarity:** Formula presented but no explanation of slip systems or physical meaning + - **Figures Needed:** Diagram showing tensile axis, slip plane, slip direction, and angles φ/λ + - **Real-World Viz:** Microstructure colored by Schmid factor + - **Concept Links:** slip systems, crystal plasticity, loading axis, CRSS + - **Changes Made:** Added "What is the Schmid Factor?" section with plain-language slip explanation, 0-0.5 range meaning, 4-step algorithm, CRSS limitation note. Added Schmid factor geometric diagram. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeAvgOrientations | OrientationAnalysis | Done | +| ComputeBoundaryStrengths | OrientationAnalysis | Done | +| ComputeFeatureNeighborCAxisMisalignments | OrientationAnalysis | Done | +| ComputeFeatureNeighborMisorientations | OrientationAnalysis | Done | +| ComputeFeatureReferenceCAxisMisorientations | OrientationAnalysis | Done | +| ComputeFeatureReferenceMisorientations | OrientationAnalysis | Done | +| ComputeSlipTransmissionMetrics | OrientationAnalysis | Done | +| ComputeTwinBoundaries | OrientationAnalysis | Done | +| ComputeShapes | OrientationAnalysis | Done | + +- [x] **ComputeAvgOrientationsFilter** (OrientationAnalysis) + - **Clarity:** Comprehensive but very math-heavy; 3 methods with dense statistical notation + - **Figures Needed:** Diagram showing orientations being averaged within a grain; vMF distribution concept + - **Real-World Viz:** IPF color map showing average orientation assignment + - **Concept Links:** quaternions, Fundamental Zone, symmetry operators, Euler angles, EM algorithm + - **Changes Made:** Added introductory paragraph explaining what average orientation means and why it matters for downstream filters. Existing method descriptions were already thorough; kept intact. + +- [x] **ComputeBoundaryStrengthsFilter** (OrientationAnalysis) + - **Clarity:** Relies on citations for metric definitions; readers need access to papers + - **Figures Needed:** Slip transmission across grain boundary concept diagram + - **Real-World Viz:** Feature boundary map colored by boundary strength metrics + - **Concept Links:** slip transmission, Luster-Morris parameter, fracture initiation, grain boundaries + - **Changes Made:** Clarified relationship to ComputeSlipTransmissionMetrics (same metrics, per-Face storage). Added cross-reference for detailed explanations. Explained M' value meaning. + +- [x] **ComputeFeatureNeighborCAxisMisalignmentsFilter** (OrientationAnalysis) + - **Clarity:** Good basic description but "misalignment" vs "misorientation" distinction unclear + - **Figures Needed:** Diagram showing C-axis misalignment angle between two grains + - **Real-World Viz:** Neighbor misalignment values on microstructure + - **Concept Links:** C-axis, misalignment angle, hexagonal crystals, neighbor relationships + - **Changes Made:** Distinguished C-axis misalignment from full misorientation. Explained flexible neighbor list concept. Cross-referenced ComputeAvgCAxes for hexagonal-only explanation. + +- [x] **ComputeFeatureNeighborMisorientationsFilter** (OrientationAnalysis) + - **Clarity:** Straightforward but minimal + - **Figures Needed:** Diagram showing misorientation angle concept between neighboring grains + - **Real-World Viz:** Microstructure with neighbor misorientations displayed + - **Concept Links:** misorientation, orientation angle, grain boundaries + - **Changes Made:** Added plain-language explanation of misorientation. Explained NaN constraint (different crystal structures not comparable). Clarified optional average output. + +- [x] **ComputeFeatureReferenceCAxisMisorientationsFilter** (OrientationAnalysis) + - **Clarity:** Clear what it does but doesn't explain why this metric matters + - **Figures Needed:** Diagram showing cell-to-average C-axis deviation concept + - **Real-World Viz:** Misalignment map within a feature showing spatial variation + - **Concept Links:** C-axis misalignment, hexagonal materials, orientation variation + - **Changes Made:** Reframed around intragranular orientation gradients. Explained what average/std dev outputs tell you (low = uniform, high = internal variation). Cross-referenced ComputeAvgCAxes. + +- [x] **ComputeFeatureReferenceMisorientationsFilter** (OrientationAnalysis) + - **Clarity:** Good. Two reference orientation options clearly explained with use cases + - **Figures Needed:** Legend for existing color scale images would help interpretation + - **Real-World Viz:** Already has 3 images showing IPF colors and two reference orientation results + - **Concept Links:** misorientation, plastic deformation, reference orientation, IPF colors + - **Changes Made:** Added purpose statement about detecting deformation. Rewrote reference orientation options with physical reasoning for when to use each. + +- [x] **ComputeSlipTransmissionMetricsFilter** (OrientationAnalysis) + - **Clarity:** Relies on citations; metrics not explained in the documentation itself + - **Figures Needed:** Slip transmission concept diagram (same as ComputeBoundaryStrengths) + - **Real-World Viz:** Feature pairs with transmission metrics visualized + - **Concept Links:** slip transmission, slip planes/directions, grain boundaries, Luster-Morris + - **Changes Made:** Added introductory explanation of slip transmission concept. Explained M' value meaning (1.0 = perfect alignment). Added cross-reference to ComputeBoundaryStrengths. + +- [x] **ComputeTwinBoundariesFilter** (OrientationAnalysis) + - **Clarity:** Good sigma-3 identification logic but "incoherence" concept needs definition + - **Figures Needed:** Sigma-3 twin relationship diagram; incoherence concept + - **Real-World Viz:** Microstructure with twin boundaries highlighted + - **Concept Links:** twin boundaries, sigma-3, misorientation axis, CSL, incoherence + - **Changes Made:** Added "What is a Twin Boundary?" section explaining Sigma-3 twins and their significance. Explained incoherence in plain terms (0 = perfect coherent twin). + +- [x] **ComputeShapesFilter** (OrientationAnalysis) + - **Clarity:** Good algorithmic steps but missing interpretation guidance + - **Figures Needed:** Best-fit ellipsoid concept; Omega3 sphericity measure + - **Real-World Viz:** Features colored by aspect ratio or Omega3 + - **Concept Links:** principal moments, ellipsoid fitting, eigenvalues, Omega3, aspect ratios + - **Changes Made:** Added "What This Filter Produces" section explaining each output. Defined Omega3 (1.0 = sphere). Cross-referenced triangle geometry version. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeGBCDMetricBased | OrientationAnalysis | Done | +| ComputeGBPDMetricBased | OrientationAnalysis | Done | +| ComputeShapesTriangleGeom | OrientationAnalysis | Done | + +- [x] **ComputeGBCDMetricBasedFilter** (OrientationAnalysis) + - **Clarity:** Excellent technical documentation with clear metric-based vs bin-based distinction + - **Figures Needed:** Maybe one more diagram showing metric distances visually + - **Real-World Viz:** Already has 3 excellent figures (GBCD result, sampling points, error maps) + - **Concept Links:** GBCD, metrics, boundary space, MRD units + - **Changes Made:** Restructured dense metric explanation into numbered two-stage process. Added note about advantages over binning (avoids discretization artifacts). + +- [x] **ComputeGBPDMetricBasedFilter** (OrientationAnalysis) + - **Clarity:** Good. References GBCD Metric-Based filter effectively + - **Figures Needed:** Plane normal vs misorientation sampling differences + - **Real-World Viz:** Already has 1 good figure + - **Concept Links:** GBPD, grain boundary plane distribution, boundary normal + - **Changes Made:** Added opening explaining what GBPD is and how it differs from GBCD (2D plane normals vs full 5D). Added MRD interpretation (1.0 = random, >1.0 = preferred). + +- [x] **ComputeShapesTriangleGeomFilter** (OrientationAnalysis) + - **Clarity:** Very technical but thorough. Excellent caveats section and validation table + - **Figures Needed:** Tetrahedron construction from mesh; watertight vs non-watertight mesh + - **Real-World Viz:** Comparison of voxelized vs triangle geometry shape results + - **Concept Links:** triangle geometry, mesh watertightness, Euler characteristic, winding + - **Changes Made:** Consolidated caveats into "Differences from Image Geometry Version" section. Merged watertight warning and Euler characteristic into "Mesh Quality Requirements" section. Cross-referenced Image Geometry version for output descriptions. + +### Already Complete (Prior to Triage) + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeKernelAvgMisorientations | OrientationAnalysis | Done | + +- [x] **ComputeKernelAvgMisorientationsFilter** (OrientationAnalysis) + - **Changes Made:** Full rewrite with kernel radius explanation, 6 figures (formula, 1D radius 1 & 2, 2D radius (1,1,0) & (1,2,0), quick reference table). Serves as template for rewrite style. + +--- + +## Batch 4: Neighbor / Kernel Operations + +**Plugin:** SimplnxCore + OrientationAnalysis +**Filters:** 11 (cell-level cleanup, morphology, neighbor-list utilities) + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| AddBadData | SimplnxCore | Done | + +- [x] **AddBadDataFilter** (SimplnxCore) + - **Clarity:** Single dense paragraph with one run-on sentence; the filter's purpose (introduce realism into synthetic structures) is buried. + - **Completeness:** No example imagery, no parameter guidance. Mentions "Manhattan distances" with no context. Requires the reader to know about the *Convert Attribute Data Type* filter as a prerequisite. Group is "Synthetic Building (Misc)" which is an outlier vs. the other Batch 4 cleanup filters but is correct given the filter's purpose. + - **Accessibility:** Volume-fraction semantics are easy to misread (the *0.2* applies only to the affected cells, not the whole volume — a subtle but important point). + - **Figures Needed:** Diagram showing the two noise modes (random voxels scattered through volume vs. boundary voxels along feature surfaces). Visual of how a 0.2 volume fraction translates to actual changed-cell counts. + - **Real-World Viz:** Before/after of a synthetic microstructure with random noise applied; same with boundary noise applied. + - **Concept Links:** Manhattan distance, feature boundary cells, synthetic microstructure realism + - **Changes Made:** Added "Why Use This Filter?" section motivating the experimental-realism use case (matched cleanup pipelines for apples-to-apples comparison). Added "Random vs. Boundary Noise" section explaining the two independent modes. Added "Volume Fraction Semantics" section clarifying the per-eligible-cell meaning. Added "What 'Bad' Means in Output" section. Added explicit two-step prerequisite recipe (Compute Euclidean Distance Map → Convert Data Type). Added Required Input Sources. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| FillBadData | SimplnxCore | Done | +| ErodeDilateBadData | SimplnxCore | Done | +| ErodeDilateMask | SimplnxCore | Done | +| ErodeDilateCoordinationNumber | SimplnxCore | Done | +| ReplaceElementAttributesWithNeighborValues | SimplnxCore | Done | +| NeighborOrientationCorrelation | OrientationAnalysis | Done | +| BadDataNeighborOrientationCheck | OrientationAnalysis | Done | + +- [x] **FillBadDataFilter** (SimplnxCore) + - **Changes Made:** Rewrote lead-in to distinguish "small noise (filled)" vs "large defects (preserved)". Restructured implementation-detail Phase 1-4 into a concise "How This Filter Works" 3-step summary. Added "Minimum Defect Size Units" section stating cells/integer voxel count with conversion formula and typical ranges (5-50 for noise, 500-5000 for preserving real pores). Promoted "Store Defects as New Phase" option to its own section. Trimmed performance discussion to a brief note. Added Required Input Sources. + +- [x] **ErodeDilateBadDataFilter** (SimplnxCore) + - **Changes Made:** Removed stray backtick. Restructured into Dilation/Erosion/When-to-Use/Iterations-and-Direction sections. Named the morphological *opening* (erode-then-dilate) and *closing* (dilate-then-erode) patterns explicitly. Stated iterations are in **cell-layers**. Documented the X/Y/Z directional toggle for anisotropic morphology. Added Required Input Sources. + +- [x] **ErodeDilateMaskFilter** (SimplnxCore) + - **Changes Made:** Defined "mask" inline as a boolean cell-level array with cross-link to Multi-Threshold Objects. Added "When to Use" with concrete examples (erode = discard unreliable boundary cells; dilate = recover over-thresholded valid cells). Stated iterations are in **cell-layers**. Documented X/Y/Z directional toggle motivation (anisotropic serial-section resolution). Added Required Input Sources. + +- [x] **ErodeDilateCoordinationNumberFilter** (SimplnxCore) + - **Changes Made:** Stated coordination-number range is **0 to 6** with worked examples (CN=0 inside, CN=6 isolated voxel, CN=4-5 thin protrusion). Cross-linked "isotropic coarsening" definition to RequireMinimumSizeFeatures. Promoted "Loop Until Gone" to its own section with single-pass-vs-full-smoothing guidance. Added "When to Use This Filter" section calling out salt-and-pepper cleanup. Added Required Input Sources. + +- [x] **ReplaceElementAttributesWithNeighborValuesFilter** (SimplnxCore) + - **Changes Made:** Added generic "How This Filter Works" section before EBSD vendor-specific examples. Promoted "Comparison Operator" to its own subsection with use-case guidance for higher-is-better (CI, IQ) vs lower-is-better (MAD, Error) scalars. Added "Loop Until Gone" subsection with caution about flood-fill behavior. Promoted the "too much replacement" warning to its own "Caution: Flood Fill Behavior" section. Reframed EBSD examples as "Example Use Cases". Added Required Input Sources. + +- [x] **NeighborOrientationCorrelationFilter** (OrientationAnalysis) + - **Changes Made:** Added lead-in distinguishing this filter from sister filter ReplaceElementAttributesWithNeighborValues. Restructured algorithm into 4 numbered steps. Promoted *Cleanup Level* to its own subsection with **1-6 range** stated explicitly and worked guidance for each value (6=conservative, 4-5=moderate, 2-3=aggressive, 1=flood-fill). Cross-linked sister filters and EBSD readers. Added Required Input Sources. + +- [x] **BadDataNeighborOrientationCheckFilter** (OrientationAnalysis) + - **Changes Made:** Verified the doc title matches humanName() ("Neighbor Orientation Comparison (Bad Data)"); kept as-is. Added lead-in distinguishing this filter (mask-only update) from NeighborOrientationCorrelation (full-attribute replacement) and recommending sequencing. Promoted *Required Number of Neighbors* to its own section with **1-6 range** stated explicitly. Added cross-references to Multi-Threshold Objects, EBSD readers, and the sister filter. Added Required Input Sources. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| RequireMinNumNeighbors | SimplnxCore | Done | +| ComputeNeighborhoods | SimplnxCore | Done | +| ComputeNeighborListStatistics | SimplnxCore | Done | + +- [x] **RequireMinNumNeighborsFilter** (SimplnxCore) + - **Changes Made:** Rewrote lead with explicit motivation (isolated single-feature islands from segmentation). Cross-linked "isotropic coarsening" to the shared definition in RequireMinimumSizeFeatures. Stated threshold is in **count of contiguous neighbors**. Added inspection-recommendation (look at *Number of Neighbors* output before choosing). Added Required Input Sources. + +- [x] **ComputeNeighborhoodsFilter** (SimplnxCore) + - **Changes Made:** Added lead-in motivating the use case (clustering, second-nearest-neighbor analysis). Defined Equivalent Sphere Diameter inline with cross-link to Compute Feature Sizes. Stated *Multiplier* is **dimensionless**. Added typical-value guidance for the multiplier (1.0 immediate neighbors, 2.0-3.0 second-nearest, 5.0+ broader clustering). Added Required Input Sources. + +- [x] **ComputeNeighborListStatisticsFilter** (SimplnxCore) + - **Changes Made:** Added concrete motivating example (summarizing per-feature neighbor misorientations from ComputeFeatureNeighborMisorientations). Restructured statistics list with inline descriptions. Stated outputs inherit units from input. Added Required Input Sources listing the four common NeighborList producers across both plugins. + +--- + +## Batch 5: Geometry Creation / Manipulation + +**Plugin:** SimplnxCore +**Filters:** 15 (geometry creation, transformation, resampling, cropping/padding, mesh generation, partitioning) + +### Tier 1 — Critical + +None. No filter in this batch has a non-expert blocker. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| CreateGeometry | SimplnxCore | Done | +| ApplyTransformationToGeometry | SimplnxCore | Done | +| RotateSampleRefFrame | SimplnxCore | Done | +| ResampleImageGeom | SimplnxCore | Done | +| ResampleRectGridToImageGeom | SimplnxCore | Done | +| PadImageGeometry | SimplnxCore | Done | +| QuickSurfaceMesh | SimplnxCore | Done | +| InitializeImageGeomCellData | SimplnxCore | Done | + +- [x] **CreateGeometryFilter** (SimplnxCore) + - **Clarity:** Comprehensive but very long (~19KB); the 8-geometry-type taxonomy is buried in dense prose. + - **Completeness:** Excellent — covers all 8 geometry types with examples, including a complete worked example for importing from text files. Possibly too much for a single filter doc. + - **Accessibility:** Heavy DREAM3D-NX terminology assumed (Element, Attribute Matrix, shared vertex list). + - **Figures Needed:** Side-by-side infographic showing all 8 geometry types (Image, Rectilinear Grid, Vertex, Edge, Triangle, Quadrilateral, Tetrahedral, Hexahedral) with their defining elements illustrated. + - **Real-World Viz:** None additional needed; the text import workflow could use a quick diagram. + - **Units Clarity:** Spacing units ("microns per pixel" example) called out — good. + - **Concept Links:** Geometry types, Element type, shared vertex list, winding/right-hand rule, Attribute Matrix + - **Notes:** "DREAM3D Review (Geometry)" group is unusual — verify this is intended. Typo "dimenionality" appears multiple times. Each geometry-type section duplicates content from per-type filters. Consider promoting the geometry-type taxonomy into a shared concept page and trimming this doc to filter-specific guidance. + +- [x] **ApplyTransformationToGeometryFilter** (SimplnxCore) + - **Clarity:** Strong before/after image sequences explaining the successive-rotation artifact problem. Excellent caveat. + - **Completeness:** Has duplicate transformation-type listing (bullets at lines 96-103 and the same content as a table at lines 107-114). One needs to go. + - **Accessibility:** Node vs Image distinction is critical and well-explained; row-major matrix encoding explained. + - **Figures Needed:** Already has many. Could add a diagram explaining the four-element axis-angle representation. + - **Real-World Viz:** Already excellent. + - **Units Clarity:** Rotation angle units (degrees) explicit; translation in geometry's coordinate units; scale dimensionless. + - **Concept Links:** transformation matrix, axis-angle, row-major matrix order, interpolation modes + - **Notes:** Remove the duplicated transformation-type listing. Convert "[Combine Transformation Matrices](CombineTransformationMatricesFilter.md)" link to a proper MyST link (already is). Add Required Input Sources. The relative `./Filter.md` should be checked — current uses both `./` and bare forms. + +- [x] **RotateSampleRefFrameFilter** (SimplnxCore) + - **Clarity:** Verified-only-for-axis-aligned-90/180 warning is at the top — good. Distinction from ApplyTransformation (sample reference frame vs geometric rotation) is not made explicit. + - **Completeness:** Has rotation matrix equivalent shown. Note about origin shift after rotation is valuable. + - **Accessibility:** "Sample reference frame" jargon assumed; the term needs first-use definition. + - **Figures Needed:** Diagram showing sample frame rotation (the axes of the sample relabeled) vs geometric rotation (the data physically rotated). + - **Real-World Viz:** Already has EBSD rotation example. + - **Units Clarity:** Rotation angle in degrees; axis is dimensionless unit vector. + - **Concept Links:** sample reference frame, EBSD frame convention, axis-angle rotation + - **Notes:** Add explicit "When to Use vs ApplyTransformation" guidance. Make verified-axis-only banner more prominent. Cross-link to SetImageGeomOriginScaling for the origin reset workflow. Add Required Input Sources. + +- [x] **ResampleImageGeomFilter** (SimplnxCore) + - **Clarity:** Three resampling modes (Spacing, Scaling, Exact Dimensions) each with worked numerical examples. Clear. + - **Completeness:** "No interpolation, closest cell wins" behavior noted. Renumber Features + NeighborList removal warning present. + - **Accessibility:** Spacing/dimensions/scaling distinction depends on understanding Image Geometry. + - **Figures Needed:** Before/after voxel-grid diagram showing how a 2x spacing reduction halves the cell count. + - **Real-World Viz:** Cubic Small IN100 sliced at different resolutions side-by-side. + - **Units Clarity:** Spacing values are in **physical units** (same as input geometry's spacing); scaling is **percent**; exact dimensions are in **cells**. + - **Concept Links:** spacing vs scaling vs dimensions, closest-cell resampling, Feature renumbering + - **Notes:** Cross-link to ApplyTransformation is present but uses `./` path; convert to plain MyST form. Add explicit units callouts per mode. Add Required Input Sources. + +- [x] **ResampleRectGridToImageGeomFilter** (SimplnxCore) + - **Clarity:** Brief, just describes the "last one wins" rule. + - **Completeness:** Missing: when to use this, how to specify the target image geometry's spacing/dimensions, what happens when target is finer than source. + - **Accessibility:** Rectilinear Grid concept not introduced. + - **Figures Needed:** Side-by-side diagram of variable-spacing RectGrid → regular Image Geom with the "last one wins" cells highlighted. + - **Real-World Viz:** A real RectGrid resampled to a uniform Image Geom. + - **Units Clarity:** Target spacing in physical units. + - **Concept Links:** Rectilinear Grid vs Image Geometry, downsampling vs upsampling + - **Notes:** Add "When to Use" section. Explain why "last one wins" was chosen (interpolation is wrong for label data). Add Required Input Sources. + +- [x] **PadImageGeometryFilter** (SimplnxCore) + - **Clarity:** Very brief; the figures are helpful but the prose underdocuments the "default padding value" semantics. + - **Completeness:** Doesn't explain what the *Update Origin* option does or when to use it. + - **Accessibility:** "Default padding value" is undefined. + - **Figures Needed:** Already has before/after. Could add a 3-panel diagram showing Update Origin ON vs OFF. + - **Real-World Viz:** Before/after with both Update Origin settings. + - **Units Clarity:** Pad amounts are in **cells/voxels**. Default value is in whatever units the target array uses. + - **Concept Links:** padding, image extension, origin shift + - **Notes:** Expand "default padding value" to "Each padded cell is initialized to the user-specified Default Value, which is interpreted in the same units as each cell-level array being padded". Document *Update Origin* and *Update Spacing* options. Add Required Input Sources. + +- [x] **QuickSurfaceMeshFilter** (SimplnxCore) + - **Clarity:** Deprecation notice at top recommending "Surface Nets". Node Types table is excellent. Triangle-pair-per-cell-face algorithm explained. + - **Completeness:** Has good images for each Node Type. The Verify Triangle Winding reference is implicit; needs a link. + - **Accessibility:** "Stair stepped" surface mesh result not pictured directly. + - **Figures Needed:** Already has plenty. Could use a small diagram of how a single voxel face becomes 2 triangles. + - **Real-World Viz:** Already present. + - **Concept Links:** voxel-face-to-triangle conversion, Node Types, FaceLabels convention, mesh windings + - **Notes:** Improve deprecation banner — make clear when to use this vs Surface Nets. Convert "see Verify Triangle Winding documentation" to a MyST link. Add Required Input Sources (FeatureIds from a segment filter). + +- [x] **InitializeImageGeomCellDataFilter** (SimplnxCore) + - **Clarity:** Three modes (Manual, Random, Random With Range) are listed but the "subvolume" parameter is undefined. + - **Completeness:** Missing: how is the subvolume specified (min/max cell indices? physical bounds?). What data types support each random mode? What about boolean arrays? + - **Accessibility:** Reader has to guess the subvolume specification UI. + - **Figures Needed:** Diagram showing a subvolume highlighted within a larger volume; before/after. + - **Real-World Viz:** Before/after on a real cube showing the initialized subvolume. + - **Units Clarity:** Subvolume bounds in **cells/voxels** vs **physical units** — must be stated. + - **Concept Links:** subvolume, cell-level initialization, random number generation seed + - **Notes:** Document the subvolume specification mode and units. Note random-mode behavior for boolean, integer, and float types separately. Document the random seed parameter. Add Required Input Sources. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| CreateImageGeometry | SimplnxCore | Done | +| CombineTransformationMatrices | SimplnxCore | Done | +| SetImageGeomOriginScaling | SimplnxCore | Done | +| CropImageGeometry | SimplnxCore | Done | +| AppendImageGeometry | SimplnxCore | Done | +| PartitionGeometry | SimplnxCore | Done | +| ComputeCoordinatesImageGeom | SimplnxCore | Done | + +- [x] **CreateImageGeometryFilter** (SimplnxCore) + - **Clarity:** Deprecation banner is right under the title but as a level-2 heading, making it look like its own section. Confusing. + - **Completeness:** Dimensions/Spacing/Origin definitions are good. + - **Accessibility:** Same dense terminology as CreateGeometry. + - **Figures Needed:** Dimensions/origin/spacing diagram (would also serve SetImageGeomOriginScaling and ResampleImageGeom). + - **Real-World Viz:** N/A — filter creates rather than transforms data. + - **Units Clarity:** Already states spacing example "microns per pixel". + - **Concept Links:** Image Geometry dimensions/origin/spacing + - **Notes:** Move deprecation notice into a clear callout. Fix "dimenionality" typo. Cross-link to CreateGeometry filter. Add Required Input Sources note (none — geometry is created from user parameters). + +- [x] **CombineTransformationMatricesFilter** (SimplnxCore) + - **Clarity:** Brief and adequate. Output format documented. + - **Completeness:** Missing motivating context for why you'd combine matrices (the answer is in ApplyTransformation — referenced indirectly there). + - **Accessibility:** Assumes user knows row-major 4x4 convention. + - **Figures Needed:** Optional — a diagram showing two 4x4 matrices multiplying into a single 4x4 result. + - **Real-World Viz:** N/A. + - **Units Clarity:** N/A (matrix is dimensionless apart from translation components). + - **Concept Links:** matrix composition, transformation order, row-major matrix order + - **Notes:** Add a short "Why Use This Filter" pointing to ApplyTransformationToGeometry's caveat about successive image-geometry transformations. Note that matrices are applied left-to-right in the order listed. Add Required Input Sources. + +- [x] **SetImageGeomOriginScalingFilter** (SimplnxCore) + - **Clarity:** Title says "Set Origin & Spacing" but body only describes the origin parameters. Spacing is implicit. + - **Completeness:** "Put Input Origin at the Center of Geometry" option mentioned but not explained in detail. + - **Accessibility:** OK for the limited content provided. + - **Figures Needed:** Diagram showing origin-at-corner vs origin-at-center. + - **Real-World Viz:** N/A. + - **Units Clarity:** Origin coordinates and spacing are in physical units. + - **Concept Links:** Image Geometry origin, spacing + - **Notes:** Document both Origin and Spacing parameter sets. Document the linkable parameters (only-change-origin, only-change-spacing options). Expand the "Put Origin at Center" explanation. Add Required Input Sources. + +- [x] **CropImageGeometryFilter** (SimplnxCore) + - **Clarity:** Three worked examples with images. Inclusive-bounds note is critical and called out. + - **Completeness:** Voxels-vs-physical-coordinates mode is implicit; the "Use Physical Bounds" parameter should be stated explicitly. + - **Accessibility:** Voxel index 0-based convention is implied via examples. + - **Figures Needed:** Already adequate. + - **Real-World Viz:** Already present. + - **Units Clarity:** Bounds are in **cells (0-based, inclusive)** OR **physical units (depending on parameter)** — explicit per-mode. + - **Concept Links:** ROI cropping, inclusive bounds, voxel indexing + - **Notes:** Add explicit "Bounds Mode" subsection naming the parameter that toggles voxels vs physical. State units per mode. Update NeighborList warning to use the standard pattern shared with RequireMinimumSizeFeatures. + +- [x] **AppendImageGeometryFilter** (SimplnxCore) + - **Clarity:** Exhaustive examples for X/Y/Z directions with figures. + - **Completeness:** "Resolution" terminology used in one place — should be "Spacing" per the modern simplnx convention. + - **Accessibility:** Good. + - **Figures Needed:** Already comprehensive. + - **Real-World Viz:** Already present. + - **Units Clarity:** Append happens in cell-count units along the chosen direction; the *Check Spacing* option checks physical-unit match. + - **Concept Links:** geometry concatenation, mirroring, spacing check + - **Notes:** Replace remaining "Resolution" with "Spacing" for consistency. Cross-link to CreateImageGeometry for the geometry-definition concepts. Add Required Input Sources. + +- [x] **PartitionGeometryFilter** (SimplnxCore) + - **Clarity:** Four modes with excellent visual examples and walk-throughs. + - **Completeness:** "Reconstruction (Reconstruction)" group/subgroup is a stutter — verify. + - **Accessibility:** Long doc but well-organized with figures. + - **Figures Needed:** Already excellent. + - **Real-World Viz:** Already present. + - **Units Clarity:** Cell Length is in physical units; Number of Cells Per Axis is in **integer cell counts**; Origin in physical units; Min/Max in physical units. + - **Concept Links:** spatial partitioning, partition grid, out-of-bounds handling, vertex mask + - **Notes:** Verify group "Reconstruction (Reconstruction)". Add a short lead-in explaining why partition (spatial analysis, sub-volume statistics, parallel processing prep). Add Required Input Sources. + +- [x] **ComputeCoordinatesImageGeomFilter** (SimplnxCore) + - **Clarity:** "Implicit vs explicit" framing is jargon; the example output is clear. + - **Completeness:** Three output modes documented with raster scheme. + - **Accessibility:** Reader benefits from concrete example, which is provided. + - **Figures Needed:** Optional — a small voxel-grid diagram with one cell highlighted showing its (i,j,k) index and (x,y,z) physical position. + - **Real-World Viz:** N/A — output is numerical. + - **Units Clarity:** Physical coordinates in geometry's physical units; indices are **integer cell indices (0-based)**. + - **Concept Links:** cell indexing scheme, physical coordinates, ijk vs xyz, raster order + - **Notes:** Rewrite "implicit/explicit" framing in plain language ("makes the per-cell coordinates available as a regular cell-level array"). Add a "When to Use" — typically for CSV/text export workflows. Add Required Input Sources (Image Geometry). + +--- + +## Batch 6: Data Manipulation + +**Plugin:** SimplnxCore +**Filters:** 21 (create / copy / delete / rename / move / combine / split / convert / initialize / calculate) + +### Tier 1 — Critical + +None. No filter in this batch is incomprehensible to a non-expert. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| CreateAttributeMatrix | SimplnxCore | Done | +| CreateDataGroup | SimplnxCore | Done | +| DeleteData | SimplnxCore | Done | +| RenameDataObject | SimplnxCore | Done | +| MoveData | SimplnxCore | Done | +| CopyFeatureArrayToElementArray | SimplnxCore | Done | +| CreateFeatureArrayFromElementArray | SimplnxCore | Done | +| ConditionalSetValue | SimplnxCore | Done | +| ConvertColorToGrayScale | SimplnxCore | Done | +| ReshapeDataArray | SimplnxCore | Done | + +- [ ] **CreateAttributeMatrixFilter** (SimplnxCore) + - **Clarity:** Extremely brief (only ~20 lines). Lone example does not explain what an Attribute Matrix conceptually represents. + - **Completeness:** Missing the *why* (tuple-dimensions discipline for arrays in the same matrix), the *when* (typical use cases — creating a Feature Attribute Matrix, an Ensemble Attribute Matrix), and the relationship to DataGroup. + - **Accessibility:** Assumes the user already knows what an Attribute Matrix is. + - **Figures Needed:** Optional — a hierarchy diagram showing Image Geometry → Cell Attribute Matrix → arrays would also serve CreateGeometry/CreateDataGroup. + - **Concept Links:** Attribute Matrix, tuple dimensions, DataGroup vs Attribute Matrix + - **Notes:** Add "What is an Attribute Matrix?" subsection. Cross-link to CreateDataGroup with explicit when-to-use-which guidance. Note tuple-dimension consistency requirement. + +- [ ] **CreateDataGroupFilter** (SimplnxCore) + - **Clarity:** Only 1 paragraph; says "unlike AttributeMatrix, DataGroups are capable of holding any DataObject of any size" but doesn't explain when to choose one over the other. + - **Completeness:** Missing typical use case (organizing related arrays of different sizes, creating an output structure for a future filter). + - **Concept Links:** DataGroup, AttributeMatrix + - **Notes:** Expand. Cross-reference CreateAttributeMatrix and explain the choice: DataGroup for heterogeneous content, Attribute Matrix when all child arrays must share tuple dimensions. + +- [ ] **DeleteDataFilter** (SimplnxCore) + - **Clarity:** Two use cases (memory and name collisions) clearly explained. + - **Completeness:** Missing: cascade behavior (does deleting a Geometry also delete its Attribute Matrices? Does deleting an Attribute Matrix delete its child arrays?), what happens to downstream filters that reference the deleted object. + - **Concept Links:** cascade delete, object lifetimes + - **Notes:** Document the cascade behavior. Add explicit warning: subsequent filters that selected the deleted object will fail preflight. + +- [ ] **RenameDataObjectFilter** (SimplnxCore) + - **Clarity:** Single sentence. + - **Completeness:** Missing: what happens to filter parameters downstream that reference the old name (they won't auto-update — preflight will fail). What name collisions are allowed/disallowed. + - **Notes:** Expand to one paragraph. Warn about downstream filter parameter references not updating automatically. + +- [ ] **MoveDataFilter** (SimplnxCore) + - **Clarity:** Brief but covers the tuple-count requirement. + - **Completeness:** Missing: examples (moving a computed array into a Feature Attribute Matrix; moving an array between DataGroups). What happens to arrays that are children of the moved object. + - **Concept Links:** parent-child hierarchy, tuple validation + - **Notes:** Add concrete examples. Explain that tuple-dimension *shape* doesn't need to match — only the *number of tuples*. + +- [ ] **CopyFeatureArrayToElementArrayFilter** (SimplnxCore) + - **Clarity:** "Xmdf visualization files write only the Element attributes" is jargon and almost the entire rationale. + - **Completeness:** Missing: general "when to use" (broadcasting a per-Feature scalar to every cell of that feature for visualization), parameter description. + - **Notes:** Lead with the general purpose (broadcast Feature-level value back to all cells of the Feature). Explain the Xmdf-export reason as one specific use case rather than the only one. Add Required Input Sources. + +- [ ] **CreateFeatureArrayFromElementArrayFilter** (SimplnxCore) + - **Clarity:** "the value of the *last element copied*" is buried as the central footgun. + - **Completeness:** Missing: warning that this filter is destructive when used on per-cell scalars that vary within a feature (since most cells get discarded). When to use vs. ComputeArrayStatistics (which computes per-feature means). + - **Notes:** Promote the "last element copied" caveat to a Warning section. Cross-reference ComputeArrayStatistics for averaging behavior. Add Required Input Sources. + +- [ ] **ConditionalSetValueFilter** (SimplnxCore) + - **Clarity:** Two modes (conditional mask vs value-replacement) buried in one dense sentence. + - **Completeness:** Mode parameter (*Use Conditional Mask*) is the central control but not promoted. + - **Notes:** Split the two modes into their own subsections. Document *Use Conditional Mask* explicitly. Add Required Input Sources. + +- [ ] **ConvertColorToGrayScaleFilter** (SimplnxCore) + - **Clarity:** Four conversion algorithms documented with formulas. + - **Completeness:** Missing: when to use (preprocessing color images for downstream grayscale-only filters), expected input format (uint8 RGB/RGBA), output type. + - **Notes:** Add "When to Use" lead-in. State input/output array types and component shapes. Add Required Input Sources (ITK image reader). + +- [ ] **ReshapeDataArrayFilter** (SimplnxCore) + - **Clarity:** Critical footgun warning ("DOES NOT MOVE ANY VALUES IN MEMORY") is buried at line 11. + - **Completeness:** Stride-mismatch example is good but the warning needs more prominence given that misuse silently produces wrong results. + - **Concept Links:** strides, row-major / C-order storage, tuple dimensions + - **Notes:** Promote the "no memory rearrangement" warning into a top-level Warning section. Add a "When NOT to Use" callout. Add Required Input Sources. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| CreateDataArray | SimplnxCore | Done | +| CreateDataArrayAdvanced | SimplnxCore | Done | +| CopyDataObject | SimplnxCore | Done | +| CombineAttributeArrays | SimplnxCore | Done | +| ConcatenateDataArrays | SimplnxCore | Done | +| SplitDataArrayByComponent | SimplnxCore | Done | +| SplitDataArrayByTuple | SimplnxCore | Done | +| ExtractComponentAsArray | SimplnxCore | Done | +| ConvertData | SimplnxCore | Done | +| ArrayCalculator | SimplnxCore | Done | +| InitializeData | SimplnxCore | Done | + +- [ ] **CreateDataArrayFilter** (SimplnxCore) + - **Notes:** Already has good data-type ranges table and semicolon-notation example. Minor polish: state that Number of Components must be ≥ 1; explicitly note that this filter creates a *single component dimension* (use CreateDataArrayAdvanced for multi-dimension components). Add Required Input Sources (none). + +- [ ] **CreateDataArrayAdvancedFilter** (SimplnxCore) + - **Notes:** Documents 4 initialization modes (Fill, Incremental, Random, Random With Range) and Step Operation. Mostly good. Polish: state component-dimension product must be ≥ 1; clarify that multi-dimensional components (e.g., 3x3 tensor) are supported here. Cross-link CreateDataArray as the simpler version. + +- [ ] **CopyDataObjectFilter** (SimplnxCore) + - **Notes:** Clear; "deep copy" semantics for BaseGroup containers documented. Polish: cross-link Copy to New Parent option more explicitly; add Required Input Sources (none). + +- [ ] **CombineAttributeArraysFilter** (SimplnxCore) + - **Notes:** Already has worked examples and figures. Polish: cross-link "Concatenate Data Arrays" already present; mention the use case of building a Vertex coordinates array from three separate x/y/z arrays. Add Required Input Sources. + +- [ ] **ConcatenateDataArraysFilter** (SimplnxCore) + - **Notes:** Brief but clear. Cross-link to Combine Attribute Arrays is present. Polish: state that the result is always 1-D (already does); add example. + +- [ ] **SplitDataArrayByComponentFilter** (SimplnxCore) + - **Notes:** Clear worked example. Polish: minor copy-edit ("unput" → "input"); state the "specifying a subset of components" mode more cleanly; cross-link Combine Attribute Arrays as the inverse operation (already does). + +- [ ] **SplitDataArrayByTupleFilter** (SimplnxCore) + - **Notes:** Clear worked example. Polish: cross-link Split Data Array (By Component) present. Polish: state units on tuple counts (integer counts). + +- [ ] **ExtractComponentAsArrayFilter** (SimplnxCore) + - **Notes:** Title in cpp is "Extract/Remove Components" — verify match. Brief but covers the 3 operation modes. Polish: add a worked example showing the 3 modes; add Required Input Sources. + +- [ ] **ConvertDataFilter** (SimplnxCore) + - **Notes:** Already very thorough with up/down casting and signed/unsigned warnings. Polish: cross-link to Reshape Data Array for the related-but-different "interpret data differently" use case. Add Required Input Sources. + +- [ ] **ArrayCalculatorFilter** (SimplnxCore) + - **Notes:** Already extremely thorough — operator tables, multi-component handling, explicit array name escaping, multiple worked examples. Polish: minor only. Cross-link to Convert Angles to Degrees or Radians (already mentioned). Add Required Input Sources. + +- [ ] **InitializeDataFilter** (SimplnxCore) + - **Notes:** Content is good but the prose is rambly. Polish: restructure each initialization mode into its own subsection with a brief intro and bullet list of nuances rather than nested bullet trees. Move boolean entry rules to a single dedicated subsection. + +--- + +## Batches 8-9: Not Yet Triaged + +The following batches have been identified in the design spec but have not yet been triaged. Each batch will be triaged at the start of its work cycle. (Batch 7 was triaged 2026-06-10; see the Batch 7 section below.) + +## Batch 2: Alignment Filters + +**Plugin:** OrientationAnalysis + SimplnxCore +**Filters:** 5 + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| AlignSectionsMutualInformation | OrientationAnalysis | Done | +| AlignSectionsMisorientation | OrientationAnalysis | Done | +| AlignSectionsList | SimplnxCore | Done | + +- [x] **AlignSectionsMutualInformationFilter** (OrientationAnalysis) + - **Clarity:** Functional but domain-heavy; mutual information concept not explained for non-experts + - **Figures Needed:** Diagram showing 7x7 grid search with high/low MI regions + - **Real-World Viz:** Pipeline screenshot showing input/output shift arrays + - **Concept Links:** mutual information, feature segmentation, 7x7 grid search, local minima + - **Changes Made:** Added "What is Mutual Information?" section. Added "When to Use This Method" guidance. Restructured algorithm into clear numbered steps with named subsections. Explained misorientation tolerance parameter. Cross-referenced other alignment methods. + +- [x] **AlignSectionsMisorientationFilter** (OrientationAnalysis) + - **Clarity:** Clear algorithm steps but non-experts need misorientation definition; background subtraction underdocumented + - **Figures Needed:** Diagram of 7x7 grid search with before/after alignment; background subtraction concept + - **Real-World Viz:** Example output shifts for a real dataset + - **Concept Links:** misorientation angle, cell-to-cell pairing, 7x7 grid search, local minima, background shift removal + - **Changes Made:** Added "When to Use This Method" guidance with cross-references to alternatives. Restructured algorithm with clear step descriptions. Separated local minima warning, masking, and linear background subtraction into named subsections. + +- [x] **AlignSectionsListFilter** (SimplnxCore) + - **Clarity:** Core concept clear but overwhelmed by backwards compatibility cruft and file format specs + - **Figures Needed:** Flowchart showing relative vs cumulative shift interpretation + - **Real-World Viz:** Typical usage showing output from another alignment filter feeding into this one + - **Concept Links:** relative shifts, cumulative shifts, slice ordering, CSV import + - **Changes Made:** Rewrote lead paragraph to explain the three use cases. Clarified relative vs cumulative with concise definitions. Consolidated file import instructions into a single streamlined section. Moved legacy format details into a brief "Note on Legacy Files" section. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| AlignSectionsFeatureCentroid | SimplnxCore | Done | + +- [x] **AlignSectionsFeatureCentroidFilter** (SimplnxCore) + - **Clarity:** Clear and accessible; centroid-based alignment is straightforward + - **Figures Needed:** Diagram showing centroid calculation on adjacent slices before/after alignment + - **Real-World Viz:** Before/after visualization of aligned sections + - **Concept Links:** centroid, cell resolution, reference slice, background shift removal + - **Changes Made:** Restructured into clear subsections (When to Use, How It Works, Reference Slice, Linear Background Subtraction). Added comparison note about local minima advantage over other methods. + +### Tier 4 — Adequate + +| Filter | Plugin | Status | +|--------|--------|--------| +| AlignGeometries | SimplnxCore | No Changes Needed | + +- [x] **AlignGeometriesFilter** (SimplnxCore) + - **Notes:** 32 lines. Two simple alignment methods (Origin and Centroid) clearly explained. No domain jargon. Adequate as-is. + +--- + +## Batch 3: Segmentation / Feature Identification + +**Plugin:** SimplnxCore + OrientationAnalysis +**Filters:** 10 (3 core segmentation + 7 feature identification/post-processing) + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| MergeTwins | OrientationAnalysis | Done | + +- [x] **MergeTwinsFilter** (OrientationAnalysis) + - **Clarity:** Very sparse (~27 lines). Cubic-High restriction stated in caps but no context on why twins are merged; Sigma-3 and `<111>` axis terminology used with no definitions. + - **Completeness:** Only one paragraph of description; no output array description; no guidance on typical tolerance values; no before/after imagery. + - **Accessibility:** Assumes reader knows what a twin is, what Sigma-3 notation means, and how to interpret `<111>` direction notation. + - **Figures Needed:** Sigma-3 twin relationship diagram; visual explanation of axis tolerance vs. angle tolerance. + - **Real-World Viz:** Before/after microstructure showing twin variants merged into the parent grain. + - **Concept Links:** twin boundaries, Sigma-3, FCC, `<111>` axis, misorientation + - **Changes Made:** Added "What is a Twin?" section explaining Sigma-3, FCC annealing twins, and CSL notation. Added "Why Merge Twins?" section giving the downstream-analysis motivation (grain counting, size distributions, neighbor stats). Restructured algorithm into numbered steps on the Feature level. Added "Parameter Guidance" with explicit degree units and typical tolerance ranges. Added "Required Input Sources" section listing each upstream filter that must run first. Added "Limitations" clarifying Cubic-High/m3m restriction, FCC-only practical applicability, and Sigma-3-only detection. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| ScalarSegmentFeatures | SimplnxCore | Done | +| CAxisSegmentFeatures | OrientationAnalysis | Done | +| EBSDSegmentFeatures | OrientationAnalysis | Done | +| RequireMinimumSizeFeatures | SimplnxCore | Done | +| ComputeFeatureNeighbors | SimplnxCore | Done | + +- [x] **ScalarSegmentFeaturesFilter** (SimplnxCore) + - **Clarity:** Burn algorithm steps clear, but term "burn algorithm" undefined; no introduction to what segmentation accomplishes conceptually. + - **Completeness:** Neighbor scheme well documented with 4 paired figure sets. No guidance on tolerance values (tolerance is in whatever units the scalar array uses). + - **Accessibility:** "Cells" and "Features" used without first-use definition; bold emphasis is stylistic rather than explanatory. + - **Figures Needed:** Neighbor-scheme figures already excellent; could add a simple "what is segmentation" before/after conceptual diagram. + - **Real-World Viz:** Before/after FeatureIds map from a scalar-based segmentation (e.g., image-quality thresholding). + - **Units Clarity:** Tolerance has no explicit units — depends entirely on input array data type; this must be stated. + - **Concept Links:** Feature IDs, burn algorithm, segmentation, Cell vs Feature data + - **Changes Made:** Added lead-in describing the FeatureIds output and cross-referencing the two orientation-based segment filters. Added "What is Feature Segmentation?" conceptual section. Rewrote algorithm into a burn-algorithm step list. Added "Tolerance and Units" section with concrete examples for integer phase maps, 0-1 image quality, and 0-255 grayscale. Added "Mask Array" and "Periodic Option" sections. Added Required Input Sources with cross-plugin links. + +- [x] **CAxisSegmentFeaturesFilter** (OrientationAnalysis) + - **Clarity:** Brief C-axis definition provided, but assumes hexagonal-system knowledge; no guidance on when to use this vs EBSDSegmentFeatures. + - **Completeness:** Shares structure and neighbor scheme figures with other segment filters. Missing: explicit hexagonal-only warning, phase handling, when-to-use guidance. + - **Accessibility:** `<001>`, hexagonal system, C-axis all used without plain-language expansion. + - **Figures Needed:** Reuse hexagonal C-axis figure from ComputeAvgCAxes (Batch 1); add a "C-axis misalignment between two neighboring cells" diagram. + - **Real-World Viz:** Before/after segmentation on hexagonal (e.g., Ti) EBSD data. + - **Units Clarity:** Tolerance is in **degrees** — must be stated explicitly in the parameter description. + - **Concept Links:** C-axis, hexagonal materials, burn algorithm, reference frames + - **Changes Made:** Added explicit hexagonal-only warning at the top with cross-references to alternative segment filters. Added "When to Use This Filter" explaining why C-axis alignment is the right criterion for hexagonal materials and when to use misorientation-based segmentation instead. Rewrote algorithm steps; added "Tolerance and Units" with degree units and typical values (1-3 / 5 / 10+). Added Required Input Sources linking ComputeAvgCAxes for C-axis concept. + +- [x] **EBSDSegmentFeaturesFilter** (OrientationAnalysis) + - **Clarity:** Generic term "misorientation" used without definition; core burn algorithm clear but domain context missing. + - **Completeness:** No guidance on typical tolerance values (5° is the common industry default for grain segmentation); no mention of how multiple phases are handled. + - **Accessibility:** Assumes EBSD workflow and misorientation knowledge. + - **Figures Needed:** Misorientation angle diagram (shared with Batch 1 misorientation concept work); before/after segmentation example. + - **Real-World Viz:** EBSD IPF map → segmented grains visualization — this is one of the highest-value workflow visualizations in DREAM3DNX. + - **Units Clarity:** Tolerance is in **degrees** — must be stated explicitly. + - **Concept Links:** misorientation, EBSD workflow, burn algorithm, reference frames, grain segmentation + - **Changes Made:** Added "What is Misorientation-Based Segmentation?" section explaining grains and misorientation for non-experts. Rewrote algorithm into numbered burn steps including symmetry handling. Added "Typical Tolerance Values" section with 5° industry default, 2-3° for subgrains, 10-15° high-angle cutoff. Added "Phase Handling" explaining different-phase and phase-0 behavior. Added "Mask Array" and "Periodic Option" sections. Added Required Input Sources. + +- [x] **RequireMinimumSizeFeaturesFilter** (SimplnxCore) + - **Clarity:** Core action (remove features below size threshold) clear, but "isotropically coarsened" is unexplained jargon. + - **Completeness:** Has good warnings (feature data invalidation, NeighborList removal); no guidance on typical minimum-size values. + - **Accessibility:** "Ensemble" bolded but not defined; "isotropically coarsened" needs a plain-language explanation. + - **Figures Needed:** Before/after showing small features removed and gaps filled; diagram of isotropic coarsening (neighbors growing outward uniformly). + - **Real-World Viz:** Before/after microstructure with minimum-size filter applied. + - **Units Clarity:** Minimum size is in **cells** (integer voxel count) — must be stated explicitly. + - **Concept Links:** feature cleanup, isotropic coarsening, Ensemble, NeighborList invalidation + - **Changes Made:** Added lead-in explaining typical use (discarding spurious single-cell grains after segmentation). Added "What is Isotropic Coarsening?" section with plain-language explanation. Added "Minimum Size Units" section stating units are **cells** (integer voxel count), with a formula for converting physical volume to cell count. Rewrote the "Single Phase" option more clearly. Kept existing warnings. Added Required Input Sources. + +- [x] **ComputeFeatureNeighborsFilter** (SimplnxCore) + - **Clarity:** Algorithm steps clear, but the multiple output arrays are described inline in running prose and hard to scan. + - **Completeness:** Mentions several outputs (neighbor count, shared surface area, boundary-cell count, surface-feature flag) but all buried in a single paragraph. + - **Accessibility:** Face-sharing neighbor concept not illustrated; implicit assumption that user knows what a NeighborList is. + - **Figures Needed:** Diagram showing feature-to-feature shared boundary with shared surface area highlighted. + - **Real-World Viz:** Grain map colored by number of neighbors; or shared-surface-area visualization. + - **Units Clarity:** Shared surface area is in **cell-face units** (dimensionless count of shared faces, not physical area) — should be stated. + - **Concept Links:** contiguous neighbors, Feature IDs, shared surface area, NeighborList + - **Changes Made:** Rewrote lead-in describing why downstream filters depend on this (misorientation stats, GBCD, twin merging, boundary strengths). Separated algorithm steps from output descriptions. Added "What This Filter Produces" section with bulleted list of the three main outputs plus two optional outputs; explained each output's downstream use. Explicitly stated shared surface area units are **cell-face count**, not physical area. Added Required Input Sources. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| IdentifySample | SimplnxCore | Done | +| ComputeSurfaceFeatures | SimplnxCore | Done | +| ComputeBiasedFeatures | SimplnxCore | Done | +| RemoveFlaggedFeatures | SimplnxCore | Done | + +- [x] **IdentifySampleFilter** (SimplnxCore) + - **Clarity:** Clear purpose (remove overscan border), steps well explained, slice-by-slice option well documented. + - **Completeness:** Good example images showing when to use vs when not to use the filter. + - **Accessibility:** FIB-SEM mentioned but not critical to understanding; typo: "thresheld" should be "thresholded". + - **Figures Needed:** Already adequate; could add a before/after showing cleanup effect on a real overscanned dataset. + - **Real-World Viz:** Already has good/bad-dataset examples. + - **Concept Links:** thresholding, sample identification, contiguous regions + - **Changes Made:** Fixed typo "thresheld" → "thresholded". Rewrote intro prose for readability (shorter sentences, active voice). Added explicit link to Multi-Threshold Objects as the typical mask source. Added Required Input Sources. Title preserved as it matches the filter's humanName(). + +- [x] **ComputeSurfaceFeaturesFilter** (SimplnxCore) + - **Clarity:** Purpose clear; algorithm clear; two WARNING sections are helpful and well-placed. + - **Completeness:** Broken/truncated sentence on line 9: "the Cells that sit at either ." — should be completed or deleted. Intro paragraph and the "This Filter determines..." paragraph are partially redundant. + - **Accessibility:** Feature ID=0 convention referenced in a warning but could use an inline first-use definition. + - **Figures Needed:** Already has good example output images. + - **Real-World Viz:** Already present. + - **Concept Links:** Feature ID=0, surface features, bounding box + - **Changes Made:** Deleted broken truncated sentence. Consolidated the two redundant intro paragraphs into one. Added inline definition of Feature ID = 0 (the "unassigned / outside sample" convention) with cross-link to IdentifySample. Added cross-link to ComputeBiasedFeatures as the more rigorous approach to boundary bias. Added Required Input Sources. + +- [x] **ComputeBiasedFeaturesFilter** (SimplnxCore) + - **Clarity:** Algorithm and rationale well explained; before/after example figure is strong. + - **Completeness:** Good — explains why larger features are more likely to be biased and why bounding-box logic works. + - **Accessibility:** Most terms defined inline; credit to Dave Rowenhorst retained. + - **Figures Needed:** Already adequate. + - **Real-World Viz:** Already present. + - **Concept Links:** stereology, feature centroids, bounding-box bias, unbiased statistics + - **Changes Made:** Added "Why Bias Matters for Statistics" section explaining the size-dependent sampling bias — why excluding only surface-touching features still leaves bias, and why centroid-based bounding-box logic fixes it. Cross-linked ComputeSurfaceFeatures. Added Required Input Sources. + +- [x] **RemoveFlaggedFeaturesFilter** (SimplnxCore) + - **Clarity:** Three operations (Remove / Extract / Extract then Remove) well documented. + - **Completeness:** NeighborList warning present; no Example Pipeline link populated. + - **Accessibility:** "isotropically coarsened" is jargon (same issue as RequireMinimumSizeFeatures). + - **Figures Needed:** Before/after showing each of the three operation modes; at least a side-by-side of Remove vs Extract. + - **Real-World Viz:** Microstructure showing extraction vs removal outcomes. + - **Concept Links:** feature cleanup, isotropic coarsening, feature extraction + - **Changes Made:** Rewrote description to position this filter as the general-purpose flag-based removal tool and cross-reference RequireMinimumSizeFeatures for size-based use. Linked "isotropic coarsening" to the definition in RequireMinimumSizeFeatures rather than repeating. Cleaned up operation list phrasing. Converted NeighborList warning to sub-heading. Added Required Input Sources listing typical flag-producing filters (ComputeBiasedFeatures, ComputeSurfaceFeatures). + +--- + +## Batch 7: I/O Filters (Read/Write) + +**Plugin:** SimplnxCore + OrientationAnalysis +**Filters:** 44 (24 readers + 20 writers) + +> **Scope note:** The design spec estimated ~15 I/O filters. The actual count is **44** once the full set of EBSD/HDF5 readers (Ang, Ctf, Channel5, H5Ebsd, H5Esprit, H5Oim, H5Oina, EnsembleInfo, GrainMapper3D) and the format-specific exporters (Abaqus, LAMMPS, SPParks, LosAlamos FFT, VTK, Avizo, INL, GBCD, StatsGen ODF, etc.) are included. Rewrites will be committed at each tier boundary, and the large Tier 2 group may be split into sub-commits by sub-theme (core data I/O, image/volume readers, simulation exporters, VTK/Avizo, EBSD readers, OrientationAnalysis writers). + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| ReadH5OinaData | OrientationAnalysis | Done | +| WriteGBCDGMTFile | OrientationAnalysis | Done | + +- [x] **ReadH5OinaDataFilter** (OrientationAnalysis) + - **Clarity:** Reads a single Oxford Aztec `.h5oina` file; vendor clearly identified. FORMAT VERSION 2.0 limitation and the Read HDF5 Dataset workaround are useful. + - **Completeness:** STRUCTURAL DEFECT (fixed) — the doc had hand-written `## Parameters` and `## Created Objects` tables and was missing the auto-table marker entirely. + - **Accessibility:** Same undefined EBSD jargon (Euler angles, crystal structures, reference frames) as the other EBSD readers. + - **Figures Needed:** Has Figure 1 (Hexagonal alignment) + a UI overview; a sample/crystal reference-frame diagram would help. + - **Real-World Viz:** IPF map of imported Aztec data. + - **Units Clarity:** `.h5oina` angles stated as radians (good); Z Spacing units (microns) now live in the parameter help text (the auto-table). + - **Concept Links:** Euler angles (Bunge Z-X-Z), crystal structures/Ensemble, lattice constants, sample/crystal reference frame, hexagonal symmetry, H5OINA v2.0 format + - **Changes Made:** DELETED the hand-written `## Parameters` and `## Created Objects` tables and INSERTED the `% Auto generated parameter table` marker (so the real parameter table now injects). Added a "What This Filter Produces" prose paragraph explaining the imported EBSD data in plain language (orientation as Euler angles, per-pixel phase, pattern-quality metrics, per-phase Ensemble data) instead of a stale type table. Fixed the phi2 +30° bullet that wrongly referenced "(.ctf) files" → "`.h5oina` files". Reworded the historical reference-frame note from ".ctf file" to "Oxford data". Converted the two `{ref}` rotation links and the bold-only "Threshold Objects" to MyST links; fixed the Read HDF5 Dataset link to the cross-plugin `../SimplnxCore/` form. Added a "Downstream Processing" note cross-linking Convert Orientation Representation. Fixed typo "agment" → "augment". Normalized footer to "## DREAM3D-NX Help". + +- [x] **WriteGBCDGMTFileFilter** (OrientationAnalysis) + - **Clarity:** Was one sentence; never explained what a GBCD pole figure is, what the `.dat` contains, or why an engineer would want one. + - **Completeness:** No parameter explanation beyond "phase index"; the Misorientation Axis-Angle parameter was undocumented. No Required Input Sources. + - **Accessibility:** "GBCD", "GMT", "pole figure", "phase index" all undefined. GMT URL (`gmt.soest.hawaii.edu`) was stale. + - **Figures Needed:** Data-flow diagram: GBCD data (from Compute GBCD) → this filter → `.dat` → GMT → rendered pole figure (shows the external toolchain). + - **Real-World Viz:** Already has a rendered GMT pole figure image (caption now explains MRD contours). + - **Units Clarity:** Phase index now stated as 1-based dimensionless index; misorientation angle stated in degrees, axis (h,k,l) dimensionless. + - **Concept Links:** GBCD, GMT, pole figure, stereographic projection, Ensemble/phase data, MRD + - **Changes Made:** Major rewrite. Added "What is a GBCD Pole Figure?" defining grain boundary, GBCD, misorientation, pole figure, and MRD in plain language. Added "What This Filter Does" making explicit that GMT is an external toolkit and this filter only writes its input `.dat` file (with the Compute GBCD → this filter → GMT toolchain spelled out). Added "Parameter Guidance" documenting Phase of Interest (1-based index), the previously-undocumented Misorientation Axis-Angle (angle in degrees + crystal axis h,k,l, with the Σ3 example), and Output GMT File. Added a Required Input Sources section naming [Compute GBCD](ComputeGBCDFilter.md) (GBCD) and the EBSD readers (Crystal Structures). Fixed the GMT URL to generic-mapping-tools.org. Improved the figure caption to explain the MRD contours. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| ReadHDF5Dataset | SimplnxCore | Done | +| WriteBinaryData | SimplnxCore | Done | +| ReadStlFile | SimplnxCore | Done | +| ReadVtkStructuredPoints | SimplnxCore | Done | +| ReadVolumeGraphicsFile | SimplnxCore | Done | +| WriteAbaqusHexahedron | SimplnxCore | Done | +| WriteLAMMPSFile | SimplnxCore | Done | +| WriteSPParksSites | SimplnxCore | Done | +| WriteLosAlamosFFT | SimplnxCore | Done | +| ReadDeformKeyFileV12 | SimplnxCore | Done | +| WriteVtkRectilinearGrid | SimplnxCore | Done | +| WriteVtkStructuredPoints | SimplnxCore | Done | +| WriteAvizoRectilinearCoordinate | SimplnxCore | Done | +| WriteAvizoUniformCoordinate | SimplnxCore | Done | +| ReadDREAM3D | SimplnxCore | Done | +| ReadEnsembleInfo | OrientationAnalysis | Done | +| ReadAngData | OrientationAnalysis | Done | +| ReadCtfData | OrientationAnalysis | Done | +| ReadChannel5Data | OrientationAnalysis | Done | +| ReadH5Ebsd | OrientationAnalysis | Done | +| ReadH5EspritData | OrientationAnalysis | Done | +| ReadH5OimData | OrientationAnalysis | Done | +| WriteGBCDTriangleData | OrientationAnalysis | Done | +| WritePoleFigure | OrientationAnalysis | Done | + +- [x] **ReadHDF5DatasetFilter** (SimplnxCore) + - **Clarity:** Element-count matching rule is explained, but the worked examples confuse more than clarify (Example 1 is an error case; Example 2's arithmetic is internally inconsistent). + - **Completeness:** Missing description of key parameters (which dataset(s) to select, the file path, multi-dataset import in one pass). Only the dimension math is covered. + - **Accessibility:** Assumes the reader knows HDF5 dataset vs group; "component/tuple dimensions", "attribute matrix" undefined. + - **Figures Needed:** Diagram of a flat HDF5 dataset (N elements) reshaped into tuples × components. + - **Real-World Viz:** Screenshot of the HDF5 tree dataset-selection UI. + - **Units Clarity:** N/A (element counts, dimensionless). + - **Concept Links:** HDF5 dataset/group, component dimensions, tuple dimensions, attribute matrix, total element count + - **Changes Made:** Added a one-line definition of HDF5 and first-use definitions of tuple vs component dimensions. Described the dataset-selection behavior and the optional Attribute-Matrix parent placement in prose. Replaced the three inconsistent worked examples (including the '4-dims-labeled-3D' / mismatched-arithmetic case) with three internally consistent ones built on the rule total-element-count = tuples x components. Added Required Input Sources (None -- external .h5/.hdf5 file) and a License & Copyright section. + +- [x] **WriteBinaryDataFilter** (SimplnxCore) + - **Clarity:** Thin — one sentence plus an Endianess section. Does not state output file naming, extension, multi-component behavior, or that no header is written. + - **Completeness:** Only Endianess documented. Missing output directory/naming, raw-no-header behavior, on-disk component ordering, file extension parameter. + - **Accessibility:** The Endianess section itself is clear; the problem is omission. + - **Figures Needed:** None. + - **Real-World Viz:** Optional screenshot of the output files (low priority). + - **Units Clarity:** N/A. + - **Concept Links:** endianness, raw binary (no header), component ordering, output file naming + - **Changes Made:** Expanded the thin description to the actual behavior (one raw file per **Data Array**, `` naming with default `.bin`, interleaved components, no header written). Added the explicit warning that the user must record type/dims/endianness, and a cross-link to read the files back with [Read Raw Binary](ReadRawBinaryFilter.md). Italicized the endianness values; fixed the run-on/period grammar. + +- [x] **ReadStlFileFilter** (SimplnxCore) + - **Clarity:** Dives straight into binary layout/attribute-byte-count without first stating in plain terms that STL is a triangle surface mesh and the output is a Triangle Geometry. + - **Completeness:** Covers binary format, vendor detection, strictness, a Python fix script. Never states ASCII STL is unsupported; no mention of produced arrays/normals. + - **Accessibility:** Heading typo "## IMPORANT NOTES". Strictness warning repeated verbatim twice. Aimed at STL-format experts. + - **Figures Needed:** Illustration of one triangle (normal + 3 vertices) and how triangles form a surface mesh. + - **Real-World Viz:** Screenshot of an STL surface as a Triangle Geometry. + - **Units Clarity:** STL is unitless — one sentence stating coordinates are in the file author's units (dimensionless to the reader). + - **Concept Links:** Triangle Geometry, surface mesh, STL binary format, attribute byte count, face normals + - **Changes Made:** Added a plain-language opening (an STL file is a list of triangles -> **Triangle Geometry**, with Face Normals/Labels). Fixed the 'IMPORANT NOTES' heading typo. Added an explicit binary-only / ASCII-rejected caveat (confirmed against preflight). Collapsed the duplicated attribute-byte-count warning; noted STL coordinates are unitless. Required Input Sources: None; fixed the Wikipedia anchor. + +- [x] **ReadVtkStructuredPointsFilter** (SimplnxCore) + - **Clarity:** Core idea clear (legacy VTK structured-points → Image Geometry) but POINT_DATA vs CELL_DATA and "eight values per voxel" will confuse non-experts without a figure. Uses legacy SIMPL "Data Container" wording. + - **Completeness:** Explains attribute types, binary/ASCII, point vs cell data with an example. Missing: behavior when both POINT_DATA and CELL_DATA present (output naming/paths). + - **Accessibility:** "STRUCTURED_POINTS", "POINT_DATA", "CELL_DATA", "LOOKUP_TABLE" only partly explained. + - **Figures Needed:** A voxel cube showing cell-center value vs the 8 corner (point) values. + - **Real-World Viz:** Screenshot of the example GrainIds dataset as an Image Geometry. + - **Units Clarity:** State spacing/origin come from the file; length units file-defined. + - **Concept Links:** Image Geometry, Cell Attribute Matrix, structured points, point vs cell data, voxel corners vs center, SCALARS/VECTORS + - **Changes Made:** Replaced legacy 'Data Container' with **Image Geometry** throughout. Added a Point Data vs Cell Data subsection and described the two-output naming (`VTK Cell Data` / `VTK Point Data`) when both are present. Added the missing DREAM3D-NX Help footer and a License section, plus a Spacing/Origin/Units note. Required Input Sources: None. + +- [x] **ReadVolumeGraphicsFileFilter** (SimplnxCore) + - **Clarity:** Thin one-paragraph description; a non-expert won't know "Volume Graphics" data is a CT/VGStudio export. + - **Completeness:** Underspecified — no output geometry type, volume data type, cropping support, or created array named. Only caveat is "both files in same directory". + - **Accessibility:** "Volume Graphics data files" is a vendor term used without explanation. + - **Figures Needed:** Optional small diagram of the `.vgi` (metadata) + `.vol` (raw voxels) pairing. + - **Real-World Viz:** Screenshot of a CT volume from a `.vgi`/`.vol` pair. + - **Units Clarity:** Says units come from the `.vgi`; expand to state which units and that spacing/origin derive from it. + - **Concept Links:** Image Geometry, `.vgi`/`.vol` file pair, spacing/dimensions/units, CT volume + - **Changes Made:** Normalized the group to IO (Input). Defined Volume Graphics data (.vgi metadata + .vol raw voxels; a CT/VGStudio export). Stated the output is an **Image Geometry** with a single float32 density Cell array and origin (0,0,0) (confirmed from preflight); noted no sub-volume extraction. Added an Example Pipelines heading and Required Input Sources: None. + +- [x] **WriteAbaqusHexahedronFilter** (SimplnxCore) + - **Clarity:** Non-expert won't know Abaqus is a commercial FEA package or why one exports a voxel grid to it. Jumps into `.inp` files without framing the Image-Geometry → hexahedral-mesh conversion. + - **Completeness:** Five output files listed but their relationship (master `*Include`s the others) only implied. The `Write Dummy Node` parameter referenced at top but never explained. + - **Accessibility:** "Abaqus", ".inp", "hexahedron", "C3D8", "Hourglass Stiffness", "stress-strain" undefined. The huge raw `_elset.inp` dump hurts readability. + - **Figures Needed:** Diagram of a voxel grid mapping to a hexahedral mesh (8 nodes per voxel). + - **Real-World Viz:** Screenshot of the exported mesh in Abaqus/CAE colored by grain. + - **Units Clarity:** Node coordinates are physical units (matching spacing) but never stated; "Hourglass Stiffness 250" has no units/explanation. + - **Concept Links:** Abaqus/FEA, hexahedral mesh, Image Geometry, FeatureIds, element sets (grains), nodes/elements + - **Changes Made:** Defined Abaqus and FEA; framed the filter as converting an **Image Geometry** voxel grid into a C3D8 8-node hexahedral mesh. Documented the five `.inp` files and the master-file `*Include` relationship, the *Write Dummy Node* and *Hourglass Stiffness* parameters, and that node coordinates are in physical units. Trimmed the large `_elset.inp` dump; added Required Input Sources (FeatureIds + Image Geometry). + +- [x] **WriteLAMMPSFileFilter** (SimplnxCore) + - **Clarity:** Non-expert won't know LAMMPS is a molecular-dynamics code. Purpose stated but why/when unclear. + - **Completeness:** No output-format example. "Example Pipelines" heading empty. Names "Insert Atoms" as producer (good, but informal). + - **Accessibility:** "LAMMPS" never expanded. Legacy "Vertex Data Container" wording. Self-reference "Export LAMMPS Filter" is the wrong name. + - **Figures Needed:** Optional before/after of features filled with atoms. + - **Real-World Viz:** Screenshot of the resulting atom configuration (OVITO/VMD). + - **Units Clarity:** Atom-coordinate units undocumented; state them. + - **Concept Links:** LAMMPS/molecular dynamics, atomistic representation, Vertex Geometry, Insert Atoms + - **Changes Made:** Expanded LAMMPS (Sandia molecular-dynamics code); replaced 'Vertex Data Container' with **Vertex Geometry**; fixed the 'Export LAMMPS Filter' self-reference. Added an output-format example and atom-coordinate units. Added Required Input Sources (Vertex Geometry, e.g. from Insert Atoms -- referenced in plain text since no Insert Atoms doc exists in the repo). Removed the empty Example Pipelines heading. + +- [x] **WriteSPParksSitesFilter** (SimplnxCore) + - **Clarity:** Terse and oddly worded ("LINE 4 evidently must be what is shown"); non-expert won't understand a "sites" file or site/value pairs. + - **Completeness:** No Required Input Sources (needs FeatureIds on an Image Geometry). Line-by-line explanation partial (lines 1, 8 unexplained). + - **Accessibility:** "SPPARKS" linked but not contextualized as a Kinetic Monte Carlo grain-growth simulator. "Kinetic Monte Carlo", "max neighbors", "xlo xhi" undefined. Header style `## Description ##` inconsistent. + - **Figures Needed:** None. + - **Real-World Viz:** None. + - **Units Clarity:** Dimension lines (0 200) are cell-index extents (dimensionless cell counts) — clarify vs physical units. + - **Concept Links:** SPPARKS/Kinetic Monte Carlo, sites, FeatureIds, Image Geometry, Cells + - **Changes Made:** Defined SPPARKS (Sandia Kinetic Monte Carlo microstructure simulator); rewrote the tentative 'LINE 4 evidently' wording authoritatively. Explained site/value = cell/FeatureId, clarified the box-extent lines are dimensionless cell-index counts, and explained the blank separator lines. Normalized '## X ##' headings; added Required Input Sources (FeatureIds on an Image Geometry). + +- [x] **WriteLosAlamosFFTFilter** (SimplnxCore) + - **Clarity:** Output column layout (Phi1 Phi Phi2 X Y Z Feature_ID Phase_ID) explained well, but non-expert won't know what an "FFT 3D simulation code" is for or what Euler angles/phases are. + - **Completeness:** Good format detail and a real reference. No Required Input Sources (needs Euler angles, FeatureIds, Phases on an Image Geometry). Empty "Example Pipelines" heading. + - **Accessibility:** "Euler angles", "Phi1/Phi/Phi2", "phase", "FFT" undefined for a general reader. + - **Figures Needed:** None. + - **Real-World Viz:** None. + - **Units Clarity:** Excellent — Euler angles in degrees, X/Y/Z integer indices, IDs from 1. Model for the batch; keep. + - **Concept Links:** FFT/crystal plasticity, Euler angles, phases, FeatureIds, Image Geometry, CellData + - **Changes Made:** Contextualized Euler angles and the Lebensohn FFT crystal-plasticity code; preserved the existing (model) units paragraph. Added Required Input Sources (Euler angles from an EBSD reader, FeatureIds, Phases) and removed the empty Example Pipelines heading. + +- [x] **ReadDeformKeyFileV12Filter** (SimplnxCore) + - **Clarity:** Two sentences. Non-expert won't know DEFORM is a metal-forming FEA package or what a "key file" is; can't tell what data results. + - **Completeness:** Very thin. Lists variable names (stress, strain, ndtmp) without explanation. Does not describe the resulting DataStructure (a Quad Geometry plus cell/node attribute matrices). + - **Accessibility:** "DEFORM v12", "key file", "ndtmp", "quadrilateral mesh", legacy "Data Container" all undefined. + - **Figures Needed:** Optional screenshot of the imported quad mesh colored by a variable. + - **Real-World Viz:** Render of the loaded DEFORM mesh colored by stress/strain. + - **Units Clarity:** N/A (importer); note imported variable units are whatever DEFORM exported. + - **Concept Links:** DEFORM/FEA, key file, Quad Geometry, nodes/cells, cell vs node variables + - **Changes Made:** Defined DEFORM (metal-forming finite-element package) and a v12 key file. Described the created **Quad Geometry** plus node- and cell-level arrays (ndtmp = nodal temperature); replaced 'Data Container' with Quad Geometry. Added an example key-file snippet; Required Input Sources: None. + +- [x] **WriteVtkRectilinearGridFilter** (SimplnxCore) + - **Clarity:** Never says what a "VTK legacy file" or "RECTILINEAR_GRID dataset" is, nor why one wants this (ParaView/VisIt interop). + - **Completeness:** Single sentence. No ASCII vs binary mention, vertex vs cell data, extension, or that input must be an Image Geometry. + - **Accessibility:** "VTK legacy file", "RECTILINEAR_GRID" undefined. + - **Figures Needed:** Optional shared diagram contrasting rectilinear-grid vs structured-points (variable vs uniform spacing). + - **Real-World Viz:** Screenshot of the `.vtk` in ParaView. + - **Units Clarity:** N/A in prose; confirm in param table. + - **Concept Links:** VTK legacy format, ASCII vs binary VTK, RectilinearGrid vs Image Geometry, ParaView/VisIt + - **Changes Made:** Expanded the one-sentence description; defined VTK legacy format and RECTILINEAR_GRID and named ParaView/VisIt. Explained the **Image Geometry** input is written as an explicit-coordinate rectilinear grid; documented ASCII vs binary. Added Required Input Sources (Image Geometry + cell arrays) and a cross-link to the structured-points variant. + +- [x] **WriteVtkStructuredPointsFilter** (SimplnxCore) + - **Clarity:** Assumes the reader knows STRUCTURED_POINTS. The one useful caveat ("only writes cell data") is present. + - **Completeness:** Very thin. Doesn't explain how structured points differs from rectilinear grid, or when to pick this writer. + - **Accessibility:** "VTK legacy file", "STRUCTURED_POINTS" undefined; indistinguishable from the rectilinear writer to a non-expert. + - **Figures Needed:** Shared diagram (uniform structured points vs variable rectilinear spacing). + - **Real-World Viz:** Screenshot in ParaView. + - **Units Clarity:** N/A in prose. + - **Concept Links:** VTK legacy format, structured points vs rectilinear grid, uniform spacing, ParaView/VisIt + - **Changes Made:** Defined STRUCTURED_POINTS (uniform-spacing image data) with the same VTK/ParaView framing; kept the cell-data-only caveat. Added a 'when to use vs [Write Vtk Rectilinear Grid]' note and ASCII/binary documentation; added Required Input Sources. + +- [x] **WriteAvizoRectilinearCoordinateFilter** (SimplnxCore) + - **Clarity:** Confusing opening ("Values should be present from segmentation … cannot be determined by this filter") — vague about what "values" means (the FeatureIds array). + - **Completeness:** Helpful raw AmiraMesh header example, but never says what Avizo is, what FeatureIds are, or that input is an Image Geometry + Int32 FeatureIds. Example contains garbled DateTime bytes. + - **Accessibility:** "Avizo", "AmiraMesh", "Rectilinear Coordinate", "FeatureIds", "segmentation" undefined. + - **Figures Needed:** None. + - **Real-World Viz:** Screenshot of the output in Avizo. + - **Units Clarity:** Example shows "Coordinates microns" — note the Avizo file hardcodes microns regardless of the geometry's actual units (caveat). + - **Concept Links:** Avizo/AmiraMesh format, FeatureIds, segmentation, RectilinearGrid vs Image Geometry, units (microns) + - **Changes Made:** Rewrote the confusing opening to state the **Image Geometry** + Int32 FeatureIds input plainly; defined Avizo and AmiraMesh. Cleaned the garbled DateTime bytes in the header example; added the hardcoded-microns caveat and ASCII/binary note; added a Group line, Required Input Sources, and a link to the Uniform variant. + +- [x] **WriteAvizoUniformCoordinateFilter** (SimplnxCore) + - **Clarity:** Same vague "Values should be present…" sentence; doesn't clarify FeatureIds input or how "Uniform" differs from "Rectilinear". + - **Completeness:** Example header present but contains empty/garbled fields (blank DateTime, truncated Content/BoundingBox). Avizo/AmiraMesh undefined. + - **Accessibility:** Same undefined jargon as the rectilinear variant. + - **Figures Needed:** None. + - **Real-World Viz:** Screenshot in Avizo. + - **Units Clarity:** "Coordinates microns" hardcoded; caveat needed. BoundingBox units/order should tie to spacing/origin. + - **Concept Links:** Avizo/AmiraMesh format, uniform vs rectilinear coordinates, FeatureIds, BoundingBox, units (microns) + - **Changes Made:** Same clarifications as the Rectilinear variant (FeatureIds input, Avizo/AmiraMesh definitions, microns caveat, cleaned garbled example fields). Added the one-line contrast (single uniform spacing/bounding box vs per-axis coordinate arrays) and a link to the Rectilinear variant; added Required Input Sources. + +- [x] **ReadDREAM3DFilter** (SimplnxCore) + - **Clarity:** Core action clear (reads the DataStructure from a `.dream3d` HDF5 file), but omits the most important behavior: selective/partial import. + - **Completeness:** Missing partial-import behavior, merge-into-current-DataStructure and name-collision behavior, pipeline-metadata read. Lacks the "Group (Subgroup)" header other docs carry. No Required Input Sources statement. + - **Accessibility:** ".dream3d", "HDF5", "legacy" used without a one-line gloss. + - **Figures Needed:** None. + - **Real-World Viz:** Screenshot of the import-data tree selector showing partial-import checkboxes. + - **Units Clarity:** N/A. + - **Concept Links:** `.dream3d` file, HDF5, DataStructure import, partial import, legacy SIMPL vs NX format + - **Changes Made:** Added the missing Group header (IO (Input)) and the key selective/partial-import behavior; explained imported objects merge into the current **DataStructure** at their paths (overwrite on collision) and that pipeline metadata may be read. Glossed .dream3d/HDF5/'legacy'; added Required Input Sources (None) and the standard footer. + +- [x] **ReadEnsembleInfoFilter** (OrientationAnalysis) + - **Clarity:** Mechanics (format, sections, keys) well laid out with tables and a worked example, but the *purpose* is buried in EBSD jargon. + - **Completeness:** Strong on format/enum tables/phase-numbering caveat. Missing: what an Ensemble attribute matrix is, that this filter creates one, where the output goes; `.ini`/`.txt` are the same format. + - **Accessibility:** Main blocker — Ensemble, Feature, Cell, Crystal Structure, Phase Type, Laue class all undefined. + - **Figures Needed:** None (tables serve well). + - **Real-World Viz:** None high-value. + - **Units Clarity:** N/A (enumerated integer codes, well documented). + - **Concept Links:** Ensemble Info, Ensemble/phase attribute matrix, Crystal Structure / Laue class, Phase Type, Feature vs Cell, ASCII `.ini`/`.txt` + - **Changes Made:** Added a plain-language opening defining *ensemble* = phase and clarifying the filter reads a .ini/.txt file and writes an **Ensemble Attribute Matrix** into an existing Data Container. Added one-line glosses for Crystal Structure and Phase Type before the enum tables; documented downstream statistics consumers; removed the empty Example Pipelines heading. + +- [x] **ReadAngDataFilter** (OrientationAnalysis) + - **Clarity:** Reads a single EDAX/TSL `.ang` into an Image Geometry. Good, but never explains what the imported data MEANS (Euler angles, phases, CI, IQ named but undefined). + - **Completeness:** Field-ordering block useful but raw jargon; does not say phi1/Phi/phi2 ARE the three Euler angles (Bunge). Mask/threshold guidance present. + - **Accessibility:** Heavy undefined jargon (Euler angles, crystal/sample reference frame, Confidence Index, Image Quality, phase, ODF, IPF, hexagonal grid). + - **Figures Needed:** Sample vs crystal reference-frame diagram. + - **Real-World Viz:** IPF map of a freshly imported Small IN100 `.ang` slice. + - **Units Clarity:** Weak — should state `.ang` angles are in radians; step size/origin in microns; reference-frame rotations in degrees. + - **Concept Links:** Euler angles (Bunge), sample/crystal reference frame, confidence index, image quality, phases, IPF/ODF, hex-vs-square grid + - **Changes Made:** Glossed phi1/Phi/phi2 as the three Euler angles; defined crystal/sample reference frames and Confidence Index/Image Quality. Fixed 'he following'; converted the Hex-Grid `{ref}` and the bold-only 'Threshold Objects' to MyST links; fixed the broken 'Ensemble Attribute Matrix' bold; added Downstream Processing and Required Input Sources. + +- [x] **ReadCtfDataFilter** (OrientationAnalysis) + - **Clarity:** Clearly reads an Oxford/HKL `.ctf` into an Image Geometry. Good vendor ID. + - **Completeness:** Good on HKL default transforms, radians/degrees conversion, hexagonal phi2 +30°. Created-array meanings not explained. + - **Accessibility:** Same undefined jargon; hexagonal section highly expert-oriented (flagged as edge case). + - **Figures Needed:** Has Figure 1 (Hexagonal_Axis_Alignment); a reference-frame diagram would still help. + - **Real-World Viz:** IPF map before/after the +30° phi2 correction, or correct-vs-wrong radians/degrees. + - **Units Clarity:** Better than Ang (notes `.ctf` usually degrees, NX expects radians); still missing origin/step-size (microns). + - **Concept Links:** Euler angles, sample/crystal reference frame, radians vs degrees, hexagonal symmetry/Bravais lattice, pole figure/IPF + - **Changes Made:** Fixed the intro broken bold and the mangled Figure 1 caption; marked the hexagonal-alignment section Advanced. Converted `{ref}` and bold-only filter mentions to MyST links; added Downstream Processing (Convert Orientation Representation) and Required Input Sources. + +- [x] **ReadChannel5DataFilter** (OrientationAnalysis) + - **Clarity:** Reads an Oxford Channel 5 `.cpr`/`.crc` pair into an Image Geometry. Uses `ImageGeometry`/`ImageDataContainer` as code, inconsistent with the **Image Geometry** bolding used elsewhere. + - **Completeness:** Mirrors the Ctf doc; good note that `.cpr`/`.crc` angles are radians and that Error=0 marks valid TRUE. Created-array meanings not explained. + - **Accessibility:** Same undefined jargon; hexagonal section copied verbatim and wrongly says "(.ctf) files". + - **Figures Needed:** Has Figure 1; reference-frame diagram still helpful. + - **Real-World Viz:** IPF map of an imported Channel 5 dataset. + - **Units Clarity:** Good on radians; missing origin/step-size (microns). + - **Concept Links:** Euler angles, sample/crystal reference frame, hexagonal symmetry, pole figures, IPF, `.cpr`/`.crc` pair + - **Changes Made:** Fixed the broken bold and caption; corrected the phi2 +30-degree bullet that wrongly referenced '.ctf' to Channel 5 (.cpr/.crc). Standardized code-style 'ImageGeometry' to **Image Geometry**; removed the empty Example Pipelines heading; converted links to MyST and added Required Input Sources. + +- [x] **ReadH5EbsdFilter** (OrientationAnalysis) + - **Clarity:** Good — states it reads a `.h5ebsd` built by *Import Orientation File(s) to H5EBSD*; the UI screenshot + checkbox/slice-subset/transform description is genuinely helpful. The one reader with a real upstream dependency. + - **Completeness:** Strong on transforms, angle representation, slice subsetting, correct-vs-incorrect IPF example. Created-array meanings rely on auto-table (correct). Could note headless parameter equivalents for UI features. + - **Accessibility:** Same domain jargon undefined, but the IF-steel correct/incorrect example is excellent. + - **Figures Needed:** Already has UI + correct/incorrect + Hexagonal alignment figures; a reference-frame concept diagram would still help. + - **Real-World Viz:** Already present (IF-steel IPF maps). + - **Units Clarity:** Reference-frame rotations in degrees OK; lines 42/46 are missing the word "degrees" ("apparent 30 shifts", "add 30 to phi2"). + - **Concept Links:** H5Ebsd intermediate format, Euler angle representation (deg/rad), sample/crystal reference frame, slice stacking/subsetting, hexagonal symmetry, IPF + - **Changes Made:** Added a Required Input Sources section stating the .h5ebsd must be built by [Import Orientation File(s) to H5EBSD](EbsdToH5EbsdFilter.md). Converted the three `{ref}` links to MyST; fixed the truncated '30' -> '30 degrees' (two places) and 'excellant' typo; marked the hexagonal section Advanced; added Downstream Processing. + +- [x] **ReadH5EspritDataFilter** (OrientationAnalysis) + - **Clarity:** Clearly reads a single Bruker Nano Esprit `.h5`; before/after UI screenshots for Z Spacing and scan selection help. + - **Completeness:** Good — documents Z Spacing, multi-scan selection, X/Y Step=0 → 1.0 fallback, recommended rotation filters. "MAD" used without expansion. + - **Accessibility:** Same undefined jargon; "MAD" (Mean Angular Deviation) not expanded. + - **Figures Needed:** Has two UI screenshots; reference-frame diagram would help. + - **Real-World Viz:** IPF map of an imported multi-scan Bruker volume (illustrate Z-stacking). + - **Units Clarity:** Best of the `.h5` readers — Z Spacing "microns between each layer". Origin units not stated. + - **Concept Links:** Euler angles, sample/crystal reference frame, scan/slice (Z) stacking, MAD/image quality, Z spacing (microns), multi-scan files + - **Changes Made:** Expanded MAD -> Mean Angular Deviation on first use; converted all `{ref}` links to MyST; noted the zero-step fallback is 1.0 micron. Fixed the broken bold; added Downstream Processing and Required Input Sources; removed the empty Example Pipelines heading. + +- [x] **ReadH5OimDataFilter** (OrientationAnalysis) + - **Clarity:** Clearly reads an EDAX OIMAnalysis `.h5`. UI screenshots referenced for Z Spacing / scan selection. + - **Completeness:** Good — multi-slice import, the valuable unique "Perform Slice By Slice Transform" caveat, thresholding. Created-array meanings rely on auto-table (correct). + - **Accessibility:** Same undefined jargon; slice-by-slice transform note is clear and practical. + - **Figures Needed:** Two UI screenshots; reference-frame diagram would help. + - **Real-World Viz:** IPF map of imported multi-slice EDAX `.h5` showing the slice-by-slice transform consequence. + - **Units Clarity:** Weaker than Esprit — Z Spacing units (microns) not stated here; origin units absent. + - **Concept Links:** Euler angles, sample/crystal reference frame, slice-by-slice transform, scan/slice stacking, confidence index/image quality, IPF + - **Changes Made:** Stated Z Spacing and Origin units as microns (confirmed from parameters); cross-linked the 'Perform Slice By Slice Transform' mention to Rotate Sample Reference Frame. Converted `{ref}` links to MyST, fixed the broken bold, defined CI/IQ; added Downstream Processing and Required Input Sources; removed the empty Example Pipelines heading. + +- [x] **WriteGBCDTriangleDataFilter** (OrientationAnalysis) + - **Clarity:** Decent — writes per-triangle GBCD info (inward/outward Euler angles, normals, areas) with sample output. A general reader won't know why this matters or what "inward/outward" means. + - **Completeness:** Good example with column legend, but the legend has a numbering bug ("Column 8: surface area" should be Column 10; cols 7-9 are the normal). No parameter explanation, no Required Input Sources. + - **Accessibility:** "GBCD", "Euler angles", "triangle normals", "right/left hand average orientation" undefined. Cites Rohrer without a reference link. + - **Figures Needed:** Boundary-triangle diagram: two grains, their average orientations (left/right), triangle normal, area — maps to the columns. + - **Real-World Viz:** Optional screenshot of a surface mesh colored by feature. + - **Units Clarity:** Euler angles stated as RADIANS (good). Normals are unitless direction cosines — say so. Area units (square microns?) not stated. + - **Concept Links:** GBCD, Euler angles, triangle/surface mesh, feature average orientation, crystal structures + - **Changes Made:** Rewrote the description in plain language (grain boundary, **Triangle Geometry**, Euler angles, normal, area). Fixed the column-legend numbering bug (surface area is column 10, not 8). Stated units (Euler radians, unitless normals, square-micron areas), defined inward/outward (left/right) orientations, added a Rohrer citation, and added Required Input Sources naming each producer. NOTE: the same column-legend bug also exists in the C++ algorithm's emitted file header. + +- [x] **WritePoleFigureFilter** (OrientationAnalysis) + - **Clarity:** Output Options sections clear and well organized, but never defines "pole figure"; "modified Lambert square", "unit circle interpolation", "Laue Class" appear undefined. + - **Completeness:** Good coverage + example images. Missing Required Input Sources. The "In a practical sense…" bullet list (Cell Euler Angles, Phases, Mask; Ensemble Laue Class, Material Names) is effectively a hand-written input-array list — borderline defect; reframe as Required Input Sources. + - **Accessibility:** "pole figure", "Lambert projection/square", "Laue Class", "Ensemble", "stereographic" undefined. No MyST links. + - **Figures Needed:** Conceptual diagram of the stereographic/Lambert projection (3D orientation → 2D unit circle). + - **Real-World Viz:** Already shows colorized vs discrete examples; optionally a labeled example (color bar, hemisphere label, phase name). + - **Units Clarity:** "Lambert Image Size (Pixels)" and output size are pixels — state in prose. Euler angles radians (good). + - **Concept Links:** pole figure, Lambert projection, stereographic projection, Laue class/crystal structure, Ensemble/Feature data, IPF, GBCD + - **Changes Made:** Added a plain-language pole-figure definition and first-use definitions of Lambert/stereographic projection and Laue Class. Converted the hand-written 'In a practical sense' input-array list into a proper Required Input Sources section; stated pixel units for image sizes; matched the doc to the current refactored parameters; kept the example images. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| ReadCSVFile | SimplnxCore | Done | +| ReadStringDataArray | SimplnxCore | Done | +| ReadTextDataArray | SimplnxCore | Done | +| WriteASCIIData | SimplnxCore | Done | +| WriteFeatureDataCSV | SimplnxCore | Done | +| ReadImage | SimplnxCore | Done | +| ReadImageStack | SimplnxCore | Done | +| ReadNIfTIFile | SimplnxCore | Done | +| ReadZeissTxmFile | SimplnxCore | Done | +| ReadBinaryCTNorthstar | SimplnxCore | Done | +| WriteNodesAndElementsFiles | SimplnxCore | Done | +| WriteStlFile | SimplnxCore | Done | +| ReadGrainMapper3D | OrientationAnalysis | Done | +| WriteINLFile | OrientationAnalysis | Done | +| WriteStatsGenOdfAngleFile | OrientationAnalysis | Done | + +- [x] **ReadCSVFileFilter** (SimplnxCore) + - **Changes Made:** Converted the bold-only 'Combine Attribute Arrays' mention to a MyST link; gave the 10 identical image alt-texts unique descriptive alts; added Required Input Sources (None). + +- [x] **ReadStringDataArrayFilter** (SimplnxCore) + - **Changes Made:** Fixed typos 'Created Arra Path' and 'mulplying'; converted the quoted 'Read CSV Filter' to a MyST link; added Required Input Sources (None). + +- [x] **ReadTextDataArrayFilter** (SimplnxCore) + - **Changes Made:** Fixed typos 'Created Arra Path', 'mulplying', 'Componenets'; converted 'Read CSV Filter' to a MyST link; added a descriptive image alt; confirmed via the cpp there is no 'New Line' delimiter option here; added Required Input Sources (None). + +- [x] **WriteASCIIDataFilter** (SimplnxCore) + - **Changes Made:** Cleaned the cluttered Group line to 'IO (Output)'; added a 'Maximum Tuples Per Line' description (units = tuples per row, multiple-files mode); noted inputs are user-selected Data Arrays. + +- [x] **WriteFeatureDataCSVFilter** (SimplnxCore) + - **Changes Made:** Defined **Feature** on first use; explained the leading output line is the total Feature count; added Required Input Sources naming [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) and Compute Feature Neighbor Misorientations. + +- [x] **ReadImageFilter** (SimplnxCore) + - **Changes Made:** Added an up-front 'single 2D image' note with a link to the stack reader; stated Origin/Spacing units; added Required Input Sources (None). + +- [x] **ReadImageStackFilter** (SimplnxCore) + - **Changes Made:** Fixed the title to match humanName 'Read Images [3D Stack]'; converted the bold Read Image mention to a MyST link; added a 'File List and Slice Ordering' subsection; defined the luminosity algorithm; stated spacing/origin units; added Required Input Sources (None). + +- [x] **ReadNIfTIFileFilter** (SimplnxCore) + - **Changes Made:** Removed the hand-written `## Parameters` table that duplicated the auto-table (kept the Caveats list); added plain-language glosses for sform/qform/pixdim/vox_offset/scl_slope/scl_inter; noted spacing units come from the file (often mm); added Required Input Sources (None). + +- [x] **ReadZeissTxmFileFilter** (SimplnxCore) + - **Changes Made:** Expanded 'xCT' to X-ray computed tomography on first use; stated spacing/origin/units are read from the file and named the created output array; normalized trailing-## headings; added Required Input Sources (None). + +- [x] **ReadBinaryCTNorthstarFilter** (SimplnxCore) + - **Changes Made:** Normalized the Group line to 'IO (Input)'; defined CT on first use; named the created output array; noted the subvolume start/end are zero-based inclusive voxels; added Required Input Sources (None). + +- [x] **WriteNodesAndElementsFilesFilter** (SimplnxCore) + - **Changes Made:** Added Required Input Sources (any node-based geometry from a meshing/geometry-creation filter); fixed the 'requried' typo; stated node coordinates are in the geometry's physical units. + +- [x] **WriteStlFileFilter** (SimplnxCore) + - **Changes Made:** Fixed the 'implict' typo; clarified the 2-component Features array holds the two Feature IDs on either side of each triangle; noted vertex coordinates are in the Triangle Geometry's units; added Required Input Sources (Triangle Geometry + Face Labels). + +- [x] **ReadGrainMapper3DFilter** (OrientationAnalysis) + - **Changes Made:** Added a GrainMapper3D/XNovo LabDCT gloss; clarified the two IPF-color options; added a millimeters-vs-microns downstream caveat; added Required Input Sources (None). + +- [x] **WriteINLFileFilter** (OrientationAnalysis) + - **Changes Made:** Annotated the output columns with explicit units (Euler radians, positions/step sizes microns); explained the Symmetry column holds crystal-symmetry codes (43 = cubic m-3m, 62 = hexagonal); added Required Input Sources. + +- [x] **WriteStatsGenOdfAngleFileFilter** (OrientationAnalysis) + - **Changes Made:** Expanded ODF to Orientation Distribution Function on first use; fixed 'can not' -> 'cannot'; noted weight and sigma are dimensionless; added Required Input Sources (Euler angles from an EBSD reader; optional Mask from Multi-Threshold Objects). + +### Tier 4 — Adequate + +| Filter | Plugin | Status | +|--------|--------|--------| +| ReadRawBinary | SimplnxCore | Done (minor) | +| WriteImage | SimplnxCore | Done (minor) | +| WriteDREAM3D | SimplnxCore | Done (minor) | + +- [x] **ReadRawBinaryFilter** (SimplnxCore) + - **Changes Made:** Added a 'Required Input Sources: None' note. No other changes — the doc was already a model for the batch. + +- [x] **WriteImageFilter** (SimplnxCore) + - **Changes Made:** Added a Required Input Sources section naming the image readers / image-processing producers. No other changes — already publication-ready. + +- [x] **WriteDREAM3DFilter** (SimplnxCore) + - **Changes Made:** Added the missing Group (Subgroup) header and a Required Input Sources note (none; overwrites existing file). No other changes — already thorough. + +## Batch 8: Image Processing / ITK Wrappers + +**Plugin:** ITKImageProcessing +**Filters:** 88 (ITK-wrapped image-processing filters) + +> Triaged 2026-06-11. Tier split: T1=14, T2=45, T3=26, T4=3. These descriptions were lifted from ITK; the guiding question is whether a general engineer can understand the filter and set its parameters WITHOUT reading ITK's Doxygen. User decisions: trivial intensity ops get minimal-clean treatment; Required Input Sources is a light generic note (ITK inputs are generic scalar images). +> +> **Recurring ITK defects to sweep:** stale `## DREAM3D Mailing Lists` footer (~17 docs); raw Doxygen math `\f[ \f]`/`\f$ \f$` (BinaryThreshold, RescaleIntensity, Normalize, CurvatureFlow, MinMaxCurvatureFlow); mangled `.* ClassName`/`\sa`/`\li` See-Also artifacts dumped inline (pervasive); C++/developer symbols (`itk::`, `NumericTraits<>`, 'templated over', `Set*()` methods, `m_*`); hand-duplicated parameter tables missing the auto-table marker (IsoContourDistance, GradientMagnitudeRecursiveGaussian, ImportFijiMontage, ThresholdMaximumConnectedComponents). +> +> **Bugs / mismatches found:** ITKGrayscaleErode says 'Erosion takes the maximum' (should be minimum); ITKExpNegative describes a user-provided constant K the filter does not expose; ITKLog has no description text; ITKThreshold lists Above/Below/Outside methods not exposed as params; ITKAdaptiveHistogramEqualization prose may describe alpha/beta that are not exposed — all to verify against the cpp during rewrite. +> +> **Shared concepts to author once and reuse:** morphology (erosion/dilation/opening/closing + the structuring element / kernel radius in pixels); projection-along-an-axis (Projection Dimension); connectivity (Fully Connected = face-only vs face+edge+vertex); distance maps (signed = inside negative; squared-distance and use-image-spacing toggles). **Naming collisions:** ITK Read Image / Read Images [3D Stack] vs the SimplnxCore filters of the same human name — disambiguate and cross-link. + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| ITKCurvatureAnisotropicDiffusionImageFilter | ITKImageProcessing | Done | +| ITKGradientAnisotropicDiffusionImageFilter | ITKImageProcessing | Done | +| ITKCurvatureFlowImageFilter | ITKImageProcessing | Done | +| ITKMinMaxCurvatureFlowImageFilter | ITKImageProcessing | Done | +| ITKBinaryOpeningByReconstructionImageFilter | ITKImageProcessing | Done | +| ITKBinaryThinningImageFilter | ITKImageProcessing | Done | +| ITKMorphologicalGradientImageFilter | ITKImageProcessing | Done | +| ITKClosingByReconstructionImageFilter | ITKImageProcessing | Done | +| ITKOpeningByReconstructionImageFilter | ITKImageProcessing | Done | +| ITKBinaryThresholdImageFilter | ITKImageProcessing | Done | +| ITKDoubleThresholdImageFilter | ITKImageProcessing | Done | +| ITKIsoContourDistanceImageFilter | ITKImageProcessing | Done | +| ITKMorphologicalWatershedImageFilter | ITKImageProcessing | Done | +| ITKMorphologicalWatershedFromMarkersImageFilter | ITKImageProcessing | Done | + +- [x] **ITKCurvatureAnisotropicDiffusionImageFilter** (ITKImageProcessing) + - **Changes Made:** Added a plain-language 'what is anisotropic diffusion' lead and an MCDE note; stripped itk:: symbols; documented the previously-undocumented Conductance Scaling Update Interval; kept the TimeStep/Conductance/Iterations guidance with stability values; fixed the stale footer; cleaned the See-Also. + +- [x] **ITKGradientAnisotropicDiffusionImageFilter** (ITKImageProcessing) + - **Changes Made:** Added a plain-language Perona-Malik / edge-stopping lead; stripped itk:: symbols and fixed the copy-paste 'CurvatureND' reference; documented Conductance Scaling Update Interval; promoted the bare URLs to a See-Also; fixed the stale footer. + +- [x] **ITKCurvatureFlowImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced the raw Doxygen math with a plain contour-curvature explanation; trimmed the solver-internals/padding paragraphs; added a concrete TimeStep typical value; fixed the stale footer; kept the Sethian reference. + +- [x] **ITKMinMaxCurvatureFlowImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced ALL raw Doxygen math with a plain explanation of the min/max scale switch; defined Stencil Radius in pixels with a typical value; added TimeStep/iterations guidance; fixed the stale footer. + +- [x] **ITKBinaryOpeningByReconstructionImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined reconstruction and the shape-preservation advantage over plain opening; fixed the \sa run-on; stated Kernel Radius in pixels and defined Foreground/Background/Fully Connected; kept the figure and Kernel Type table; light Required Input Sources note. + +- [x] **ITKBinaryThinningImageFilter** (ITKImageProcessing) + - **Changes Made:** Removed the 'parameterized over...' and 'To do: Make this filter ND.*' fragments; defined skeleton/medial axis and restated the 2D-only behavior as a plain caveat; light Required Input Sources note; kept the Gonzalez/Woods reference. + +- [x] **ITKMorphologicalGradientImageFilter** (ITKImageProcessing) + - **Changes Made:** Rewrote the description from scratch: morphological gradient = dilation - erosion = edge magnitude; stripped the ITK boilerplate/cross-ref tail; stated Kernel Radius in pixels; kept the Kernel Type table. + +- [x] **ITKClosingByReconstructionImageFilter** (ITKImageProcessing) + - **Changes Made:** Fixed the garbled 'levels raises' and broken PreserveIntensities sentences; defined Preserve Intensities and Fully Connected; stated Kernel Radius in pixels; explained the reconstruction concept; kept the Soille reference. + +- [x] **ITKOpeningByReconstructionImageFilter** (ITKImageProcessing) + - **Changes Made:** As with Closing-by-Reconstruction: fixed the garbled sentences, defined Preserve Intensities + Fully Connected, stated Kernel Radius in pixels, explained reconstruction. + +- [x] **ITKBinaryThresholdImageFilter** (ITKImageProcessing) + - **Changes Made:** Converted the raw Doxygen \f[...\f] piecewise math to a MyST $$ block; stripped NumericTraits/'templated over' text; stated Lower/Upper are in intensity units (usually set only one) and Inside/Outside are uint8 labels; kept the figure. + +- [x] **ITKDoubleThresholdImageFilter** (ITKImageProcessing) + - **Changes Made:** Mapped Threshold1-4 to the narrow (T2-T3) inside wide (T1-T4) hysteresis ranges with the ordering requirement and intensity units; removed the broken ITK See-Also bullets; defined Fully Connected; fixed the stale footer. + +- [x] **ITKIsoContourDistanceImageFilter** (ITKImageProcessing) + - **Changes Made:** Led with a plain definition (for a level-set/signed image, the distance from near-contour pixels to the zero contour); defined level set/iso-contour/narrowband; DELETED the hand-written Parameters/Required/Created tables and ADDED the auto-table marker; described Far Value correctly as a clamp distance (default 10) — NOTE the cpp FarValue docstring is a copy-paste bug; fixed the stale footer. + +- [x] **ITKMorphologicalWatershedImageFilter** (ITKImageProcessing) + - **Changes Made:** Led with the terrain/flooding analogy; defined catchment basin and watershed line; documented Level (intensity, over-segmentation control), Mark Watershed Line, Fully Connected; noted the over-segmentation tendency, the Relabel follow-up, and the marker-controlled variant; stripped TOutputImage; kept the Soille/IJ reference. + +- [x] **ITKMorphologicalWatershedFromMarkersImageFilter** (ITKImageProcessing) + - **Changes Made:** Removed the redundant title parenthetical; led with the marker-controlled watershed concept; documented Mark Watershed Line and Fully Connected; added a prominent note that the NX wrapper currently exposes only a single input array (no separate marker-image parameter) — flagged for verification; fixed the malformed See-Also and stale footer. + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| ITKSigmoidImageFilter | ITKImageProcessing | Done | +| ITKIntensityWindowingImageFilter | ITKImageProcessing | Done | +| ITKRescaleIntensityImageFilter | ITKImageProcessing | Done | +| ITKDiscreteGaussianImageFilter | ITKImageProcessing | Done | +| ITKSmoothingRecursiveGaussianImageFilter | ITKImageProcessing | Done | +| ITKMedianImageFilter | ITKImageProcessing | Done | +| ITKAdaptiveHistogramEqualizationImageFilter | ITKImageProcessing | Done | +| ITKBinaryDilateImageFilter | ITKImageProcessing | Done | +| ITKBinaryErodeImageFilter | ITKImageProcessing | Done | +| ITKBinaryMorphologicalClosingImageFilter | ITKImageProcessing | Done | +| ITKBinaryMorphologicalOpeningImageFilter | ITKImageProcessing | Done | +| ITKBinaryContourImageFilter | ITKImageProcessing | Done | +| ITKDilateObjectMorphologyImageFilter | ITKImageProcessing | Done | +| ITKErodeObjectMorphologyImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleDilateImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleErodeImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleMorphologicalClosingImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleMorphologicalOpeningImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleFillholeImageFilter | ITKImageProcessing | Done | +| ITKGrayscaleGrindPeakImageFilter | ITKImageProcessing | Done | +| ITKBlackTopHatImageFilter | ITKImageProcessing | Done | +| ITKWhiteTopHatImageFilter | ITKImageProcessing | Done | +| ITKThresholdImageFilter | ITKImageProcessing | Done | +| ITKOtsuMultipleThresholdsImageFilter | ITKImageProcessing | Done | +| ITKThresholdMaximumConnectedComponentsImageFilter | ITKImageProcessing | Done | +| ITKHConvexImageFilter | ITKImageProcessing | Done | +| ITKHMaximaImageFilter | ITKImageProcessing | Done | +| ITKHMinimaImageFilter | ITKImageProcessing | Done | +| ITKApproximateSignedDistanceMapImageFilter | ITKImageProcessing | Done | +| ITKDanielssonDistanceMapImageFilter | ITKImageProcessing | Done | +| ITKSignedDanielssonDistanceMapImageFilter | ITKImageProcessing | Done | +| ITKSignedMaurerDistanceMapImageFilter | ITKImageProcessing | Done | +| ITKGradientMagnitudeRecursiveGaussianImageFilter | ITKImageProcessing | Done | +| ITKZeroCrossingImageFilter | ITKImageProcessing | Done | +| ITKConnectedComponentImageFilter | ITKImageProcessing | Done | +| ITKRelabelComponentImageFilter | ITKImageProcessing | Done | +| ITKLabelContourImageFilter | ITKImageProcessing | Done | +| ITKMaximumProjectionImageFilter | ITKImageProcessing | Done | +| ITKMeanProjectionImageFilter | ITKImageProcessing | Done | +| ITKMedianProjectionImageFilter | ITKImageProcessing | Done | +| ITKMinimumProjectionImageFilter | ITKImageProcessing | Done | +| ITKStandardDeviationProjectionImageFilter | ITKImageProcessing | Done | +| ITKSumProjectionImageFilter | ITKImageProcessing | Done | +| ITKBinaryProjectionImageFilter | ITKImageProcessing | Done | +| ITKImportFijiMontageFilter | ITKImageProcessing | Done | + +- [x] **ITKSigmoidImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined the sigmoid S-curve remap with MyST math; documented Alpha (transition width), Beta (center), Output Min/Max; light Required Input Sources. + +- [x] **ITKIntensityWindowingImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined the window/level remap; fixed the mangled See-Also fragment and 'RealType'; stated all four params in intensity units. + +- [x] **ITKRescaleIntensityImageFilter** (ITKImageProcessing) + - **Changes Made:** Converted the Doxygen formula to MyST; clarified only Output Min/Max are user-set (input auto-detected); fixed the mangled See-Also. + +- [x] **ITKDiscreteGaussianImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined Gaussian blur; clarified Variance = sigma^2 with units (px^2 / physical^2); documented MaximumKernelWidth/MaximumError/UseImageSpacing; removed the ITK artifact + class list. + +- [x] **ITKSmoothingRecursiveGaussianImageFilter** (ITKImageProcessing) + - **Changes Made:** Led with the constant-time-vs-sigma advantage; Sigma units; explained Normalize Across Scale; fixed the stale footer and stray '|'. + +- [x] **ITKMedianImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined the median filter (salt-and-pepper removal, edge-preserving); Radius in pixels (window 2r+1); removed the operator<()/class-list artifact. + +- [x] **ITKAdaptiveHistogramEqualizationImageFilter** (ITKImageProcessing) + - **Changes Made:** Confirmed alpha/beta ARE exposed in the cpp; added pixels unit to Radius; documented alpha/beta/window; light Required Input Sources. + +- [x] **ITKBinaryDilateImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined dilation (grows foreground); documented Foreground/Background/BoundaryToForeground and Kernel Radius (pixels); stripped C++ symbols + See-Also run-on; cross-linked siblings. + +- [x] **ITKBinaryErodeImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined erosion (shrinks foreground; eroded->Background); replaced the NonpositiveMin() wording; Kernel Radius (pixels); cross-linked siblings. + +- [x] **ITKBinaryMorphologicalClosingImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined closing = dilate-then-erode (fills small holes); Foreground Value, Kernel Radius (pixels), Safe Border; stripped ITK Related-Filters; cross-linked siblings. + +- [x] **ITKBinaryMorphologicalOpeningImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined opening = erode-then-dilate (removes small specks); fixed 'Dilatation'; Foreground/Background, Kernel Radius (pixels); cross-linked siblings. + +- [x] **ITKBinaryContourImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined object-outline extraction; Foreground/Background values and Fully Connected (On=thicker); replaced SetFullyConnected(); cross-linked Label Contour. + +- [x] **ITKDilateObjectMorphologyImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined single-object dilation; Object Value + Kernel Radius (pixels); fixed the See-Also run-on; noted the distinction from Binary Dilate. + +- [x] **ITKErodeObjectMorphologyImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined single-object erosion; Object Value/Background Value + Kernel Radius (pixels); fixed the See-Also run-on; noted the distinction from Binary Erode. + +- [x] **ITKGrayscaleDilateImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined grayscale dilation = local max filter; Kernel Radius (pixels); stripped the ITK cross-ref tail. + +- [x] **ITKGrayscaleErodeImageFilter** (ITKImageProcessing) + - **Changes Made:** FIXED the factual error (erosion is the minimum, not maximum); defined grayscale erosion = local min; Kernel Radius (pixels); stripped the ITK tail. + +- [x] **ITKGrayscaleMorphologicalClosingImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined grayscale closing = dilate-then-erode (removes small dark features); Kernel Radius (pixels), Safe Border; stripped the mismatched ITK tail. + +- [x] **ITKGrayscaleMorphologicalOpeningImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined grayscale opening = erode-then-dilate (removes small bright features); Kernel Radius (pixels), Safe Border; stripped the ITK tail. + +- [x] **ITKGrayscaleFillholeImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined hole-filling (enclosed dark minima); documented Fully Connected; trimmed the geodesic-implementation noise; kept the Soille reference. + +- [x] **ITKGrayscaleGrindPeakImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined peak-removal (enclosed bright maxima; dual of Fillhole); documented Fully Connected; trimmed/fixed the geodesic implementation paragraph. + +- [x] **ITKBlackTopHatImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined black top-hat = closing minus image (small dark detail); Kernel Radius (pixels) tied to feature scale, Safe Border; removed the empty Related Filters heading. + +- [x] **ITKWhiteTopHatImageFilter** (ITKImageProcessing) + - **Changes Made:** Added a real description (image minus opening = small bright detail); Kernel Radius (pixels), Safe Border; removed the empty Related Filters heading. + +- [x] **ITKThresholdImageFilter** (ITKImageProcessing) + - **Changes Made:** Removed the phantom ThresholdAbove/Below/Outside method list; rewrote to the actual Lower/Upper/OutsideValue params (out-of-range -> OutsideValue, in-range kept); intensity units; contrasted with Binary Threshold. + +- [x] **ITKOtsuMultipleThresholdsImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined Otsu (automatic variance-maximizing thresholds; N+1-class label map); removed ITK class/setter/test names and fixed the mangled run-on; per-param guidance (thresholds/bins/offset/valley emphasis/bin midpoint). + +- [x] **ITKThresholdMaximumConnectedComponentsImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined the topological auto-threshold (maximizes object count above a minimum size); removed debug/ITK-method text, the broken sentence, and the personal-email block; fixed the stale footer; documented UpperBoundary/MinimumObjectSizeInPixels/Inside/Outside; replaced the hand Parameters prose. + +- [x] **ITKHConvexImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined h-convex (extracts peaks rising more than h above background); Height in intensity units, FullyConnected; stripped the mangled See-Also tail. + +- [x] **ITKHMaximaImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined h-maxima (suppresses maxima shallower than h); Height in intensity units; removed SetHeight + the mangled See-Also; cross-linked H Convex/H Minima. + +- [x] **ITKHMinimaImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined h-minima (fills minima shallower than h); Height + FullyConnected; stripped the mangled See-Also; replaced the non-NX HConcave reference. + +- [x] **ITKApproximateSignedDistanceMapImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined signed distance map (inside negative) via Chamfer approximation (pixels); concrete Inside/Outside Value example; demoted ITK siblings to See Also; fixed the stale footer. + +- [x] **ITKDanielssonDistanceMapImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined distance map + Voronoi partition + offset-vector outputs in lay terms; documented Input Is Binary / Squared Distance / Use Image Spacing (pixels vs physical); stripped itk::Offset/'4SED'; fixed the stale footer. + +- [x] **ITKSignedDanielssonDistanceMapImageFilter** (ITKImageProcessing) + - **Changes Made:** Stripped the \li markup and the 'parameterized over' text; fixed the broken ITK link; documented Inside Is Positive / Squared Distance / Use Image Spacing; fixed the stale footer. + +- [x] **ITKSignedMaurerDistanceMapImageFilter** (ITKImageProcessing) + - **Changes Made:** Trimmed the C++ type discussion; prominently flagged that Squared Distance defaults TRUE; documented Use Image Spacing / Background Value; fixed run-in sub-headers; kept the Maurer reference. + +- [x] **ITKGradientMagnitudeRecursiveGaussianImageFilter** (ITKImageProcessing) + - **Changes Made:** DELETED the hand Parameters/Required/Created tables and ADDED the missing auto-table marker; defined gradient magnitude (edge strength); emphasized Sigma is in image-spacing (physical) units; rewrote Normalize Across Scale; fixed the stale footer. + +- [x] **ITKZeroCrossingImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined zero-crossing edge detection on a signed input; stripped itk::/operator/NumericTraits text; restated the Foreground/Background label params; Required Input Sources = a signed (Laplacian-of-Gaussian) image; fixed the stale footer. + +- [x] **ITKConnectedComponentImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined connected components / label image; documented Fully Connected (+1-pixel note); noted the Relabel Component follow-up; stripped ITK method names + the useless See-Also; fixed the stale footer. + +- [x] **ITKRelabelComponentImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined relabel (consecutive, size-sorted; optional minimum size); documented Minimum Object Size in pixels and SortByObjectSize; stripped ITK method names + the InPlace paragraph + the mangled See-Also; Required Input Sources = a label image. + +- [x] **ITKLabelContourImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined label-region outline extraction; documented Background Value + Fully Connected (thicker-contours note); stripped SetFullyConnected(); moved the Insight-Journal URL to See Also; Required Input Sources = a label image. + +- [x] **ITKMaximumProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Added the shared projection concept (3D->2D, maximum along an axis); documented Projection Dimension (axis index) + Perform In-Place + the dimensionality note; trimmed the Doxygen See-Also. + +- [x] **ITKMeanProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Shared projection concept (mean along an axis); cross-linked Median for outlier sensitivity; removed the stray title parenthetical; trimmed the See-Also. + +- [x] **ITKMedianProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Shared projection concept (median along an axis; outlier-robust vs mean); removed the stray title parenthetical; trimmed the See-Also. + +- [x] **ITKMinimumProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Shared projection concept (minimum along an axis; dark-feature counterpart); removed the stray title parenthetical; trimmed the See-Also. + +- [x] **ITKStandardDeviationProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Shared projection concept (standard deviation along an axis; highlights variability); fixed the stale footer; deduped the See-Also. + +- [x] **ITKSumProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Shared projection concept (sum along an axis); added an overflow/data-type caution; fixed the stale footer; deduped the See-Also. + +- [x] **ITKBinaryProjectionImageFilter** (ITKImageProcessing) + - **Changes Made:** Refined the projection text; documented the logical-OR rule, Foreground/Background Value, Projection Dimension, Perform In-Place; deduped Related Filters; removed the ITK Doxygen link list. + +- [x] **ITKImportFijiMontageFilter** (ITKImageProcessing) + - **Changes Made:** Title matches humanName 'Read Fiji Montage (ITK)'; rewrote the output description in current DataStructure terms (per the cpp: per-tile Image Geometry -> Cell Attribute Matrix -> Image array); removed the hand-listed Length Unit / Output Data Type enums; fixed typos; replaced the stale Google-Groups footer; corrected the false 'same name' claim. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| ITKAbsImageFilter | ITKImageProcessing | Done | +| ITKAcosImageFilter | ITKImageProcessing | Done | +| ITKAsinImageFilter | ITKImageProcessing | Done | +| ITKAtanImageFilter | ITKImageProcessing | Done | +| ITKCosImageFilter | ITKImageProcessing | Done | +| ITKSinImageFilter | ITKImageProcessing | Done | +| ITKTanImageFilter | ITKImageProcessing | Done | +| ITKExpImageFilter | ITKImageProcessing | Done | +| ITKExpNegativeImageFilter | ITKImageProcessing | Done | +| ITKLogImageFilter | ITKImageProcessing | Done | +| ITKLog10ImageFilter | ITKImageProcessing | Done | +| ITKSqrtImageFilter | ITKImageProcessing | Done | +| ITKNotImageFilter | ITKImageProcessing | Done | +| ITKInvertIntensityImageFilter | ITKImageProcessing | Done | +| ITKBoundedReciprocalImageFilter | ITKImageProcessing | Done | +| ITKNormalizeImageFilter | ITKImageProcessing | Done | +| ITKNormalizeToConstantImageFilter | ITKImageProcessing | Done | +| ITKRegionalMaximaImageFilter | ITKImageProcessing | Done | +| ITKRegionalMinimaImageFilter | ITKImageProcessing | Done | +| ITKValuedRegionalMaximaImageFilter | ITKImageProcessing | Done | +| ITKValuedRegionalMinimaImageFilter | ITKImageProcessing | Done | +| ITKGradientMagnitudeImageFilter | ITKImageProcessing | Done | +| ITKLaplacianRecursiveGaussianImageFilter | ITKImageProcessing | Done | +| ITKMaskImageFilter | ITKImageProcessing | Done | +| ITKImageReaderFilter | ITKImageProcessing | Done | +| ITKMhaFileReaderFilter | ITKImageProcessing | Done | + +- [x] **ITKAbsImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced the 'itk::Math::abs()' line with a plain one-sentence description (absolute value / magnitude). + +- [x] **ITKAcosImageFilter** (ITKImageProcessing) + - **Changes Made:** Collapsed the templating/cast boilerplate to one sentence: arccosine; input [-1,1]; output in radians. + +- [x] **ITKAsinImageFilter** (ITKImageProcessing) + - **Changes Made:** One sentence: arcsine; input [-1,1]; output in radians. + +- [x] **ITKAtanImageFilter** (ITKImageProcessing) + - **Changes Made:** One sentence: arctangent; output in radians. + +- [x] **ITKCosImageFilter** (ITKImageProcessing) + - **Changes Made:** One sentence: cosine; values interpreted as radians; output [-1,1]. + +- [x] **ITKSinImageFilter** (ITKImageProcessing) + - **Changes Made:** Reworded to plain 'sine (values in radians)'; dropped std::sin; kept the figure. + +- [x] **ITKTanImageFilter** (ITKImageProcessing) + - **Changes Made:** Reworded to plain 'tangent (values in radians)'; dropped std::tan. + +- [x] **ITKExpImageFilter** (ITKImageProcessing) + - **Changes Made:** Reworded to 'natural exponential e^pixel'; dropped std::exp. + +- [x] **ITKExpNegativeImageFilter** (ITKImageProcessing) + - **Changes Made:** Verified NO K parameter is exposed (functor default-constructed, K fixed at 1); corrected the summary and description to exp(-x) instead of the phantom 'user-provided constant K'. + +- [x] **ITKLogImageFilter** (ITKImageProcessing) + - **Changes Made:** Added the missing description sentence (natural logarithm; input must be > 0); kept the figure. + +- [x] **ITKLog10ImageFilter** (ITKImageProcessing) + - **Changes Made:** Reworded to 'base-10 logarithm; input must be > 0'; dropped std::log10. + +- [x] **ITKSqrtImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced the std::sqrt line with a plain description (square root; non-negative input). + +- [x] **ITKNotImageFilter** (ITKImageProcessing) + - **Changes Made:** Removed the templated/bool text and the raw C++ code block + m_* symbols; plain description (integer image; 0->Foreground, non-zero->Background). + +- [x] **ITKInvertIntensityImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced 'SetMaximum' with plain Maximum-minus-pixel guidance (set Maximum to the largest intensity, e.g. 255 for 8-bit); trimmed ITK Author/Related-Filters. + +- [x] **ITKBoundedReciprocalImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced the dimension/scalar-type sentence with the 1/(1+x) description (bounded (0,1] for non-negative input). + +- [x] **ITKNormalizeImageFilter** (ITKImageProcessing) + - **Changes Made:** Converted the Doxygen $-sigma$/$+sigma$ to MyST math; removed the mangled See-Also fragment and internal class names; kept the integral-type caveat. + +- [x] **ITKNormalizeToConstantImageFilter** (ITKImageProcessing) + - **Changes Made:** Dropped the redundant title parenthetical; replaced 'SetConstant()' with the Constant parameter (dimensionless target sum, default 1); fixed the stale footer. + +- [x] **ITKRegionalMaximaImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined regional maxima; documented Flat Is Maxima + Fully Connected; noted Background/Foreground are output labels; fixed the stale footer; dropped ITK Author/See-Also. + +- [x] **ITKRegionalMinimaImageFilter** (ITKImageProcessing) + - **Changes Made:** Defined regional minima; de-duplicated the repeated author block; documented Flat Is Minima + Fully Connected; fixed the stale footer; dropped the non-NX HConcave See-Also. + +- [x] **ITKValuedRegionalMaximaImageFilter** (ITKImageProcessing) + - **Changes Made:** Moved the connectivity paragraph into the Description; trimmed the non-NX Related Filters; kept the FullyConnected explanation; added Required Input Sources. + +- [x] **ITKValuedRegionalMinimaImageFilter** (ITKImageProcessing) + - **Changes Made:** Added the FullyConnected/connectivity explanation (mirroring the Maxima doc); tidied the Related Filters run-on; dropped the non-NX entries. + +- [x] **ITKGradientMagnitudeImageFilter** (ITKImageProcessing) + - **Changes Made:** Replaced the duplicated description with a one-sentence gradient-magnitude definition + the noise-sensitivity contrast vs the Recursive Gaussian variant; removed the meaningless ITK building-block Related-Filters list. + +- [x] **ITKLaplacianRecursiveGaussianImageFilter** (ITKImageProcessing) + - **Changes Made:** Added the Laplacian-of-Gaussian definition + the Zero Crossing follow-up link; documented Sigma (image-spacing units) and Normalize Across Scale; fixed the stale footer. + +- [x] **ITKMaskImageFilter** (ITKImageProcessing) + - **Changes Made:** Rewrote the Description as plain prose (dropped 'templated over', the diff-marked code block, Wiki-Examples cruft); documented Outside Value; fixed the stale footer; kept the figure. + +- [x] **ITKImageReaderFilter** (ITKImageProcessing) + - **Changes Made:** Dropped the 'directly wraps an ITK filter' boilerplate; added a note distinguishing it from the SimplnxCore Read Image filter (same human name) + cross-link. (humanName: Read Image (ITK)) + +- [x] **ITKMhaFileReaderFilter** (ITKImageProcessing) + - **Changes Made:** Fixed the typos; added a cross-link to Read Image (ITK) noting this variant handles the embedded transform; trimmed the orthogonal-matrix Technical Discussion. + +### Tier 4 — Adequate + +| Filter | Plugin | Status | +|--------|--------|--------| +| ITKSquareImageFilter | ITKImageProcessing | Done | +| ITKImageWriterFilter | ITKImageProcessing | Done | +| ITKImportImageStackFilter | ITKImageProcessing | Done | + +- [x] **ITKSquareImageFilter** (ITKImageProcessing) + - **Changes Made:** Added the missing one-sentence description ('square of each pixel'). Otherwise adequate. + +- [x] **ITKImageWriterFilter** (ITKImageProcessing) + - **Changes Made:** No change needed — already clean and complete (humanName: Write Image (ITK)). + +- [x] **ITKImportImageStackFilter** (ITKImageProcessing) + - **Changes Made:** Dropped the 'directly wraps' boilerplate; added a note distinguishing it from the SimplnxCore Read Images [3D Stack] filter + cross-link. Otherwise adequate. (humanName: Read Images [3D Stack] (ITK)) + +## Batch 9: Remaining SimplnxCore Filters + +**Plugin:** SimplnxCore +**Filters:** 73 (catch-all for SimplnxCore filters not covered by Batches 1-7; the ITK plugin is Batch 8, deferred) + +> Triaged 2026-06-11. Tier split: T1=4, T2=35, T3=31, T4=3. Rewrites will be committed per tier (Tier 2 split into sub-theme sub-commits given its size). Recurring defects flagged: hand-duplicated parameter tables (HierarchicalSmooth; CreatePythonSkeleton — also missing the marker), a legacy `@ref` directive (ComputeBoundingBoxStats), Doxygen math/`@image` artifacts (Silhouette, FeatureFaceCurvature, PointSampleTriangleGeometry), legacy 'Data Container' wording (NearestPointFuseRegularGrids, RemoveFlaggedVertices, ExtractInternalSurfaces), and many bold-only filter mentions. + +### Tier 1 — Critical + +| Filter | Plugin | Status | +|--------|--------|--------| +| FlyingEdges3D | SimplnxCore | Done | +| TriangleDihedralAngle | SimplnxCore | Done | +| NearestPointFuseRegularGrids | SimplnxCore | Done | +| PointSampleEdgeGeometry | SimplnxCore | Done | + +- [x] **FlyingEdges3DFilter** (SimplnxCore) + - **Changes Made:** Expanded the one-sentence stub: added 'What is an Isosurface?' (contour-line analogy, isovalue), noted Flying Edges is a fast marching-cubes variant, added 'When to Use' contrasting with Surface Nets / Quick Surface Mesh for label maps, documented the Contour Value units (same as the data array) and Required Input Sources (Image Geometry + scalar array). Captioned the figure. + +- [x] **TriangleDihedralAngleFilter** (SimplnxCore) + - **Changes Made:** Replaced the 'matrix mathematics' stub with a plain explanation of the minimum interior angle as a mesh-quality metric (60 deg = equilateral, near-0 deg = sliver). Stated output units are degrees (0-60). Added Required Input Sources (Triangle Geometry from a surface-meshing filter). + +- [x] **NearestPointFuseRegularGridsFilter** (SimplnxCore) + - **Changes Made:** Replaced all legacy 'Data Container' terminology with Image Geometry. Explained Reference (destination) vs Sampling (source) roles, that assignment is by nearest cell-center using each grid's origin/spacing (no interpolation), and that the grids may differ in spacing/extent. Documented the Use Custom Fill Value behavior for out-of-overlap cells. Added Required Input Sources (the two Image Geometries). + +- [x] **PointSampleEdgeGeometryFilter** (SimplnxCore) + - **Changes Made:** Added the missing Group header (Sampling (Geometry)). Defined Edge Geometry, 'scan vector' (an additive-manufacturing laser-path segment), and 'edge ID'. Stated the Sampling Spacing units are millimeters and explained Cumulative Sample Distance. Added Required Input Sources (Edge Geometry from Slice Triangle Geometry / Create AM Scan Paths). + +### Tier 2 — Important + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeArrayStatistics | SimplnxCore | Done | +| ComputeBoundingBoxStats | SimplnxCore | Done | +| ComputeVolumeFractions | SimplnxCore | Done | +| ComputeFeatureClustering | SimplnxCore | Done | +| ComputeBoundaryElementFractions | SimplnxCore | Done | +| ComputeEuclideanDistMap | SimplnxCore | Done | +| ComputeMomentInvariants2D | SimplnxCore | Done | +| ComputeKMeans | SimplnxCore | Done | +| ComputeKMedoids | SimplnxCore | Done | +| Silhouette | SimplnxCore | Done | +| ApproximatePointCloudHull | SimplnxCore | Done | +| MapPointCloudToRegularGrid | SimplnxCore | Done | +| IterativeClosestPoint | SimplnxCore | Done | +| IdentifyDuplicateVertices | SimplnxCore | Done | +| ComputeTriangleAreas | SimplnxCore | Done | +| ComputeTriangleGeomCentroids | SimplnxCore | Done | +| ComputeTriangleGeomVolumes | SimplnxCore | Done | +| TriangleCentroid | SimplnxCore | Done | +| TriangleNormal | SimplnxCore | Done | +| FeatureFaceCurvature | SimplnxCore | Done | +| SharedFeatureFace | SimplnxCore | Done | +| SurfaceNets | SimplnxCore | Done | +| LaplacianSmoothing | SimplnxCore | Done | +| UncertainRegularGridSampleSurfaceMesh | SimplnxCore | Done | +| ExtractInternalSurfacesFromTriangleGeometry | SimplnxCore | Done | +| ReverseTriangleWinding | SimplnxCore | Done | +| VerifyTriangleWinding | SimplnxCore | Done | +| RemoveFlaggedEdges | SimplnxCore | Done | +| RemoveFlaggedTriangles | SimplnxCore | Done | +| CropVertexGeometry | SimplnxCore | Done | +| CombineNodeBasedGeometries | SimplnxCore | Done | +| PointSampleTriangleGeometry | SimplnxCore | Done | +| ExtractFeatureBoundaries2D | SimplnxCore | Done | +| RobustAutomaticThreshold | SimplnxCore | Done | +| ComputeVectorColors | SimplnxCore | Done | + +- [x] **ComputeArrayStatisticsFilter** (SimplnxCore) + - **Changes Made:** Fixed the stale group to 'Statistics'; defined Feature/Ensemble; condensed the redundant Ranges Breakdown Options 1-4; fixed spelling (aproiri/achived/occurance/exisitng); added Required Input Sources (Feature Ids producer). Kept the statistic-type table. + +- [x] **ComputeBoundingBoxStatsFilter** (SimplnxCore) + - **Changes Made:** Converted the legacy @ref directive and the Compute Array Statistics / Compute Feature Bounding Boxes mentions to MyST links; explained the 1-to-many cell-to-box mapping; stated bounds are in physical coordinate units; fixed 'columns'->'tuples'; added Required Input Sources. + +- [x] **ComputeVolumeFractionsFilter** (SimplnxCore) + - **Changes Made:** Reconciled the count-vs-volume-fraction wording (equal-volume cells make them identical); stated output is a per-Ensemble dimensionless fraction in [0,1] summing to 1; added Required Input Sources (Cell Phases); removed the empty Example Pipelines. + +- [x] **ComputeFeatureClusteringFilter** (SimplnxCore) + - **Changes Made:** Defined RDF (normalized histogram of inter-centroid distances) and Ensemble; added when/why (clustering/ordering detection, >1 vs <1 interpretation); stated distances are physical length units; added Required Input Sources (Compute Feature Centroids + Phases). + +- [x] **ComputeBoundaryElementFractionsFilter** (SimplnxCore) + - **Changes Made:** Defined a 'surface element' (one whose Surface Elements input value > 0); stated output is a [0,1] fraction (boundary/total per Feature); added Required Input Sources (Feature Ids + Surface Elements); removed the empty Example Pipelines. + +- [x] **ComputeEuclideanDistMapFilter** (SimplnxCore) + - **Changes Made:** Defined Feature boundary/GB, triple line/TJ, quadruple point/QP; stated the Manhattan output is an integer cell count and the Euclidean output is a physical float distance; added Required Input Sources (Feature Ids). + +- [x] **ComputeMomentInvariants2DFilter** (SimplnxCore) + - **Changes Made:** Added a plain-language definition of 2D moment invariants and what high/low Omega-1/Omega-2 indicate; stated Omega values dimensionless and Z Delta in cells; fixed typos (appllication/particales/'et. al'); fixed the missing newline before the citations; added Required Input Sources (Feature Ids + Feature Rect). + +- [x] **ComputeKMeansFilter** (SimplnxCore) + - **Changes Made:** Defined cluster/centroid/Voronoi tessellation/within-cluster variance; fixed the broken 'Ensemble Attribute Matrix' bold and typos (randomnes, tesselation); added MyST links to Compute K Medoids/DBSCAN/Silhouette and Required Input Sources. + +- [x] **ComputeKMedoidsFilter** (SimplnxCore) + - **Changes Made:** Defined cluster/Voronoi/topology (kept the good medoid definition); fixed the broken bold and typos (randomnes, arbirtary); added MyST links to Compute K Means/DBSCAN/Silhouette and Required Input Sources. + +- [x] **SilhouetteFilter** (SimplnxCore) + - **Changes Made:** Converted the Doxygen math delimiters to MyST $$/$ math; stated the output array location and dimensionless [-1,1] range; added MyST links to Compute K Means/K Medoids and Required Input Sources. + +- [x] **ApproximatePointCloudHullFilter** (SimplnxCore) + - **Changes Made:** Fixed typos (of/or, hve, To/The, 'is able of', 'faster that'); added Parameter Guidance stating grid resolution is in the point cloud's coordinate units and the empty-neighbor threshold is a 0-26 count; added Required Input Sources. + +- [x] **MapPointCloudToRegularGridFilter** (SimplnxCore) + - **Changes Made:** Added a downstream link to Interpolate Point Cloud to Regular Grid; stated Manual-mode dimensions are voxel counts; fixed the uint64-max off-by-one and the 'User may to trace' grammar; added Required Input Sources. + +- [x] **IterativeClosestPointFilter** (SimplnxCore) + - **Changes Made:** Fixed the all-'1.' list to 1-6 and the trailing-period heading; stated the output is a row-major flattened 4x4 transform (translation in coordinate units), reported always but applied only when the apply-transform option is on; cross-linked Apply Transformation to Geometry; added Required Input Sources (two Vertex Geometries). + +- [x] **IdentifyDuplicateVerticesFilter** (SimplnxCore) + - **Changes Made:** Defined 'duplicate' as all-three-coordinate equality within machine epsilon (no user tolerance); reworded the 'visual explanation' claim (the example is text); converted the italic RemoveFlaggedVertices to a MyST link; fixed the 'this filters output' apostrophe. + +- [x] **ComputeTriangleAreasFilter** (SimplnxCore) + - **Changes Made:** Defined Triangle Geometry; added when/why (mesh quality, statistic weighting); stated output area units (length^2); added Required Input Sources. + +- [x] **ComputeTriangleGeomCentroidsFilter** (SimplnxCore) + - **Changes Made:** Defined Feature/Face Labels ('owners')/nodes; stated centroid coordinate units; documented the -1 exterior-label edge case; added Required Input Sources (Triangle Geometry + Face Labels); removed the empty Example Pipelines. + +- [x] **ComputeTriangleGeomVolumesFilter** (SimplnxCore) + - **Changes Made:** Defined Feature/Face Labels/winding; added a watertight-requirement note; stated volume units (length^3); added Required Input Sources (closed Triangle Geometry + Face Labels); removed the empty Example Pipelines. + +- [x] **TriangleCentroidFilter** (SimplnxCore) + - **Changes Made:** Added when/why; stated centroid coordinate units; cross-linked the per-Feature Compute Feature Centroids from Triangle Geometry to disambiguate (this is per-triangle); added Required Input Sources. + +- [x] **TriangleNormalFilter** (SimplnxCore) + - **Changes Made:** Stated the output is a dimensionless unit 3-vector whose direction depends on winding; defined normal/cross-product/winding; fixed 'vertexes'->'vertices'; added Required Input Sources. + +- [x] **FeatureFaceCurvatureFilter** (SimplnxCore) + - **Changes Made:** Removed the stray @image latex Doxygen line; fixed the missing-space bold; replaced the Google-Groups mailing-list footer with the standard DREAM3D-NX Help footer; converted the bold Parameter-Notes filter mentions to a MyST-linked Required Input Sources list; defined curvature; stated units (principal/mean 1/length, Gaussian 1/length^2, directions dimensionless). + +- [x] **SharedFeatureFaceFilter** (SimplnxCore) + - **Changes Made:** Added a prose explanation of the Randomize Face IDs parameter (visualization-only ID permutation); defined Feature/Face Labels/Feature Attribute Matrix; added Required Input Sources (Triangle Geometry + Face Labels). + +- [x] **SurfaceNetsFilter** (SimplnxCore) + - **Changes Made:** Fixed typos (mush/equivelent/Traingle/FaceLables); converted the Verify Triangle Winding and QuickMesh mentions to MyST links; defined isosurface/marching cubes/triple line/winding; stated units (iterations dimensionless, max distance physical length); added Required Input Sources (Image Geometry + Feature Ids); fixed the non-standard footer. + +- [x] **LaplacianSmoothingFilter** (SimplnxCore) + - **Changes Made:** Fixed the corrupted ref [1] author and the malformed Belyaev URL; removed the dangling 'visit the tutorial' line; added alt text to the equation images; cross-linked Hierarchical Smoothing; stated Iteration Steps as a count and lambda/mu as dimensionless; added Required Input Sources (Triangle Geometry + Node Type). + +- [x] **UncertainRegularGridSampleSurfaceMeshFilter** (SimplnxCore) + - **Changes Made:** Defined Cells/rectilinear grid/conformal mesh/Feature; stated uncertainty and resolution/origin values are physical lengths; cross-linked the non-uncertain sibling; added Required Input Sources (Triangle Geometry + Face Labels). + +- [x] **ExtractInternalSurfacesFromTriangleGeometryFilter** (SimplnxCore) + - **Changes Made:** Fixed the two unclosed '**Vertex' bolds; replaced legacy 'Data Container' with 'data group'; added the missing DREAM3D-NX Help footer; cross-linked the Node Type producers (Surface Nets / Quick Surface Mesh); added Required Input Sources. + +- [x] **ReverseTriangleWindingFilter** (SimplnxCore) + - **Changes Made:** Defined 'winding' (vertex ordering that sets normal direction); cross-linked Verify Triangle Winding and Compute Triangle Normals; added Required Input Sources; removed the empty Example Pipelines. + +- [x] **VerifyTriangleWindingFilter** (SimplnxCore) + - **Changes Made:** Converted all bold/italic filter mentions to MyST links; defined 'winding' and 'negative volume'; fixed typos (Traingle/addtionally/preform/untounched/'difference n output'/Zero's/convience); reconciled the group to 'Surface Meshing (Connectivity/Arrangement)'; added Required Input Sources. + +- [x] **RemoveFlaggedEdgesFilter** (SimplnxCore) + - **Changes Made:** Defined Edge Geometry and 'mask'; fixed the group to 'Surface Meshing (Cleanup)'; added Required Input Sources (mask producer); fixed the footer /discussions link. + +- [x] **RemoveFlaggedTrianglesFilter** (SimplnxCore) + - **Changes Made:** Fixed the Vertices->Triangles copy-paste error; defined Triangle Geometry/Face Data/mask; fixed the group to 'Surface Meshing (Cleanup)'; added Required Input Sources; corrected the example-pipeline name. + +- [x] **CropVertexGeometryFilter** (SimplnxCore) + - **Changes Made:** Expanded the thin doc; stated Min/Max are physical coordinates (not cell indices) with inclusive bounds; replaced the stale 'DREAM3D Review (Cropping/Cutting)' group with 'Geometry (Cropping/Cutting)'; cross-linked Crop Edge/Image Geometry; added Required Input Sources and the missing footer. + +- [x] **CombineNodeBasedGeometriesFilter** (SimplnxCore) + - **Changes Made:** Defined node-based and higher/lower-order geometry; clarified vertex-index renumbering and that duplicate vertices are NOT merged; set the group to 'Core (Combining)'; added Required Input Sources. + +- [x] **PointSampleTriangleGeometryFilter** (SimplnxCore) + - **Changes Made:** Added descriptive alt text to the equation PNGs (corrected to the actual barycentric sqrt form); fixed 'beloning'; removed a stale sample-count table that no longer matches the parameter; added a random-sampling/seed note; fixed the stale 'DREAM3D Review (Geometry)' group to 'Sampling (Geometry)'; added Required Input Sources. + +- [x] **ExtractFeatureBoundaries2DFilter** (SimplnxCore) + - **Changes Made:** Defined Feature IDs/Image Geometry/Edge Geometry/overscan; fixed '.d3dpipline'->'.d3dpipeline'; replaced the stale subgroup with 'Surface Meshing (Generation)'; converted bold filter mentions to MyST links; added image alt text and Required Input Sources. + +- [x] **RobustAutomaticThresholdFilter** (SimplnxCore) + - **Changes Made:** Fixed the stale group to 'Threshold'; stated the robust/automatic rationale up front; defined gradient magnitude / 2-norm; replaced the suspect a_i*g_i/g_i equation with a prose weighted-average description; replaced the nonexistent 'Find Derivatives' reference with the real gradient-magnitude producer (ITK Gradient Magnitude Image Filter) as a MyST link and Required Input Sources. + +- [x] **ComputeVectorColorsFilter** (SimplnxCore) + - **Changes Made:** Expanded the description: input is a 3-component float32 vector Cell array, output is uint8 RGB (0-255), each vector is normalized (direction only); documented the mask/bad-voxel behavior; added Required Input Sources. + +### Tier 3 — Polish + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeArrayHistogram | SimplnxCore | Done | +| ComputeArrayHistogramByFeature | SimplnxCore | Done | +| ComputeDifferencesMap | SimplnxCore | Done | +| ComputeNumFeatures | SimplnxCore | Done | +| ComputeSurfaceAreaToVolume | SimplnxCore | Done | +| ComputeFeaturePhases | SimplnxCore | Done | +| ComputeFeaturePhasesBinary | SimplnxCore | Done | +| ComputeFeatureBounds | SimplnxCore | Done | +| ComputeFeatureCentroids | SimplnxCore | Done | +| ComputeFeatureRect | SimplnxCore | Done | +| ComputeLargestCrossSections | SimplnxCore | Done | +| ComputeCoordinateThreshold | SimplnxCore | Done | +| DBSCAN | SimplnxCore | Done | +| InterpolatePointCloudToRegularGrid | SimplnxCore | Done | +| ExtractVertexGeometry | SimplnxCore | Done | +| ComputeVertexToTriangleDistances | SimplnxCore | Done | +| LabelTriangleGeometry | SimplnxCore | Done | +| HierarchicalSmooth | SimplnxCore | Done | +| RegularGridSampleSurfaceMesh | SimplnxCore | Done | +| SliceTriangleGeometry | SimplnxCore | Done | +| RemoveFlaggedVertices | SimplnxCore | Done | +| CropEdgeGeometry | SimplnxCore | Done | +| CombineStlFiles | SimplnxCore | Done | +| MultiThresholdObjects | SimplnxCore | Done | +| CreateColorMap | SimplnxCore | Done | +| ChangeAngleRepresentation | SimplnxCore | Done | +| RandomizeFeatureIds | SimplnxCore | Done | +| ExecuteProcess | SimplnxCore | Done | +| CreatePythonSkeleton | SimplnxCore | Done | +| ExtractPipelineToFile | SimplnxCore | Done | +| CreateAMScanPaths | SimplnxCore | Done | + +- [x] **ComputeArrayHistogramFilter** (SimplnxCore) + - **Changes Made:** Trimmed the long raw 'Old Faithful' data dump; defined 'mode' on first use; stated bin bounds inherit the input array units; added Required Input Sources (None). + +- [x] **ComputeArrayHistogramByFeatureFilter** (SimplnxCore) + - **Changes Made:** Defined Feature/Feature Id; added Required Input Sources (Feature Ids producer); removed the empty Example Pipelines. + +- [x] **ComputeDifferencesMapFilter** (SimplnxCore) + - **Changes Made:** Stated the output inherits the input type/shape/location; added a brief Required Input Sources (None -- generic arrays); removed the empty Example Pipelines. + +- [x] **ComputeNumFeaturesFilter** (SimplnxCore) + - **Changes Made:** Defined Ensemble/phase; stated the output is a per-Ensemble count array; added Required Input Sources (Compute Feature Phases). + +- [x] **ComputeSurfaceAreaToVolumeFilter** (SimplnxCore) + - **Changes Made:** Defined 'aliasing'; stated the ratio units (1/length) and that sphericity is dimensionless; linked Compute Boundary Cells; added Required Input Sources (Feature Ids). + +- [x] **ComputeFeaturePhasesFilter** (SimplnxCore) + - **Changes Made:** Defined Feature/Ensemble/Element; stated the per-Feature phase output; added Required Input Sources (Feature Ids + Cell Phases). + +- [x] **ComputeFeaturePhasesBinaryFilter** (SimplnxCore) + - **Changes Made:** Added a generic non-materials framing; stated the boolean-mask input and binary Ensemble output; added Required Input Sources (Multi-Threshold Objects); removed the empty Example Pipelines. + +- [x] **ComputeFeatureBoundsFilter** (SimplnxCore) + - **Changes Made:** Stated bounds are physical coordinates (not cell indices); fixed the 'Dimesions' typo and the doubled ';;'; defined Feature/Cell; added Required Input Sources (Feature Ids). + +- [x] **ComputeFeatureCentroidsFilter** (SimplnxCore) + - **Changes Made:** Stated centroids are physical coordinates (3-component float32, not pixel indices); defined Feature/Cell; added Required Input Sources (Feature Ids). + +- [x] **ComputeFeatureRectFilter** (SimplnxCore) + - **Changes Made:** Fixed 'This values'->'These values'; clarified Pixel coords are zero-based voxel indices; cross-linked Compute Feature Bounding Boxes; added Required Input Sources. + +- [x] **ComputeLargestCrossSectionsFilter** (SimplnxCore) + - **Changes Made:** Stated the area is square physical units (cellCount x in-plane voxel area, confirmed from the cpp); described the per-feature float32 output; added Required Input Sources (Feature Ids). + +- [x] **ComputeCoordinateThresholdFilter** (SimplnxCore) + - **Changes Made:** Converted the prose Remove Flagged Vertices/Edges/Triangles mentions to MyST links; stated the rectangle min/max and sphere center/radius are physical coordinate units. + +- [x] **DBSCANFilter** (SimplnxCore) + - **Changes Made:** Converted eight bold/quoted inter-filter mentions to MyST links; fixed typos (sqaure_root, preforming/preform, 'vise versa'); added Required Input Sources. + +- [x] **InterpolatePointCloudToRegularGridFilter** (SimplnxCore) + - **Changes Made:** Converted the italic Map Point Cloud to Regular Grid to a MyST link; added Required Input Sources (Vertex Geometry producer). + +- [x] **ExtractVertexGeometryFilter** (SimplnxCore) + - **Changes Made:** Standardized the Rectilinear Grid / Vertex Geometry naming; added Required Input Sources. + +- [x] **ComputeVertexToTriangleDistancesFilter** (SimplnxCore) + - **Changes Made:** Fixed the 4x 'Geoemtry' typo; stated distance units (length unit); noted normals must be present/consistent for sign correctness; added Required Input Sources (Vertex + Triangle Geometry). + +- [x] **LabelTriangleGeometryFilter** (SimplnxCore) + - **Changes Made:** Added Required Input Sources with a note that STL is a common CAD mesh format; fixed the footer /discussions link. + +- [x] **HierarchicalSmoothFilter** (SimplnxCore) + - **Changes Made:** Removed the hand-written Parameters table (it duplicated the auto-table), replacing it with prose; added a MyST link to Laplacian Smoothing; added Required Input Sources; normalized the non-standard footer; removed the empty Example Pipelines. + +- [x] **RegularGridSampleSurfaceMeshFilter** (SimplnxCore) + - **Changes Made:** Stated Origin/Spacing physical units and Dimensions as voxel counts; cross-linked the Uncertain variant; added Required Input Sources (Triangle Geometry + Face Labels). + +- [x] **SliceTriangleGeometryFilter** (SimplnxCore) + - **Changes Made:** Fixed typos (geoemtry, bewteen, perimieter); stated Slice Spacing/range/area/perimeter are in the geometry's physical units; added Required Input Sources. + +- [x] **RemoveFlaggedVerticesFilter** (SimplnxCore) + - **Changes Made:** Replaced legacy 'Data Container' wording with NX terminology; added Required Input Sources (the boolean-mask producer). + +- [x] **CropEdgeGeometryFilter** (SimplnxCore) + - **Changes Made:** Added the missing Group header (Core (Conversion)); stated Min/Max are physical units, not indices; removed the empty Example Pipelines; cross-linked Crop Geometry (Image). + +- [x] **CombineStlFilesFilter** (SimplnxCore) + - **Changes Made:** Defined STL on first use; converted the bold Import/Write STL mentions to MyST links. + +- [x] **MultiThresholdObjectsFilter** (SimplnxCore) + - **Changes Made:** Defined Cell/Attribute Matrix/EBSD context; added Required Input Sources naming EBSD readers as typical producers; removed the empty Example Pipelines. + +- [x] **CreateColorMapFilter** (SimplnxCore) + - **Changes Made:** Added the missing Group header (Core (Image)); added Required Input Sources (scalar array + optional mask); noted the preset table is hand-maintained; removed the empty Example Pipelines; fixed the License line. + +- [x] **ChangeAngleRepresentationFilter** (SimplnxCore) + - **Changes Made:** Added a Required Input Sources one-liner naming EBSD readers as typical angle producers (units content already exemplary). + +- [x] **RandomizeFeatureIdsFilter** (SimplnxCore) + - **Changes Made:** Defined Feature Ids/Attribute Matrix/NeighborList; documented that the cpp exposes no seed parameter (not reproducible); added Required Input Sources; fixed the License line. + +- [x] **ExecuteProcessFilter** (SimplnxCore) + - **Changes Made:** Stated the absolute-path requirement; documented the Should Block / Timeout (ms) parameters; added an explicit Required Input Sources: None. + +- [x] **CreatePythonSkeletonFilter** (SimplnxCore) + - **Changes Made:** Removed the hand-written Configuration parameter list and ADDED the missing auto-table marker; added the missing Group header (Core (Generation)); added Required Input Sources: None. + +- [x] **ExtractPipelineToFileFilter** (SimplnxCore) + - **Changes Made:** Added the missing Group header (IO (Output)) and the missing DREAM3D-NX Help footer; noted the no-embedded-pipeline behavior; added Required Input Sources: None; fixed the License line. + +- [x] **CreateAMScanPathsFilter** (SimplnxCore) + - **Changes Made:** Added a Units section (Hatch Spacing/Length in geometry coordinate units, Hatch Rotation Angle in degrees per the cpp label); converted the quoted SliceTriangleGeometry to a MyST link and promoted it to Required Input Sources. + +### Tier 4 — Adequate + +| Filter | Plugin | Status | +|--------|--------|--------| +| ComputeFeatureSizes | SimplnxCore | Done | +| ComputeBoundaryCells | SimplnxCore | Done | +| ComputeGroupingDensity | SimplnxCore | Done | + +- [x] **ComputeFeatureSizesFilter** (SimplnxCore) + - **Changes Made:** Added Required Input Sources (Feature Ids from a segmentation filter). Otherwise adequate as triaged. + +- [x] **ComputeBoundaryCellsFilter** (SimplnxCore) + - **Changes Made:** Stated the output range 0-6 and volume-edge handling; added Required Input Sources (Feature Ids). Otherwise adequate. + +- [x] **ComputeGroupingDensityFilter** (SimplnxCore) + - **Changes Made:** Converted the quoted 'Compute Feature Neighborhoods' to a MyST link (and fixed the dangling quote); added Required Input Sources (Parent IDs, neighbor lists, Feature Volumes). Otherwise model-quality. + +--- + +## Real-World Visualization Wishlist + +These are pipeline-generated screenshots/visualizations that would enhance the documentation but require DREAM3DNX automation tooling (future work). + +| Filter | Desired Visualization | Priority | +|--------|----------------------|----------| +| ComputeAvgCAxes | IPF color map showing C-axis orientations per grain | Medium | +| ComputeCAxisLocations | C-axis direction map colored by orientation | Medium | +| ComputeGBCD | GBCD pole figure output from Write GBCD Pole Figure filter | High | +| ComputeSchmids | Microstructure colored by Schmid factor under a loading direction | High | +| ComputeKernelAvgMisorientations | KAM map showing orientation gradients within grains | High | +| ComputeAvgOrientations | IPF color map showing average orientation assignment per grain | Medium | +| ComputeFeatureReferenceMisorientations | Color scale legend for existing images; additional loading conditions | Low | +| ComputeShapes | Features colored by aspect ratio or Omega3 value | Medium | +| ComputeTwinBoundaries | Microstructure with twin boundaries highlighted and incoherence heat map | Medium | +| ComputeSlipTransmissionMetrics | Feature pairs with high vs low transmission metrics visualized | Medium | +| ComputeBoundaryStrengths | Boundary mesh colored by M' or fip values | Medium | +| AlignSectionsFeatureCentroid | Before/after comparison showing when centroid alignment is appropriate vs when it fails (e.g., sample with consistent vs inconsistent mask regions) | High | +| AlignSectionsMisorientation | Before/after slice alignment showing corrected vs uncorrected sections; side-by-side comparison of alignment with mask vs without mask showing when masking is needed (e.g., sample with mounting material or voids at edges) | High | +| AlignSectionsMutualInformation | Before/after alignment comparison; side-by-side with misorientation method | Medium | +| AlignSectionsList | Typical workflow showing shift output from another alignment filter used as input | Low | +| ITKNormalizeImage | Before/after images showing normalization effect with parameters used to generate result | High | +| ITKRescaleIntensityImage | Before/after images showing rescaling effect with parameters used to generate result | High | +| ScalarSegmentFeatures | Before/after FeatureIds map from a scalar-based segmentation (e.g., image-quality thresholding) | Medium | +| CAxisSegmentFeatures | Before/after segmentation on hexagonal (e.g., Ti) EBSD data | Medium | +| EBSDSegmentFeatures | EBSD IPF map → segmented grains visualization (flagship EBSD workflow) | High | +| MergeTwins | Before/after microstructure showing twin variants merged into parent grain | High | +| IdentifySample | Before/after showing overscan cleanup on a real FIB-SEM dataset | Low | +| RequireMinimumSizeFeatures | Before/after microstructure with minimum-size filter applied | Medium | +| RemoveFlaggedFeatures | Side-by-side comparison of Remove vs Extract vs Extract-then-Remove operation modes | Medium | +| ComputeFeatureNeighbors | Grain map colored by number of neighbors | Medium | +| AddBadData | Synthetic structure before and after random noise; same with boundary noise | High | +| FillBadData | Conceptual diagram: small defects (filled) vs large defects (preserved) at threshold | Medium | +| ErodeDilateBadData | Multi-frame iteration sequence diagram (iter 0 → 3) for both erode and dilate | High | +| ErodeDilateBadData | Erode-then-dilate ("opening") removing isolated single-cell noise but preserving a larger pore | Medium | +| ErodeDilateMask | Directional erosion (X-only vs uniform) on a mask | Medium | +| ErodeDilateCoordinationNumber | 3x3x3 cell cluster diagram with coordination numbers labeled (CN=6 isolated, CN=3 edge, etc.) | High | +| ReplaceElementAttributesWithNeighborValues | Conceptual diagram: flagged cell + neighbors with chosen replacement highlighted by max/min | Medium | +| NeighborOrientationCorrelation | Cell-with-6-neighbors diagram showing Cleanup Level=2,4,6 outcomes side by side | High | +| BadDataNeighborOrientationCheck | Voxel-and-neighbors diagram showing the false→true flip when criterion is met | Medium | +| RequireMinNumNeighbors | Microstructure before/after with isolated low-neighbor-count grains absorbed | Medium | +| ComputeNeighborhoods | Histogram of neighborhood counts for a real microstructure | Low | +| ComputeNeighborListStatistics | Example feature with its neighbor-misorientation list and computed statistics | Low | +| CreateGeometry | Side-by-side infographic of all 8 geometry types (Image, RectGrid, Vertex, Edge, Triangle, Quad, Tet, Hex) | High | +| CreateImageGeometry / SetImageGeomOriginScaling | Image Geometry dimensions/origin/spacing diagram (shared concept) | High | +| ApplyTransformationToGeometry | Axis-angle representation diagram | Medium | +| RotateSampleRefFrame | Sample frame rotation vs geometric rotation comparison | High | +| ResampleImageGeom | Before/after voxel grid showing 2x spacing reduction halving cell count | Medium | +| ResampleRectGridToImageGeom | Variable-spacing RectGrid → uniform Image Geom with "last one wins" cells highlighted | Medium | +| CropImageGeometry | Already adequate | - | +| PadImageGeometry | 3-panel diagram showing Update Origin ON vs OFF | Medium | +| AppendImageGeometry | Already comprehensive | - | +| QuickSurfaceMesh | Single voxel face → 2 triangles diagram | Low | +| PartitionGeometry | Already excellent | - | +| InitializeImageGeomCellData | Subvolume highlight before/after on real cube | Medium | +| CombineTransformationMatrices | Two 4x4 matrices multiplying into a single result | Low | +| ComputeCoordinatesImageGeom | Voxel grid with one cell highlighted showing (i,j,k) and (x,y,z) | Low | +| ReadImageStack | N 2D slices stacking into a 3D volume (Z = slice count) | Medium | +| ReadHDF5Dataset | Flat HDF5 dataset (N elements) reshaped into tuples x components | Medium | +| ReadStlFile | One triangle (normal + 3 vertices); many triangles forming a surface mesh | Low | +| ReadVtkStructuredPoints | Voxel cube showing cell-center value vs 8 corner (point) values | Medium | +| ReadH5Ebsd / ReadAng / ReadCtf | Sample vs crystal reference-frame diagram (why a rotation is needed); IPF map of freshly imported data | High | +| WriteAbaqusHexahedron | Image-geometry voxel grid mapping to a hexahedral element mesh (8 nodes per voxel) | Medium | +| WriteGBCDGMTFile | Data-flow: Compute GBCD -> Write GBCD GMT File -> .dat -> GMT -> rendered pole figure | High | +| WriteGBCDTriangleData | Boundary triangle: two grains, left/right average orientations, normal vector, area | Medium | +| WritePoleFigure | Stereographic/Lambert projection: 3D orientation/pole projected onto the 2D unit circle | High | +| WriteVtkRectilinearGrid / WriteVtkStructuredPoints | Rectilinear grid (variable spacing) vs structured points (uniform spacing) side by side | Medium | +| ReadDREAM3D | Import-data tree selector UI showing partial-import checkboxes | Medium | + +--- + +## Concept Pages Needed (Future Work) + +Domain concepts that appear across 3+ filters and should eventually become shared reference pages: + +| Concept | Filters That Need It | +|---------|---------------------| +| C-Axis / Hexagonal Crystals | ComputeAvgCAxes, ComputeCAxisLocations, ComputeFeatureNeighborCAxisMisalignments, ComputeFeatureReferenceCAxisMisorientations | +| Quaternions & Orientation Representations | ComputeAvgCAxes, ComputeAvgOrientations, ComputeCAxisLocations, ConvertOrientations | +| Misorientation | ComputeKernelAvgMisorientations, ComputeFeatureNeighborMisorientations, ComputeFeatureReferenceMisorientations, ComputeGBCD | +| Slip Systems & Crystal Plasticity | ComputeSchmids, ComputeSlipTransmissionMetrics, ComputeBoundaryStrengths | +| Grain Boundaries | ComputeGBCD, ComputeGBCDMetricBased, ComputeGBPDMetricBased, ComputeTwinBoundaries | +| Feature IDs & Grains | Nearly all filters | +| Reference Frames (Sample vs Crystal) | ComputeAvgCAxes, ComputeCAxisLocations, ComputeSchmids | +| Burn Algorithm / Segmentation | ScalarSegmentFeatures, CAxisSegmentFeatures, EBSDSegmentFeatures | +| Feature Cleanup / Isotropic Coarsening | RequireMinimumSizeFeatures, RemoveFlaggedFeatures | +| Cell vs Feature vs Ensemble Data | ScalarSegmentFeatures, RequireMinimumSizeFeatures, ComputeFeatureNeighbors, and most feature-level filters | +| Morphological Erosion / Dilation / Opening | ErodeDilateBadData, ErodeDilateMask, ErodeDilateCoordinationNumber | +| Coordination Number / Face Neighbors | ErodeDilateCoordinationNumber, NeighborOrientationCorrelation, BadDataNeighborOrientationCheck | +| Equivalent Sphere Diameter | ComputeFeatureSizes, ComputeNeighborhoods, ComputeShapes | +| Geometry Types (Image, RectGrid, Vertex, Edge, Triangle, Quad, Tet, Hex) | CreateGeometry, CreateImageGeometry, and every geometry-aware filter | +| Transformation Matrices (4x4 row-major) | ApplyTransformationToGeometry, CombineTransformationMatrices, RotateSampleRefFrame | +| Sample Reference Frame vs Crystal Reference Frame | RotateSampleRefFrame (already listed above) | +| HDF5 File Format (datasets, groups, tuples vs components) | ReadHDF5Dataset, ReadDREAM3D, WriteDREAM3D, ReadH5Ebsd, ReadH5Esprit, ReadH5Oim, ReadH5Oina, ReadGrainMapper3D | +| VTK Legacy Formats (structured points vs rectilinear grid; ASCII vs binary) | ReadVtkStructuredPoints, WriteVtkStructuredPoints, WriteVtkRectilinearGrid | +| EBSD Vendor File Formats & What They Contain (Euler angles, CI/IQ/MAD, phases) | ReadAngData, ReadCtfData, ReadChannel5Data, ReadH5Ebsd, ReadH5EspritData, ReadH5OimData, ReadH5OinaData | +| External Simulation Exporters (FEA / MD / KMC / FFT input files) | WriteAbaqusHexahedron, WriteLAMMPSFile, WriteSPParksSites, WriteLosAlamosFFT, ReadDeformKeyFileV12 | +| Pole Figures & Projections (stereographic, Lambert, Laue class) | WritePoleFigure, WriteGBCDGMTFile, ComputeGBCD | diff --git a/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_grains.d3dstate b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_grains.d3dstate new file mode 100644 index 0000000000..e5c0cfa1bb --- /dev/null +++ b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_grains.d3dstate @@ -0,0 +1,429 @@ +{ + "charting_state": { + "0": { + "active_chart_tab": 0, + "active_view": true, + "chart_type_selectors": [ + { + "chart_type": 0, + "chart_type_visible": false + } + ], + "num_chart_tabs": 0 + }, + "dream3d_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + }, + "pipeline_state": { + "isDisabled": false, + "name": "Untitled Pipeline", + "pinnedParams": [], + "pipeline": [ + { + "args": { + "import_data_object": { + "value": { + "data_paths": [], + "file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d", + "path_import_policy": 0 + }, + "version": 2 + }, + "parameters_version": 1 + }, + "comments": "", + "filter": { + "name": "nx::core::ReadDREAM3DFilter", + "uuid": "0dbd31c7-19e0-4077-83ef-f4a6459a0e2d" + }, + "isDisabled": false + } + ], + "pipeline_uuid": "4c120bda-d8be-4784-894a-9ec8cc5c41f4", + "version": 1, + "workflowParams": [] + }, + "quadview_state": { + "0": { + "active_quad_view_tab": 0, + "active_view": true, + "num_quad_view_tabs": 1, + "quad_view_tab_states": { + "0": { + "active_array": "", + "active_component": -1, + "ambient": 0.2, + "array_lut_fct": null, + "array_scalar_opacity_fct": null, + "color_map_inverted": false, + "diffuse": 0.8, + "geometry_path": "", + "gi_reach": 0.0, + "length_units": "mm", + "light_follows_camera": true, + "max_intensity_blend": true, + "mean_blend": false, + "min_intensity_blend": false, + "perPaneViewActionState": [ + {}, + {}, + {}, + {} + ], + "reslice_mode": false, + "shading_enabled": false, + "show_annotations": true, + "show_color_legend": true, + "show_plane_widgets": false, + "specular": 0.2, + "specular_power": 20.0, + "ssao_enabled": false, + "thick_mode": false, + "volume_blend_mode": 0, + "volumetric_scattering": 0.0 + } + } + }, + "quad_view_files": [ + "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + ] + }, + "spreadsheet_state": { + "0": { + "active_spreadsheet_tab": 0, + "active_view": true, + "num_spreadsheet_tabs": 0, + "spreadsheet_type_selectors": [ + { + "chart_type": 0, + "chart_type_visible": false + } + ] + }, + "dream3d_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + }, + "state_file_version": 4, + "visualization_state": { + "split_view_state": { + "cells": [ + [ + { + "col_span": 1, + "row_span": 1, + "widget_state": { + "active_view": true, + "block_render": false, + "camera_center_of_rotation_x": -23.625, + "camera_center_of_rotation_y": 25.125, + "camera_center_of_rotation_z": -0.5, + "camera_focal_pt_x": -26.353316907594433, + "camera_focal_pt_y": 22.547708844875523, + "camera_focal_pt_z": -0.5, + "camera_parallel_scale": 33.14477492067222, + "camera_pos_x": -26.353316907594433, + "camera_pos_y": 22.547708844875523, + "camera_pos_z": 160.75006004466653, + "camera_view_angle": 30.0, + "camera_view_up_x": 0.0, + "camera_view_up_y": 1.0, + "camera_view_up_z": 0.0, + "check_context_menu": false, + "global_grid_axes": false, + "global_grid_axes_color": [ + 1.0, + 1.0, + 1.0 + ], + "global_grid_axes_opacity": 1.0, + "global_grid_axes_show_grid_lines": false, + "global_grid_axes_show_labels": true, + "global_grid_axes_spacingx": 0.0, + "global_grid_axes_spacingy": 0.0, + "global_grid_axes_spacingz": 0.0, + "global_grid_axes_title_x": "", + "global_grid_axes_title_y": "", + "global_grid_axes_title_z": "", + "num_render_layers": 2, + "own_context_menu": true, + "parallel_projection": 1, + "split_view_index": 1 + } + } + ] + ], + "col_widths": [ + 1.0 + ], + "grid_cols": 1, + "grid_rows": 1, + "grid_version": 1, + "row_heights": [ + 1.0 + ] + }, + "tree_view_state": [ + { + "item_children": [ + { + "item_children": [ + { + "item_data": { + "core_object_name": "2D Image/Slice View", + "core_object_name_suffix": 1, + "rep_view_implementations": [ + { + "active_array": "FeatureIds", + "active_component": -1, + "animation_duration": 0.5, + "color_map_inverted": false, + "color_preset": { + "Annotations": null, + "ColorSpace": "RGB", + "Creator": "Francesca Samsel, and Alan W. Scott", + "DefaultMap": true, + "IndexedColors": [], + "License": "", + "Name": "Fast", + "NanColor": [ + 0.0, + 1.0, + 0.0 + ], + "RGBPoints": [ + 0.0, + 0.05640000104904175, + 0.05640000104904175, + 0.4699999988079071, + 0.17159223556518555, + 0.24300000071525574, + 0.46035000681877136, + 0.8100000023841858, + 0.2984914779663086, + 0.3568143844604492, + 0.7450246214866638, + 0.9543676972389221, + 0.4321287274360657, + 0.6881999969482422, + 0.9300000071525574, + 0.9179099798202515, + 0.5, + 0.8994959592819214, + 0.944646418094635, + 0.7686567306518555, + 0.5882260203361511, + 0.9571079611778259, + 0.8338184952735901, + 0.5089156031608582, + 0.7061412334442139, + 0.927520751953125, + 0.6214389204978943, + 0.3153570592403412, + 0.8476395010948181, + 0.800000011920929, + 0.35199999809265137, + 0.1599999964237213, + 1.0, + 0.5899999737739563, + 0.07670000195503235, + 0.11947499960660934 + ], + "Source": "" + }, + "custom_range_max": 370.0, + "custom_range_min": 0.0, + "data_grid_visible": false, + "detach_color_settings": true, + "generate_histogram_data": false, + "global_grid_axes_color": [ + 1.0, + 1.0, + 1.0 + ], + "global_grid_axes_opacity": 1.0, + "global_grid_axes_show_grid_lines": false, + "global_grid_axes_show_labels": true, + "global_grid_axes_spacingx": 0.0, + "global_grid_axes_spacingy": 0.0, + "global_grid_axes_spacingz": 0.0, + "global_grid_axes_title_x": "", + "global_grid_axes_title_y": "", + "global_grid_axes_title_z": "", + "indexed_color_preset": { + "Annotations": null, + "ColorSpace": "", + "Creator": "", + "DefaultMap": false, + "IndexedColors": [ + 0.6509804129600525, + 0.8078431487083435, + 0.8901960849761963, + 0.12156862765550613, + 0.47058823704719543, + 0.7058823704719543, + 0.6980392336845398, + 0.8745098114013672, + 0.5411764979362488, + 0.20000000298023224, + 0.6274510025978088, + 0.1725490242242813, + 0.9843137264251709, + 0.6039215922355652, + 0.6000000238418579, + 0.8901960849761963, + 0.10196078568696976, + 0.10980392247438431, + 0.9921568632125854, + 0.7490196228027344, + 0.43529412150382996, + 1.0, + 0.49803921580314636, + 0.0, + 0.7921568751335144, + 0.6980392336845398, + 0.8392156958580017, + 0.4156862795352936, + 0.239215686917305, + 0.6039215922355652, + 1.0, + 1.0, + 0.6000000238418579 + ], + "License": "", + "Name": "Brewer Qualitative Paired", + "NanColor": [ + 1.0, + 1.0, + 0.6000000238418579 + ], + "RGBPoints": [], + "Source": "" + }, + "link_physical_units": false, + "nan_color_b": 0.0, + "nan_color_g": 0.0, + "nan_color_r": 0.0, + "render_window_index": 1, + "rep_linked": false, + "rep_split_id": 1, + "representation_visible": true, + "scalar_bar_visible": false, + "scalar_mapping": 1, + "show_box_tool": false, + "slice_dir": 0, + "slice_num": 0, + "solid_color_b": 255, + "solid_color_g": 255, + "solid_color_r": 255, + "source_position2_x": 0.1, + "source_position2_y": 0.5, + "source_position_x": 0.9, + "source_position_y": 0.175, + "toggle_left_slice_num": 0, + "toggle_right_slice_num": 0, + "transform_box_rotate_x": 0.0, + "transform_box_rotate_y": 0.0, + "transform_box_rotate_z": 0.0, + "transform_box_scale_x": 1.0, + "transform_box_scale_y": 1.0, + "transform_box_scale_z": 1.0, + "transform_box_translate_x": 0.0, + "transform_box_translate_y": 0.0, + "transform_box_translate_z": 0.0, + "use_decimation_during_interactions": false, + "using_custom_range": false, + "using_default_indexed_preset": true, + "using_default_preset": false, + "using_solid_color": false, + "values_as_categories": false + } + ] + }, + "item_type": "VXImageSliceRep " + } + ], + "item_data": { + "core_object_name": "DataContainer", + "current_preset": { + "Annotations": null, + "ColorSpace": "RGB", + "Creator": "Francesca Samsel, and Alan W. Scott", + "DefaultMap": true, + "IndexedColors": [], + "License": "", + "Name": "Fast", + "NanColor": [ + 0.0, + 1.0, + 0.0 + ], + "RGBPoints": [ + 0.0, + 0.05640000104904175, + 0.05640000104904175, + 0.4699999988079071, + 0.17159223556518555, + 0.24300000071525574, + 0.46035000681877136, + 0.8100000023841858, + 0.2984914779663086, + 0.3568143844604492, + 0.7450246214866638, + 0.9543676972389221, + 0.4321287274360657, + 0.6881999969482422, + 0.9300000071525574, + 0.9179099798202515, + 0.5, + 0.8994959592819214, + 0.944646418094635, + 0.7686567306518555, + 0.5882260203361511, + 0.9571079611778259, + 0.8338184952735901, + 0.5089156031608582, + 0.7061412334442139, + 0.927520751953125, + 0.6214389204978943, + 0.3153570592403412, + 0.8476395010948181, + 0.800000011920929, + 0.35199999809265137, + 0.1599999964237213, + 1.0, + 0.5899999737739563, + 0.07670000195503235, + 0.11947499960660934 + ], + "Source": "" + }, + "data_source_color_map_inverted": false, + "data_source_nan_color_b": 0, + "data_source_nan_color_g": 191, + "data_source_nan_color_r": 128, + "data_source_solid_color_b": 255, + "data_source_solid_color_g": 255, + "data_source_solid_color_r": 255, + "data_source_using_default_preset": true, + "data_source_visibility": true, + "imported_data_path": "DataContainer", + "render_window_index": [ + { + "core_object_visibility": true, + "render_window_index": 1 + } + ] + }, + "item_type": "VXDataSource" + } + ], + "item_data": { + "bridge_object_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d", + "bridge_object_item_name": "Untitled Pipeline", + "bridge_object_uuid": "4c120bda-d8be-4784-894a-9ec8cc5c41f4" + }, + "item_type": "NXToVXBridge" + } + ] + }, + "window_state": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48UXRBZHZhbmNlZERvY2tpbmdTeXN0ZW0gVmVyc2lvbj0iMSIgVXNlclZlcnNpb249IjEiIENvbnRhaW5lcnM9IjEiPjxDb250YWluZXIgRmxvYXRpbmc9IjAiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0ifCIgQ291bnQ9IjEiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0iLSIgQ291bnQ9IjIiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0ifCIgQ291bnQ9IjIiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0iLSIgQ291bnQ9IjIiPjxBcmVhIFRhYnM9IjEiIEN1cnJlbnQ9Im1fUGlwZWxpbmVEb2NrIj48V2lkZ2V0IE5hbWU9Im1fUGlwZWxpbmVEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PEFyZWEgVGFicz0iMiIgQ3VycmVudD0ibV9Cb29rbWFya3NEb2NrIj48V2lkZ2V0IE5hbWU9Im1fRmlsdGVyTGlzdERvY2siIENsb3NlZD0iMSIvPjxXaWRnZXQgTmFtZT0ibV9Cb29rbWFya3NEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PFNpemVzPjAgMCA8L1NpemVzPjwvU3BsaXR0ZXI+PEFyZWEgVGFicz0iNCIgQ3VycmVudD0ibV9WaXN1YWxpemF0aW9uRG9jayI+PFdpZGdldCBOYW1lPSJtX0ZpbHRlclBhcmFtZXRlcnNEb2NrIiBDbG9zZWQ9IjEiLz48V2lkZ2V0IE5hbWU9Im1fV29ya2Zsb3dQYXJhbWV0ZXJzRG9jayIgQ2xvc2VkPSIxIi8+PFdpZGdldCBOYW1lPSJtX1Zpc3VhbGl6YXRpb25Eb2NrIiBDbG9zZWQ9IjAiLz48V2lkZ2V0IE5hbWU9Im1fQ2hhcnRpbmdEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PFNpemVzPjAgMTA5NCA8L1NpemVzPjwvU3BsaXR0ZXI+PFNwbGl0dGVyIE9yaWVudGF0aW9uPSJ8IiBDb3VudD0iMyI+PEFyZWEgVGFicz0iMSIgQ3VycmVudD0ibV9PdXRwdXREb2NrIj48V2lkZ2V0IE5hbWU9Im1fT3V0cHV0RG9jayIgQ2xvc2VkPSIxIi8+PC9BcmVhPjxBcmVhIFRhYnM9IjEiIEN1cnJlbnQ9Im1fSXNzdWVzRG9jayI+PFdpZGdldCBOYW1lPSJtX0lzc3Vlc0RvY2siIENsb3NlZD0iMSIvPjwvQXJlYT48QXJlYSBUYWJzPSIxIiBDdXJyZW50PSJtX1Bpbm5lZFBhcmFtZXRlcnNEb2NrIj48V2lkZ2V0IE5hbWU9Im1fUGlubmVkUGFyYW1ldGVyc0RvY2siIENsb3NlZD0iMSIvPjwvQXJlYT48U2l6ZXM+MCAwIDAgPC9TaXplcz48L1NwbGl0dGVyPjxTaXplcz43ODkgMCA8L1NpemVzPjwvU3BsaXR0ZXI+PFNpemVzPjEwOTQgPC9TaXplcz48L1NwbGl0dGVyPjwvQ29udGFpbmVyPjwvUXRBZHZhbmNlZERvY2tpbmdTeXN0ZW0+Cg==", + "workflow_mode": false +} \ No newline at end of file diff --git a/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_ipf.d3dstate b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_ipf.d3dstate new file mode 100644 index 0000000000..20791f17c3 --- /dev/null +++ b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_ipf.d3dstate @@ -0,0 +1,429 @@ +{ + "charting_state": { + "0": { + "active_chart_tab": 0, + "active_view": true, + "chart_type_selectors": [ + { + "chart_type": 0, + "chart_type_visible": false + } + ], + "num_chart_tabs": 0 + }, + "dream3d_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + }, + "pipeline_state": { + "isDisabled": false, + "name": "Untitled Pipeline", + "pinnedParams": [], + "pipeline": [ + { + "args": { + "import_data_object": { + "value": { + "data_paths": [], + "file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d", + "path_import_policy": 0 + }, + "version": 2 + }, + "parameters_version": 1 + }, + "comments": "", + "filter": { + "name": "nx::core::ReadDREAM3DFilter", + "uuid": "0dbd31c7-19e0-4077-83ef-f4a6459a0e2d" + }, + "isDisabled": false + } + ], + "pipeline_uuid": "4c120bda-d8be-4784-894a-9ec8cc5c41f4", + "version": 1, + "workflowParams": [] + }, + "quadview_state": { + "0": { + "active_quad_view_tab": 0, + "active_view": true, + "num_quad_view_tabs": 1, + "quad_view_tab_states": { + "0": { + "active_array": "", + "active_component": -1, + "ambient": 0.2, + "array_lut_fct": null, + "array_scalar_opacity_fct": null, + "color_map_inverted": false, + "diffuse": 0.8, + "geometry_path": "", + "gi_reach": 0.0, + "length_units": "mm", + "light_follows_camera": true, + "max_intensity_blend": true, + "mean_blend": false, + "min_intensity_blend": false, + "perPaneViewActionState": [ + {}, + {}, + {}, + {} + ], + "reslice_mode": false, + "shading_enabled": false, + "show_annotations": true, + "show_color_legend": true, + "show_plane_widgets": false, + "specular": 0.2, + "specular_power": 20.0, + "ssao_enabled": false, + "thick_mode": false, + "volume_blend_mode": 0, + "volumetric_scattering": 0.0 + } + } + }, + "quad_view_files": [ + "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + ] + }, + "spreadsheet_state": { + "0": { + "active_spreadsheet_tab": 0, + "active_view": true, + "num_spreadsheet_tabs": 0, + "spreadsheet_type_selectors": [ + { + "chart_type": 0, + "chart_type_visible": false + } + ] + }, + "dream3d_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d" + }, + "state_file_version": 4, + "visualization_state": { + "split_view_state": { + "cells": [ + [ + { + "col_span": 1, + "row_span": 1, + "widget_state": { + "active_view": true, + "block_render": false, + "camera_center_of_rotation_x": -23.625, + "camera_center_of_rotation_y": 25.125, + "camera_center_of_rotation_z": -0.5, + "camera_focal_pt_x": -26.353316907594433, + "camera_focal_pt_y": 22.547708844875523, + "camera_focal_pt_z": -0.5, + "camera_parallel_scale": 33.14477492067222, + "camera_pos_x": -26.353316907594433, + "camera_pos_y": 22.547708844875523, + "camera_pos_z": 160.75006004466653, + "camera_view_angle": 30.0, + "camera_view_up_x": 0.0, + "camera_view_up_y": 1.0, + "camera_view_up_z": 0.0, + "check_context_menu": false, + "global_grid_axes": false, + "global_grid_axes_color": [ + 1.0, + 1.0, + 1.0 + ], + "global_grid_axes_opacity": 1.0, + "global_grid_axes_show_grid_lines": false, + "global_grid_axes_show_labels": true, + "global_grid_axes_spacingx": 0.0, + "global_grid_axes_spacingy": 0.0, + "global_grid_axes_spacingz": 0.0, + "global_grid_axes_title_x": "", + "global_grid_axes_title_y": "", + "global_grid_axes_title_z": "", + "num_render_layers": 2, + "own_context_menu": true, + "parallel_projection": 1, + "split_view_index": 1 + } + } + ] + ], + "col_widths": [ + 1.0 + ], + "grid_cols": 1, + "grid_rows": 1, + "grid_version": 1, + "row_heights": [ + 1.0 + ] + }, + "tree_view_state": [ + { + "item_children": [ + { + "item_children": [ + { + "item_data": { + "core_object_name": "2D Image/Slice View", + "core_object_name_suffix": 1, + "rep_view_implementations": [ + { + "active_array": "IPFColors", + "active_component": -1, + "animation_duration": 0.5, + "color_map_inverted": false, + "color_preset": { + "Annotations": null, + "ColorSpace": "RGB", + "Creator": "Francesca Samsel, and Alan W. Scott", + "DefaultMap": true, + "IndexedColors": [], + "License": "", + "Name": "Fast", + "NanColor": [ + 0.0, + 1.0, + 0.0 + ], + "RGBPoints": [ + 0.0, + 0.05640000104904175, + 0.05640000104904175, + 0.4699999988079071, + 0.17159223556518555, + 0.24300000071525574, + 0.46035000681877136, + 0.8100000023841858, + 0.2984914779663086, + 0.3568143844604492, + 0.7450246214866638, + 0.9543676972389221, + 0.4321287274360657, + 0.6881999969482422, + 0.9300000071525574, + 0.9179099798202515, + 0.5, + 0.8994959592819214, + 0.944646418094635, + 0.7686567306518555, + 0.5882260203361511, + 0.9571079611778259, + 0.8338184952735901, + 0.5089156031608582, + 0.7061412334442139, + 0.927520751953125, + 0.6214389204978943, + 0.3153570592403412, + 0.8476395010948181, + 0.800000011920929, + 0.35199999809265137, + 0.1599999964237213, + 1.0, + 0.5899999737739563, + 0.07670000195503235, + 0.11947499960660934 + ], + "Source": "" + }, + "custom_range_max": 431.457, + "custom_range_min": 0.0, + "data_grid_visible": false, + "detach_color_settings": true, + "generate_histogram_data": false, + "global_grid_axes_color": [ + 1.0, + 1.0, + 1.0 + ], + "global_grid_axes_opacity": 1.0, + "global_grid_axes_show_grid_lines": false, + "global_grid_axes_show_labels": true, + "global_grid_axes_spacingx": 0.0, + "global_grid_axes_spacingy": 0.0, + "global_grid_axes_spacingz": 0.0, + "global_grid_axes_title_x": "", + "global_grid_axes_title_y": "", + "global_grid_axes_title_z": "", + "indexed_color_preset": { + "Annotations": null, + "ColorSpace": "", + "Creator": "", + "DefaultMap": false, + "IndexedColors": [ + 0.6509804129600525, + 0.8078431487083435, + 0.8901960849761963, + 0.12156862765550613, + 0.47058823704719543, + 0.7058823704719543, + 0.6980392336845398, + 0.8745098114013672, + 0.5411764979362488, + 0.20000000298023224, + 0.6274510025978088, + 0.1725490242242813, + 0.9843137264251709, + 0.6039215922355652, + 0.6000000238418579, + 0.8901960849761963, + 0.10196078568696976, + 0.10980392247438431, + 0.9921568632125854, + 0.7490196228027344, + 0.43529412150382996, + 1.0, + 0.49803921580314636, + 0.0, + 0.7921568751335144, + 0.6980392336845398, + 0.8392156958580017, + 0.4156862795352936, + 0.239215686917305, + 0.6039215922355652, + 1.0, + 1.0, + 0.6000000238418579 + ], + "License": "", + "Name": "Brewer Qualitative Paired", + "NanColor": [ + 1.0, + 1.0, + 0.6000000238418579 + ], + "RGBPoints": [], + "Source": "" + }, + "link_physical_units": false, + "nan_color_b": 0.0, + "nan_color_g": 0.0, + "nan_color_r": 0.0, + "render_window_index": 1, + "rep_linked": false, + "rep_split_id": 1, + "representation_visible": true, + "scalar_bar_visible": false, + "scalar_mapping": 1, + "show_box_tool": false, + "slice_dir": 0, + "slice_num": 0, + "solid_color_b": 255, + "solid_color_g": 255, + "solid_color_r": 255, + "source_position2_x": 0.1, + "source_position2_y": 0.5, + "source_position_x": 0.9, + "source_position_y": 0.175, + "toggle_left_slice_num": 0, + "toggle_right_slice_num": 0, + "transform_box_rotate_x": 0.0, + "transform_box_rotate_y": 0.0, + "transform_box_rotate_z": 0.0, + "transform_box_scale_x": 1.0, + "transform_box_scale_y": 1.0, + "transform_box_scale_z": 1.0, + "transform_box_translate_x": 0.0, + "transform_box_translate_y": 0.0, + "transform_box_translate_z": 0.0, + "use_decimation_during_interactions": false, + "using_custom_range": false, + "using_default_indexed_preset": true, + "using_default_preset": false, + "using_solid_color": false, + "values_as_categories": false + } + ] + }, + "item_type": "VXImageSliceRep " + } + ], + "item_data": { + "core_object_name": "DataContainer", + "current_preset": { + "Annotations": null, + "ColorSpace": "RGB", + "Creator": "Francesca Samsel, and Alan W. Scott", + "DefaultMap": true, + "IndexedColors": [], + "License": "", + "Name": "Fast", + "NanColor": [ + 0.0, + 1.0, + 0.0 + ], + "RGBPoints": [ + 0.0, + 0.05640000104904175, + 0.05640000104904175, + 0.4699999988079071, + 0.17159223556518555, + 0.24300000071525574, + 0.46035000681877136, + 0.8100000023841858, + 0.2984914779663086, + 0.3568143844604492, + 0.7450246214866638, + 0.9543676972389221, + 0.4321287274360657, + 0.6881999969482422, + 0.9300000071525574, + 0.9179099798202515, + 0.5, + 0.8994959592819214, + 0.944646418094635, + 0.7686567306518555, + 0.5882260203361511, + 0.9571079611778259, + 0.8338184952735901, + 0.5089156031608582, + 0.7061412334442139, + 0.927520751953125, + 0.6214389204978943, + 0.3153570592403412, + 0.8476395010948181, + 0.800000011920929, + 0.35199999809265137, + 0.1599999964237213, + 1.0, + 0.5899999737739563, + 0.07670000195503235, + 0.11947499960660934 + ], + "Source": "" + }, + "data_source_color_map_inverted": false, + "data_source_nan_color_b": 0, + "data_source_nan_color_g": 191, + "data_source_nan_color_r": 128, + "data_source_solid_color_b": 255, + "data_source_solid_color_g": 255, + "data_source_solid_color_r": 255, + "data_source_using_default_preset": true, + "data_source_visibility": true, + "imported_data_path": "DataContainer", + "render_window_index": [ + { + "core_object_visibility": true, + "render_window_index": 1 + } + ] + }, + "item_type": "VXDataSource" + } + ], + "item_data": { + "bridge_object_file_path": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d", + "bridge_object_item_name": "Untitled Pipeline", + "bridge_object_uuid": "4c120bda-d8be-4784-894a-9ec8cc5c41f4" + }, + "item_type": "NXToVXBridge" + } + ] + }, + "window_state": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48UXRBZHZhbmNlZERvY2tpbmdTeXN0ZW0gVmVyc2lvbj0iMSIgVXNlclZlcnNpb249IjEiIENvbnRhaW5lcnM9IjEiPjxDb250YWluZXIgRmxvYXRpbmc9IjAiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0ifCIgQ291bnQ9IjEiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0iLSIgQ291bnQ9IjIiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0ifCIgQ291bnQ9IjIiPjxTcGxpdHRlciBPcmllbnRhdGlvbj0iLSIgQ291bnQ9IjIiPjxBcmVhIFRhYnM9IjEiIEN1cnJlbnQ9Im1fUGlwZWxpbmVEb2NrIj48V2lkZ2V0IE5hbWU9Im1fUGlwZWxpbmVEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PEFyZWEgVGFicz0iMiIgQ3VycmVudD0ibV9Cb29rbWFya3NEb2NrIj48V2lkZ2V0IE5hbWU9Im1fRmlsdGVyTGlzdERvY2siIENsb3NlZD0iMSIvPjxXaWRnZXQgTmFtZT0ibV9Cb29rbWFya3NEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PFNpemVzPjAgMCA8L1NpemVzPjwvU3BsaXR0ZXI+PEFyZWEgVGFicz0iNCIgQ3VycmVudD0ibV9WaXN1YWxpemF0aW9uRG9jayI+PFdpZGdldCBOYW1lPSJtX0ZpbHRlclBhcmFtZXRlcnNEb2NrIiBDbG9zZWQ9IjEiLz48V2lkZ2V0IE5hbWU9Im1fV29ya2Zsb3dQYXJhbWV0ZXJzRG9jayIgQ2xvc2VkPSIxIi8+PFdpZGdldCBOYW1lPSJtX1Zpc3VhbGl6YXRpb25Eb2NrIiBDbG9zZWQ9IjAiLz48V2lkZ2V0IE5hbWU9Im1fQ2hhcnRpbmdEb2NrIiBDbG9zZWQ9IjEiLz48L0FyZWE+PFNpemVzPjAgMTA5NCA8L1NpemVzPjwvU3BsaXR0ZXI+PFNwbGl0dGVyIE9yaWVudGF0aW9uPSJ8IiBDb3VudD0iMyI+PEFyZWEgVGFicz0iMSIgQ3VycmVudD0ibV9PdXRwdXREb2NrIj48V2lkZ2V0IE5hbWU9Im1fT3V0cHV0RG9jayIgQ2xvc2VkPSIxIi8+PC9BcmVhPjxBcmVhIFRhYnM9IjEiIEN1cnJlbnQ9Im1fSXNzdWVzRG9jayI+PFdpZGdldCBOYW1lPSJtX0lzc3Vlc0RvY2siIENsb3NlZD0iMSIvPjwvQXJlYT48QXJlYSBUYWJzPSIxIiBDdXJyZW50PSJtX1Bpbm5lZFBhcmFtZXRlcnNEb2NrIj48V2lkZ2V0IE5hbWU9Im1fUGlubmVkUGFyYW1ldGVyc0RvY2siIENsb3NlZD0iMSIvPjwvQXJlYT48U2l6ZXM+MCAwIDAgPC9TaXplcz48L1NwbGl0dGVyPjxTaXplcz43ODkgMCA8L1NpemVzPjwvU3BsaXR0ZXI+PFNpemVzPjEwOTQgPC9TaXplcz48L1NwbGl0dGVyPjwvQ29udGFpbmVyPjwvUXRBZHZhbmNlZERvY2tpbmdTeXN0ZW0+Cg==", + "workflow_mode": false +} \ No newline at end of file diff --git a/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_pilot.d3dpipeline b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_pilot.d3dpipeline new file mode 100644 index 0000000000..d793376c55 --- /dev/null +++ b/docs/figure-generation/EBSDSegmentFeatures/ebsd_segment_pilot.d3dpipeline @@ -0,0 +1,130 @@ +{ + "isDisabled": false, + "name": "ebsd_segment_pilot.d3dpipeline", + "pinnedParams": [], + "pipeline": [ + { + "args": { + "cell_attribute_matrix_name": { "value": "Cell Data", "version": 1 }, + "cell_ensemble_attribute_matrix_name": { "value": "Cell Ensemble Data", "version": 1 }, + "input_file": { "value": "/Users/mjackson/Workspace1/DREAM3D_Data/Data/SmallIN100/Slice_1.ang", "version": 1 }, + "output_image_geometry_path": { "value": "DataContainer", "version": 1 }, + "parameters_version": 1 + }, + "comments": "Read single EDAX .ang slice -> DataContainer", + "filter": { "name": "nx::core::ReadAngDataFilter", "uuid": "5b062816-79ac-47ce-93cb-e7966896bcbd" }, + "isDisabled": false + }, + { + "args": { + "euler_angles_array_path": { "value": "DataContainer/Cell Data/EulerAngles", "version": 1 }, + "parameters_version": 1, + "rotation_axis_angle": { "value": [0.0, 0.0, 1.0, 90.0], "version": 1 } + }, + "comments": "Rotate Euler reference frame for EDAX convention", + "filter": { "name": "nx::core::RotateEulerRefFrameFilter", "uuid": "0458edcd-3655-4465-adc8-b036d76138b5" }, + "isDisabled": false + }, + { + "args": { + "input_image_geometry_path": { "value": "DataContainer", "version": 1 }, + "keep_input_geometry_origin": { "value": false, "version": 1 }, + "output_image_geometry_path": { "value": "DataContainer", "version": 1 }, + "parameters_version": 1, + "remove_original_geometry": { "value": true, "version": 1 }, + "rotate_slice_by_slice": { "value": false, "version": 1 }, + "rotation_axis_angle": { "value": [0.0, 1.0, 0.0, 180.0], "version": 1 }, + "rotation_matrix": { "value": [[0.0,0.0,0.0],[0.0,0.0,0.0],[0.0,0.0,0.0]], "version": 1 }, + "rotation_representation_index": { "value": 0, "version": 1 } + }, + "comments": "Rotate sample reference frame for EDAX convention", + "filter": { "name": "nx::core::RotateSampleRefFrameFilter", "uuid": "d2451dc1-a5a1-4ac2-a64d-7991669dcffc" }, + "isDisabled": false + }, + { + "args": { + "array_thresholds_object": { + "value": { + "inverted": false, + "thresholds": [ + { "array_path": "DataContainer/Cell Data/Confidence Index", "comparison": 0, "component_index": 0, "inverted": false, "type": "array", "union": 0, "value": 0.1 } + ], + "type": "collection", + "union": 0 + }, + "version": 2 + }, + "created_mask_type": { "value": 10, "version": 1 }, + "custom_false_value": { "value": 0.0, "version": 1 }, + "custom_true_value": { "value": 1.0, "version": 1 }, + "output_data_array_name": { "value": "Mask", "version": 1 }, + "parameters_version": 1, + "use_custom_false_value": { "value": false, "version": 1 }, + "use_custom_true_value": { "value": false, "version": 1 } + }, + "comments": "Build Mask from Confidence Index >= 0.1", + "filter": { "name": "nx::core::MultiThresholdObjectsFilter", "uuid": "4246245e-1011-4add-8436-0af6bed19228" }, + "isDisabled": false + }, + { + "args": { + "input_orientation_array_path": { "value": "DataContainer/Cell Data/EulerAngles", "version": 1 }, + "input_representation_index": { "value": 0, "version": 1 }, + "output_orientation_array_name": { "value": "Quats", "version": 1 }, + "output_representation_index": { "value": 2, "version": 1 }, + "parameters_version": 1 + }, + "comments": "Convert Euler angles -> Quaternions (needed by Segment Features)", + "filter": { "name": "nx::core::ConvertOrientationsFilter", "uuid": "501e54e6-a66f-4eeb-ae37-00e649c00d4b" }, + "isDisabled": false + }, + { + "args": { + "cell_euler_angles_array_path": { "value": "DataContainer/Cell Data/EulerAngles", "version": 1 }, + "cell_ipf_colors_array_name": { "value": "IPFColors", "version": 1 }, + "cell_phases_array_path": { "value": "DataContainer/Cell Data/Phases", "version": 1 }, + "crystal_structures_array_path": { "value": "DataContainer/Cell Ensemble Data/CrystalStructures", "version": 1 }, + "mask_array_path": { "value": "DataContainer/Cell Data/Mask", "version": 1 }, + "parameters_version": 1, + "reference_dir": { "value": [0.0, 0.0, 1.0], "version": 1 }, + "use_mask": { "value": true, "version": 1 } + }, + "comments": "Compute IPF colors -> IPFColors (the BEFORE coloring)", + "filter": { "name": "nx::core::ComputeIPFColorsFilter", "uuid": "64cb4f27-6e5e-4dd2-8a03-0c448cb8f5e6" }, + "isDisabled": false + }, + { + "args": { + "active_array_name": { "value": "Active", "version": 1 }, + "cell_feature_attribute_matrix_name": { "value": "Cell Feature Data", "version": 1 }, + "cell_mask_array_path": { "value": "DataContainer/Cell Data/Mask", "version": 1 }, + "cell_phases_array_path": { "value": "DataContainer/Cell Data/Phases", "version": 1 }, + "cell_quats_array_path": { "value": "DataContainer/Cell Data/Quats", "version": 1 }, + "crystal_structures_array_path": { "value": "DataContainer/Cell Ensemble Data/CrystalStructures", "version": 1 }, + "feature_ids_array_name": { "value": "FeatureIds", "version": 1 }, + "input_image_geometry_path": { "value": "DataContainer", "version": 1 }, + "is_periodic": { "value": false, "version": 1 }, + "misorientation_tolerance": { "value": 5.0, "version": 1 }, + "neighbor_scheme_index": { "value": 0, "version": 1 }, + "parameters_version": 2, + "randomize_features": { "value": true, "version": 1 }, + "use_mask": { "value": true, "version": 1 } + }, + "comments": "Segment Features (Misorientation) -> FeatureIds (the AFTER coloring). randomize_features=true for visually distinct grain colors.", + "filter": { "name": "nx::core::EBSDSegmentFeaturesFilter", "uuid": "1810c2c7-63e3-41db-b204-a5821e6271c0" }, + "isDisabled": false + }, + { + "args": { + "export_file_path": { "value": "/Users/mjackson/Workspace1/DREAM3D-Build/NX-Com-Qt69-Vtk95-Rel/Bin/Data/Output/DocFigures/ebsd_segment_pilot.dream3d", "version": 1 }, + "parameters_version": 1, + "write_xdmf_file": { "value": false, "version": 1 } + }, + "comments": "Write everything to a regenerable .dream3d (not committed)", + "filter": { "name": "nx::core::WriteDREAM3DFilter", "uuid": "b3a95784-2ced-41ec-8d3d-0242ac130003" }, + "isDisabled": false + } + ], + "version": 1, + "workflowParams": [] +} diff --git a/docs/filter-figure-style.md b/docs/filter-figure-style.md new file mode 100644 index 0000000000..bd847b5d7b --- /dev/null +++ b/docs/filter-figure-style.md @@ -0,0 +1,109 @@ +# Filter Documentation Figure Style Guide + +Visual style and file conventions for figures generated to support filter documentation. Established during the documentation review project (batches 1+) so that figures across plugins look consistent. Reference palette: `docs/style_palette_final.svg` in this repo. + +## When to Add a Figure + +**Add a figure when:** + +- The filter operates on spatial data and the spatial relationship matters (kernels, neighborhoods, alignment, neighbor counts). +- The filter has a multi-step algorithm that benefits from a flowchart or sequence diagram. +- The filter transforms data in a way easier to show than describe (orientation conversions, geometry operations). +- The filter has parameters whose effect is non-obvious (kernel radius, dilation iterations, coordination number). + +**Skip a figure when:** + +- The filter performs a simple mathematical operation (radians-to-degrees, threshold). +- The filter is a basic I/O operation (read file, write file). +- The filter's behavior is fully captured by its parameter names (delete data, rename data). + +## Font + +``` +'Segoe UI', 'Helvetica Neue', Arial, sans-serif +``` + +| Element | Size | Weight | Color | +|---------|------|--------|-------| +| Figure title | 17-18px | Bold (700) | #2C3E50 | +| Section heading | 14px | Semibold (600) | #2C3E50 | +| Body text | 13px | Regular (400) | #555555 | +| Captions / notes | 11px | Italic | #888888 | + +## Color Palette + +### Primary (Diagram Elements) + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Focus | Dark Blue | #2874A6 | Center cell, primary element, section headers | +| Active | Light Blue | #AED6F1 | Kernel neighbors, included elements | +| Inactive | Light Gray | #E8ECF0 | Outside kernel, excluded elements | + +### Semantic Accents + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Danger / Warning | Red | #E74C3C | Thread-safety warnings, invalid approaches, common mistakes | +| Good / Correct | Green | #27AE60 | Recommended approaches, valid results, correct measurements | +| Annotation | Purple | #8E44AD | Brackets, dimensions, labels, measurements | +| Tip / Highlight | Amber | #E67E22 | Tips, parameters of interest, optional recommendations | + +### Supporting + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Primary text | Dark Slate | #2C3E50 | Headings, primary labels | +| Secondary text | Medium Gray | #5D6D7E | Secondary labels, descriptions | +| Card background | White | #FFFFFF | Figure card background | +| Formula background | Pale Blue | #EBF5FB | Formula / equation highlight boxes | +| Warning background | Pale Red | #FDEDEC | Warning callout box fill | +| Success background | Pale Green | #EAFAF1 | Success callout box fill | +| Annotation background | Pale Purple | #F4ECF7 | Note callout box fill | +| Tip background | Pale Amber | #FEF5E7 | Tip callout box fill | +| Page background | Off-white | #F0F2F5 | Outer page fill (when used) | + +## Callout Boxes + +Four semantic callout box types are available: + +- **Warning (Red)** — `!` icon, #FDEDEC background, #E74C3C border. For dangers and things to watch out for. +- **Good / Correct (Green)** — checkmark icon, #EAFAF1 background, #27AE60 border. For recommended approaches. +- **Note (Purple)** — `i` icon, #F4ECF7 background, #8E44AD border. For general annotations and clarifications. +- **Tip (Amber)** — star icon, #FEF5E7 background, #E67E22 border. For tips and highlights. + +## Section Headers + +Colored bars with white text, using the semantic color that best fits the section content. Default to blue (#2874A6) for neutral sections. + +## File Format and Naming + +- **Author as SVG.** Hand-write or generate the source. +- **Convert to PNG at 2x resolution** using `rsvg-convert -z 2 source.svg -o source.png`. The 2x scale provides a clean appearance on high-DPI displays. +- **Keep both SVG and PNG** in the plugin's `/docs/Images/` directory (e.g., `src/Plugins/OrientationAnalysis/docs/Images/`). +- **Reference the PNG** in the filter documentation markdown, not the SVG. +- **Naming convention:** `_.png`. Examples: + - `ComputeKernelAvgMisorientations_1D_Radius1.png` + - `ComputeAvgCAxes_HexagonalCAxis.png` + - `ComputeSchmids_SchmidFactor.png` + +## Markdown Reference Pattern + +Use the figure caption as the alt text and as a short Fig. N descriptor: + +```markdown +![Fig. 1: The geometric relationship between the tensile axis, slip plane, and slip direction that defines the Schmid factor.](Images/ComputeSchmids_SchmidFactor.png) +``` + +For paired before/after figures, use a 2-column table: + +```markdown +| Before | After | +|----------------------------------|----------------------------------| +| ![](Images/ExampleFilter_1.png) | ![](Images/ExampleFilter_2.png) | +``` + +## Reference SVGs + +- `docs/style_palette_final.svg` — canonical color palette, font, and callout box styles. Open in any SVG viewer to copy colors. +- Existing finished figures in `src/Plugins/OrientationAnalysis/docs/Images/` (especially `ComputeKernelAvgMisorientations_*.svg` and `ComputeAvgCAxes_HexagonalCAxis.svg`) are good reference templates to fork from. diff --git a/docs/style_palette_final.svg b/docs/style_palette_final.svg new file mode 100644 index 0000000000..877e1680cb --- /dev/null +++ b/docs/style_palette_final.svg @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + + + DREAM3DNX Figure Style Guide + Option A Refined: Ocean Blues + Semantic Accents + + + + + + + + Color Palette + + + Primary (Focus / Active / Inactive) + + + Focus + #2874A6 + + + Active + #AED6F1 + + + Inactive + #E8ECF0 + + + + Semantic Accents + + + Danger + #E74C3C + + + Good + #27AE60 + + + Annotation + #8E44AD + + + + Supporting + + + Text + #2C3E50 + + + Secondary Text + #5D6D7E + + + Highlight + #E67E22 + + + Backgrounds + + + Card BG + #FFFFFF + + + Formula BG + #EBF5FB + + + Page BG + #F0F2F5 + + + Warning BG + #FDEDEC + + + Success BG + #EAFAF1 + + + + + + + + + Typography + + Figure Title — 17-18px Bold + Section Heading — 14px Semibold + Body text and descriptions — 13px Regular, color #555 + Captions and notes — 11px Italic, color #888 + + Font Stack: + 'Segoe UI', 'Helvetica Neue', Arial, sans-serif + Cross-platform sans-serif with consistent rendering. + + + + + + + + Demo: Conceptual Diagram (Kernel Radius = 1) + + + + + ... + + + + + -1 + + + + Center + + + + +1 + + + + + ... + + + + + + R = 1 + + + + + R = 1 + + + + + + Kernel Size = 3 cells + + + + + + Focus / Center + + Active neighbor + + Outside kernel + + Annotation + + Good / Correct + + Warning / Danger + + + + + + + + + Demo: Semantic Callout Boxes + + + + + ! + Warning / Danger + DataArray is NOT thread-safe for concurrent access. + Writing to different indices from multiple threads may fail. + + + + + + Good / Correct + Use getDataRefAs<T>() when the parameter has + already validated that the object exists. + + + + + i + Note / Annotation + All Cells in the kernel are weighted equally during + averaging, though they are not equidistant from center. + + + + + + Tip / Highlight + Setting Z Radius to 0 restricts the kernel to a + single 2D slice — useful for thin-section data. + + + + + + + + Demo: Formula Box + + + Kernel Size = (2 × Radius) + 1 + + + + + + + + Usage Rules + + + + Blue — Default for all primary diagram elements (focus, active, borders, headers) + + + Purple — General annotations: brackets, dimensions, labels, measurements + + + Green — Positive semantics: correct approach, recommended, valid result + + + Red — Negative semantics: danger, thread-safety warning, common mistake, invalid + + + Amber — Tips, highlights, parameters of interest, optional but recommended + + \ No newline at end of file diff --git a/docs/superpowers/specs/2026-04-12-documentation-review-design.md b/docs/superpowers/specs/2026-04-12-documentation-review-design.md new file mode 100644 index 0000000000..cb5aea99d2 --- /dev/null +++ b/docs/superpowers/specs/2026-04-12-documentation-review-design.md @@ -0,0 +1,327 @@ +# DREAM3DNX Filter Documentation Review — Design Spec + +**Date:** 2026-04-12 +**Scope:** ~295 filter documentation files across SimplnxCore (154), OrientationAnalysis (53), and ITKImageProcessing (88) +**Branch:** Single PR when all batches are complete + +--- + +## 1. Goals + +### Primary Goals + +1. **Clarity for non-domain-experts** — Documentation should be understandable by a general engineer or scientist (audience B) who understands data processing concepts but may not know EBSD, crystallography, or microstructure terminology. +2. **Accessibility for non-native English speakers** — Straightforward language, short sentences, consistent terminology. Avoid idioms and ambiguous phrasing. +3. **Figures where they help** — Add conceptual diagrams for filters where visual explanation meaningfully aids understanding. Not every filter needs a figure (e.g., unit conversion filters don't). +4. **Parameter guidance** — Help users determine if a filter is appropriate for their use case and what parameter values to use. + +### Non-Goals (Future Work) + +- **Documentation architecture consolidation** — The existing concept docs are scattered across `wrapping/python/docs/source/`, `DREAM3DNX/Documentation/Sphinx/source/Concepts/`, and `Downloads/dream3d_infographics/`. Consolidating these into a single canonical location is a future task, not part of this review. +- **Sphinx format migration** — Current filter docs are Markdown. Converting to RST or standardizing format is a future task. +- **Real-world pipeline visualizations** — Pipeline-generated screenshots require DREAM3DNX automation tooling that is still in progress. This review will build a wishlist of desired visualizations, but generating them is a future task. + +--- + +## 2. Target Audience + +**Audience (B): General engineer/scientist** + +- Understands data processing, arrays, filtering, statistics concepts +- May know something about EBSD or have data they want to process +- Looks to DREAM3D to help with processing and needs help figuring out if a filter is appropriate +- May not know crystallography, quaternions, Euler angles, microstructure terminology +- English may not be their primary language + +The documentation should serve both this audience AND domain experts. Domain experts need parameter guidance and edge case documentation; non-experts need conceptual explanations of what the filter does and when to use it. + +--- + +## 3. Review Process + +### Phase 1: Triage Pass + +Claude autonomously reviews all ~295 filter docs and produces a tracker document (`docs/documentation_review_tracker.md`) that categorizes every filter into a priority tier. + +**Triage Rubric — 5 Dimensions:** + +| Dimension | What We're Assessing | +|-----------|---------------------| +| **Clarity** | Can audience (B) understand what the filter does and when to use it? | +| **Completeness** | Are all parameters explained? Are edge cases/caveats documented? | +| **Accessibility** | Is the language straightforward? Are domain terms explained or defined on first use? | +| **Figures Needed** | Would a conceptual diagram meaningfully help understanding? | +| **Real-World Viz** | Would a pipeline-generated screenshot/visualization add value? (wishlist only) | +| **Units Clarity** | Are all numeric parameters (sizes, distances, radii, tolerances, offsets) documented with explicit units (cells/voxels, degrees, physical units, dimensionless)? | + +Additionally, track: +- **Concept Links** — Domain concepts that should link to shared concept pages (e.g., Quaternions, Feature IDs, Image Geometry). When the same concept appears across 3+ filters, that signals a future shared concept page. + +**Priority Tiers:** + +| Tier | Description | Expected Action | +|------|-------------|-----------------| +| **Tier 1 (Critical)** | Domain-heavy filters with sparse or expert-only docs. Non-expert cannot understand what the filter does. | Major rewrite: add conceptual explanation, define terms, add figures | +| **Tier 2 (Important)** | Docs are functional but assume too much domain knowledge, or would clearly benefit from figures. | Moderate rewrite: add context, simplify language, generate figures | +| **Tier 3 (Polish)** | Docs are mostly clear but could benefit from minor language cleanup, consistency, or term definitions. | Light editing: clarify wording, add term definitions inline | +| **Tier 4 (Adequate)** | Docs are already clear, complete, and accessible. Simple utility/I/O filters that don't need more. | No action needed | + +### Phase 2: Batched Rewrites + +After triage, work through filters in batches grouped by functional category (e.g., all alignment filters, all orientation statistics filters). Working by category ensures: + +- Consistent explanations across related filters +- Shared domain concepts identified naturally +- Cross-references between related filters + +**Batch workflow:** + +1. Claude rewrites the batch of filter docs +2. Claude generates any needed conceptual figures (following the style guide) +3. User reviews the changes +4. User commits the batch when satisfied +5. Move to next batch + +All batches accumulate on one branch and are submitted as a single PR when complete. + +### Phase 3: Future Work + +- Consolidate shared concept pages into a canonical location within this repo +- Generate real-world pipeline visualizations using DREAM3DNX automation +- Consider RST migration for consistency with Sphinx build + +--- + +## 4. Tracker Document Format + +The tracker (`docs/documentation_review_tracker.md`) uses a two-level structure: + +**Level 1: Summary tables** — One table per priority tier for quick scanning. + +```markdown +## Tier 1: Critical + +| Filter | Plugin | Category | +|--------|--------|----------| +| ComputeAvgOrientations | OrientationAnalysis | Statistics | +| ConvertOrientations | OrientationAnalysis | Conversion | +``` + +**Level 2: Detailed checklists** — Below the summary tables, a checklist with full details for each filter, organized by tier. + +```markdown +### Tier 1 — Detailed Checklist + +- [ ] **ComputeAvgOrientations** (OrientationAnalysis) + - **Clarity:** Assumes deep quaternion knowledge; no intuitive explanation + - **Figures Needed:** Diagram showing orientations being averaged within a grain + - **Real-World Viz:** IPF color map showing average orientation assignment + - **Concept Links:** Quaternions, Symmetry Operators, Feature/Grain + - **Notes:** Only 36 lines; needs significant expansion + +- [ ] **ConvertOrientations** (OrientationAnalysis) + - **Clarity:** Lists 8 types but doesn't explain when to choose each + - **Figures Needed:** Visual comparison of orientation representations + - **Real-World Viz:** None + - **Concept Links:** Euler Angles, Quaternions, Rodrigues Vectors + - **Notes:** 113 lines but very dense; needs "which should I use?" guidance +``` + +Filters are checked off as their rewrites are completed and committed. + +--- + +## 5. Documentation Rewrite Guidelines + +### Structure for Each Filter Doc + +Every filter doc should follow this structure (scaled to the filter's complexity): + +1. **Title** — Filter name +2. **Group (Subgroup)** — Category classification +3. **Description** — What the filter does in plain language. Lead with the "what" and "when would I use this?" before diving into algorithm details. If domain terms are needed, define them on first use or link to a concept page. +4. **Algorithm Details** (if applicable) — How it works, with figures where they help +5. **Parameter Guidance** (if applicable) — What the parameters mean, what values are typical, how they affect results +6. **Figures** — Conceptual diagrams embedded as PNG images +7. **Auto-generated parameter table** — `% Auto generated parameter table will be inserted here` +8. **Example Pipelines** — Links to relevant pipelines +9. **License & Copyright** +10. **DREAM3D-NX Help** — Link to discussions + +### Writing Style + +- **Short sentences.** Prefer active voice. +- **Define domain terms on first use.** Example: "the misorientation (the angular difference between two crystal orientations)" +- **Lead with purpose.** Start with what the filter does and why someone would use it, not how it works internally. +- **Use "you" sparingly.** Prefer "the filter" or "this operation" for international clarity. +- **Avoid idioms and colloquialisms.** Write for translation-friendliness. +- **Be specific about parameters.** Don't just name them — explain what values are typical and how changing them affects results. +- **Always specify units for numeric parameters.** Any parameter that accepts a size, distance, radius, offset, tolerance, or similar numeric value must clearly state whether the value is in **cell/voxel units** (integer cell counts), **physical units** (micrometers, degrees, etc.), or **dimensionless** (e.g., a direction vector). This is critical for users who may not know whether a "radius of 3" means 3 cells or 3 micrometers. + +### Figure Decision Framework + +**Add a figure when:** +- The filter operates on spatial data and the spatial relationship matters (kernels, neighborhoods, alignment) +- The filter has a multi-step algorithm that benefits from a flowchart or step diagram +- The filter transforms data in a way that's easier to show than describe (orientation conversions, geometry operations) +- The filter has parameters whose effect is non-obvious (kernel radius, dilation distance) + +**Skip a figure when:** +- The filter performs a simple mathematical operation (radians to degrees, threshold) +- The filter is a basic I/O operation (read file, write file) +- The filter's behavior is fully captured by its parameter names (delete data, rename data) + +--- + +## 6. Figure Style Guide + +All generated figures follow a consistent visual style. The style guide is saved as `docs/style_palette_final.svg` for reference. + +### Font + +``` +'Segoe UI', 'Helvetica Neue', Arial, sans-serif +``` + +| Element | Size | Weight | Color | +|---------|------|--------|-------| +| Figure title | 17-18px | Bold (700) | #2C3E50 | +| Section heading | 14px | Semibold (600) | #2C3E50 | +| Body text | 13px | Regular (400) | #555555 | +| Captions/notes | 11px | Italic | #888888 | + +### Color Palette + +**Primary (Diagram Elements):** + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Focus | Dark Blue | #2874A6 | Center cell, primary element, section headers | +| Active | Light Blue | #AED6F1 | Kernel neighbors, included elements | +| Inactive | Light Gray | #E8ECF0 | Outside kernel, excluded elements | + +**Semantic Accents:** + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Danger/Warning | Red | #E74C3C | Thread-safety warnings, invalid approaches, common mistakes | +| Good/Correct | Green | #27AE60 | Recommended approaches, valid results, correct measurements | +| Annotation | Purple | #8E44AD | Brackets, dimensions, labels, measurements | +| Tip/Highlight | Amber | #E67E22 | Tips, parameters of interest, optional recommendations | + +**Supporting:** + +| Role | Color | Hex | Usage | +|------|-------|-----|-------| +| Primary text | Dark Slate | #2C3E50 | Headings, primary labels | +| Secondary text | Medium Gray | #5D6D7E | Secondary labels, descriptions | +| Card background | White | #FFFFFF | Figure card background | +| Formula background | Pale Blue | #EBF5FB | Formula/equation highlight boxes | +| Warning background | Pale Red | #FDEDEC | Warning callout box fill | +| Success background | Pale Green | #EAFAF1 | Success callout box fill | +| Annotation background | Pale Purple | #F4ECF7 | Note callout box fill | +| Tip background | Pale Amber | #FEF5E7 | Tip callout box fill | +| Page background | Off-white | #F0F2F5 | Outer page fill (when used) | + +### Callout Box Styles + +Four semantic callout box types are available: + +- **Warning (Red)** — `!` icon, #FDEDEC background, #E74C3C border. For dangers and things to watch out for. +- **Good/Correct (Green)** — checkmark icon, #EAFAF1 background, #27AE60 border. For recommended approaches. +- **Note (Purple)** — `i` icon, #F4ECF7 background, #8E44AD border. For general annotations and clarifications. +- **Tip (Amber)** — star icon, #FEF5E7 background, #E67E22 border. For tips and highlights. + +### Section Headers + +Colored bars with white text, using the semantic color that best fits the section content. Default to blue (#2874A6) for neutral sections. + +### Figure File Format + +- Generate as SVG source files +- Convert to PNG at 2x resolution using `rsvg-convert -z 2` +- Keep both SVG and PNG in `docs/Images/` (or the plugin's `docs/Images/` directory) +- Reference the PNG in documentation markdown +- Naming convention: `FilterName_Description.png` (e.g., `ComputeKernelAvgMisorientations_1D_Radius1.png`) + +--- + +## 7. Concept Link Strategy + +During triage and rewrite, track domain concepts that appear across multiple filters. When a concept appears in 3+ filter docs, it is a candidate for a shared concept page. + +**During this review:** +- Note concept links needed in the tracker document +- Define terms inline in filter docs on first use +- Use placeholder links in the format `[concept name](link-tbd)` where a shared page would be ideal + +**Future task:** +- Create shared concept pages in a canonical location within this repo +- Replace placeholder links with real links +- Consolidate existing concept docs from scattered locations + +**Likely concept pages based on initial survey:** +- Quaternions and Orientation Representations +- Feature IDs and Grains +- Image Geometry (Voxels, Dimensions, Spacing, Origin) +- Cell vs. Feature vs. Ensemble Data +- Misorientation +- Crystallographic Symmetry +- Reference Frames and Conventions + +--- + +## 8. Batch Organization + +Rewrites are organized by functional category. Suggested batch order (highest impact first): + +| Batch | Category | Approx. Count | Rationale | +|-------|----------|---------------|-----------| +| 1 | Orientation / Crystallography Statistics | ~15 | Highest domain complexity, most likely Tier 1 | +| 2 | Alignment Filters | ~8 | Spatial concepts benefit from figures | +| 3 | Segmentation / Feature Identification | ~10 | Core workflow, many users encounter these | +| 4 | Neighbor / Kernel Operations | ~12 | Spatial concepts, parameter guidance needed | +| 5 | Geometry Creation / Manipulation | ~15 | Many options, complex parameter interactions | +| 6 | Data Manipulation (Copy, Create, Delete, Rename) | ~20 | Mostly Tier 3-4, quick to process | +| 7 | I/O Filters (Read/Write) | ~15 | Mostly Tier 3-4 | +| 8 | Image Processing (ITK wrappers) | ~88 | Large batch, many follow a template pattern | +| 9 | Remaining SimplnxCore filters | ~varies | Catch-all for uncategorized | + +Exact batch boundaries will be refined after the triage pass reveals the actual distribution across tiers and categories. + +--- + +## 9. Workflow Summary + +``` +Phase 1: Triage + Claude reviews all ~295 filter docs + → Produces docs/documentation_review_tracker.md + → User reviews tracker, adjusts tiers if needed + → User commits tracker + +Phase 2: Batched Rewrites (repeat per batch) + Claude rewrites batch of related filter docs + Claude generates conceptual figures (SVG → PNG) + → User reviews changes + → User commits batch + → Check off completed filters in tracker + +Phase 3: Final + All batches complete + → Submit single PR to develop + → Future: concept page consolidation, real-world visualizations +``` + +--- + +## 10. Files Created During This Design Phase + +| File | Purpose | +|------|---------| +| `docs/style_palette_final.svg` | Visual style guide for all generated figures | +| `docs/style_palette_options.svg` | Palette options explored during design (can be deleted) | +| `kernel_radius_infographic.svg` | Original combined infographic (repo root, can be deleted) | +| `src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_*.svg` | Individual figure SVG sources | +| `src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_*.png` | Individual figure PNGs for documentation | +| `src/Plugins/OrientationAnalysis/docs/ComputeKernelAvgMisorientationsFilter.md` | Updated filter doc (serves as template for rewrite style) | diff --git a/docs/upstream-filter-sources.md b/docs/upstream-filter-sources.md new file mode 100644 index 0000000000..43ac21f919 --- /dev/null +++ b/docs/upstream-filter-sources.md @@ -0,0 +1,73 @@ +# Upstream Filter Sources + +Lookup table mapping common input arrays to the filter(s) that produce them. Used when writing the **Required Input Sources** section of a filter's documentation (see the `vv-filter-documentation` skill for the convention). + +This file is intended to be grown over time. As more filters are documented or new filters are added, append rows. The longer-term goal is to derive a dependency graph from this data so that pipeline order constraints can be visualized. + +## How To Use + +When documenting a filter that requires array X, look up X in the table below and link to the producing filter from your Required Input Sources section using MyST link syntax: + +```markdown +- **X** -- produced by [Producer Human Name](ProducerFilter.md). +``` + +For arrays produced by EBSD readers (Cell Quaternions, Cell Phases, ensemble Crystal Structures), name the typical readers explicitly rather than picking one: + +```markdown +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md); can also be produced from Euler angles by [Convert Orientations](ConvertOrientationsFilter.md). +``` + +## Conventions for Growing This Table + +- **One row per array, multiple producers comma-separated** in the Producer column when the array can come from several filters. +- **Plugin column** lists where the *producer* lives, not where the consuming filter lives. This drives the relative-path direction of MyST links. +- **Cross-plugin links** must use `../OtherPlugin/FilterFile.md`. Within-plugin links use `FilterFile.md` only. +- **Filter names match `humanName()`** in the .cpp, not the file name. The link target file is always `Filter.md`. +- **Notes column** (optional) for caveats: ensemble-level vs feature-level vs cell-level, optional inputs, mode dependencies (e.g., "only when *Find Coherence* is enabled"). + +## Lookup Table + +| Input Array | Producer (humanName) | Plugin | Notes | +|---|---|---|---| +| Cell Quaternions | Read H5EBSD / Read CTF Data / Read ANG Data / Convert Orientations | OrientationAnalysis | From EBSD readers, or computed from Euler angles | +| Cell Eulers | Same EBSD readers | OrientationAnalysis | Bunge convention Z-X-Z | +| Cell Phases | Same EBSD readers | OrientationAnalysis | Read alongside quaternions | +| Crystal Structures | Same EBSD readers / Create Ensemble Info | OrientationAnalysis | Ensemble-level array | +| Cell Feature Ids | Segment Features (Misorientation) | OrientationAnalysis | Misorientation-based grain segmentation | +| Cell Feature Ids | Segment Features (C-Axis Misalignment) | OrientationAnalysis | Hexagonal-only | +| Cell Feature Ids | Segment Features (Scalar) | SimplnxCore | Scalar-based segmentation | +| Cell Parent Ids | Merge Twins | OrientationAnalysis | Cell-level grouping into parent grains | +| Feature Parent Ids | Merge Twins | OrientationAnalysis | Feature-level mapping | +| Feature Phases | Compute Feature Phases | SimplnxCore | Feature-level (one phase per feature) | +| Feature Phases (Binary) | Compute Feature Phases (Binary) | SimplnxCore | Two-phase classification | +| Average Quaternions | Compute Average Orientations | OrientationAnalysis | Per-feature average orientation | +| Average Euler Angles | Compute Average Orientations | OrientationAnalysis | Bunge convention Z-X-Z | +| Average C-Axes | Compute Average C-Axis Orientations | OrientationAnalysis | Hexagonal-only | +| Feature Centroids | Compute Feature Centroids | SimplnxCore | Cell-of-mass per feature | +| Feature Equivalent Diameters | Compute Feature Sizes | SimplnxCore | Diameter of equal-volume sphere | +| Feature Num. Cells (NumElements) | Compute Feature Sizes | SimplnxCore | Cell count per feature | +| Feature Volumes | Compute Feature Sizes | SimplnxCore | Physical volume | +| Surface Features | Compute Surface Features | SimplnxCore | Boolean per feature | +| Surface Features | Compute Feature Neighbors | SimplnxCore | Optional output (enable *Store Surface Features Array*) | +| Biased Features | Compute Biased Features (Bounding Box) | SimplnxCore | Boolean per feature | +| Number of Neighbors | Compute Feature Neighbors | SimplnxCore | Count per feature | +| Contiguous Neighbor List | Compute Feature Neighbors | SimplnxCore | NeighborList of contiguous Feature Ids | +| Shared Surface Area List | Compute Feature Neighbors | SimplnxCore | NeighborList in cell-face-count units | +| Boundary Cells | Compute Feature Neighbors | SimplnxCore | Optional output (enable *Store Boundary Cells Array*) | +| Neighborhoods Neighbor List | Compute Feature Neighborhoods | SimplnxCore | Sphere-radius-based neighbor list | +| Mask | Multi-Threshold Objects | SimplnxCore | Boolean per cell | +| Boundary Euclidean Distances | Compute Euclidean Distance Map | SimplnxCore | Cell-level distance to nearest boundary | +| Triangle Geometry | Quick Surface Mesh | SimplnxCore | Surface mesh from Feature Ids | +| Face Labels | Quick Surface Mesh | SimplnxCore | Per-face Feature ID pair (2-component) | +| Face Normals | Compute Triangle Normals | SimplnxCore | 3-component, on triangle face data | +| Face Areas | Compute Triangle Areas | SimplnxCore | Single-component, on triangle face data | +| Node Types | Quick Surface Mesh | SimplnxCore | Per-vertex node classification | +| Cell Shifts Array (alignment) | Align Sections (Feature Centroid) | SimplnxCore | Output of any Align Sections * filter | +| Cell Shifts Array (alignment) | Align Sections (Misorientation) | OrientationAnalysis | | +| Cell Shifts Array (alignment) | Align Sections (Mutual Information) | OrientationAnalysis | | +| Confidence Index / Image Quality | Read H5EBSD / Read CTF Data / Read ANG Data | OrientationAnalysis | Per-cell scalar quality metric | + +## Future: Graph Representation + +The lookup table is naturally a directed dependency graph: each row is an edge from a producer filter to the input-array node. A separate downstream effort may convert this into a graph (DOT, Mermaid, or networked JSON) to support pipeline-order checking, "what would I need to run before X?" queries, and visual dependency maps. Keep that future use in mind when adding rows -- be precise about producer humanName so the data is machine-parseable. diff --git a/src/Plugins/ITKImageProcessing/CMakeLists.txt b/src/Plugins/ITKImageProcessing/CMakeLists.txt index 6e4192516e..2eeea095a7 100644 --- a/src/Plugins/ITKImageProcessing/CMakeLists.txt +++ b/src/Plugins/ITKImageProcessing/CMakeLists.txt @@ -185,7 +185,7 @@ if(NOT ITKIMAGEPROCESSING_LEAN_AND_MEAN) ITKMeanProjectionImageFilter # ITKStandardDeviationProjectionImage # ITKSumProjectionImage - # ITKMorphologicalWatershedFromMarkersImage + # ITKMorphologicalWatershedFromMarkersImage # disabled: incomplete wrapper, no marker-image input. See https://github.com/BlueQuartzSoftware/simplnx/issues/1639 # ITKSmoothingRecursiveGaussianImage # ----------------------------------------------------------------------------- diff --git a/src/Plugins/ITKImageProcessing/docs/ITKAbsImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKAbsImageFilter.md index 2ba968b9d6..92e89e4a00 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKAbsImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKAbsImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -itk::Math::abs() is used to perform the computation. +Computes the absolute value (magnitude) of each pixel. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -16,7 +16,7 @@ itk::Math::abs() is used to perform the computation. ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKAcosImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKAcosImageFilter.md index aad80ef7b6..675527b3ab 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKAcosImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKAcosImageFilter.md @@ -8,16 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -This filter is templated over the pixel type of the input image and the pixel type of the output image. - -The filter walks over all the pixels in the input image, and for each pixel does do the following: - -- cast the pixel value to double , -- apply the std::acos() function to the double value -- cast the double value resulting from std::acos() to the pixel type of the output image -- store the casted value into the output image. - -The filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND). +Computes the arccosine (inverse cosine) of each pixel. Input values should be in the range [-1, 1]; the output is in radians. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -25,7 +16,7 @@ The filter expects both images to have the same dimension (e.g. both 2D, or both ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKAdaptiveHistogramEqualizationImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKAdaptiveHistogramEqualizationImageFilter.md index 3dc4c9560a..2cb36994b0 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKAdaptiveHistogramEqualizationImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKAdaptiveHistogramEqualizationImageFilter.md @@ -1,6 +1,6 @@ # ITK Adaptive Histogram Equalization Image Filter -Power Law Adaptive Histogram Equalization. +Enhances local contrast using a tunable power-law adaptive histogram equalization. ## Group (Subgroup) @@ -8,21 +8,23 @@ ITKImageStatistics (ImageStatistics) ## Description -Histogram equalization modifies the contrast in an image. The AdaptiveHistogramEqualizationImageFilter is a superset of many contrast enhancing filters. By modifying its parameters (alpha, beta, and window), the AdaptiveHistogramEqualizationImageFilter can produce an adaptively equalized histogram or a version of unsharp mask (local mean subtraction). Instead of applying a strict histogram equalization in a window about a pixel, this filter prescribes a mapping function (power law) controlled by the parameters alpha and beta. +Histogram equalization redistributes pixel intensities to improve contrast. This filter is *adaptive*: instead of one global remap, it computes statistics in a local window around each pixel and applies a power-law mapping controlled by *alpha*, *beta*, and the window size. By tuning those parameters it can behave like classical histogram equalization, like an unsharp mask (local mean subtraction), or anything in between. -The parameter alpha controls how much the filter acts like the classical histogram equalization method (alpha=0) to how much the filter acts like an unsharp mask (alpha=1). +### Parameter Guidance -The parameter beta controls how much the filter acts like an unsharp mask (beta=0) to much the filter acts like pass through (beta=1, with alpha=1). +- **Alpha** — blends between classical histogram equalization (*alpha = 0*) and an unsharp mask (*alpha = 1*). Dimensionless, range 0-1. +- **Beta** — blends between an unsharp mask (*beta = 0*) and pass-through / no change (*beta = 1*, with *alpha = 1*). Dimensionless, range 0-1. +- **Radius** — the half-width of the local window per axis, **in pixels**; the window spans `2 × Radius + 1` pixels along each axis (default radius *5*). Larger windows use broader local statistics. -The parameter window controls the size of the region over which local statistics are calculated. The size of the window is controlled by SetRadius the default Radius is 5 in all directions. +### Required Input Sources -By altering alpha, beta and window, a host of equalization and unsharp masking filters is available. +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -The boundary condition ignores the part of the neighborhood outside the image, and over-weights the valid part of the neighborhood. +## Reference -For detail description, reference "Adaptive Image Contrast Enhancement using Generalizations of Histogram Equalization." J.Alex Stark. IEEE Transactions on Image Processing, May 2000. +J. Alex Stark, "Adaptive Image Contrast Enhancement using Generalizations of Histogram Equalization," *IEEE Transactions on Image Processing*, May 2000. -![](Images/ITKAdaptiveImageHistogram.png) +![Adaptive histogram equalization example.](Images/ITKAdaptiveImageHistogram.png) % Auto generated parameter table will be inserted here @@ -30,7 +32,7 @@ For detail description, reference "Adaptive Image Contrast Enhancement using Gen ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKApproximateSignedDistanceMapImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKApproximateSignedDistanceMapImageFilter.md index 612baef9d1..a2b14e6800 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKApproximateSignedDistanceMapImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKApproximateSignedDistanceMapImageFilter.md @@ -1,6 +1,6 @@ # ITK Approximate Signed Distance Map Image Filter -Create a map of the approximate signed distance from the boundaries of a binary image. +Computes a fast, approximate signed distance map from the object boundaries in a binary image. ## Group (Subgroup) @@ -8,33 +8,35 @@ ITKDistanceMap (DistanceMap) ## Description -The ApproximateSignedDistanceMapImageFilter takes as input a binary image and produces a signed distance map. Each pixel value in the output contains the approximate distance from that pixel to the nearest "object" in the binary image. This filter differs from the DanielssonDistanceMapImageFilter in that it calculates the distance to the "object edge" for pixels within the object. +A **distance map** replaces every pixel with its distance to the nearest object boundary. This filter produces a **signed** distance map: pixels inside an object are given **negative** distances, and pixels outside an object are given **positive** distances. The magnitude of each value is the (approximate) distance, in **pixels**, from that pixel to the closest object boundary. -Negative values in the output indicate that the pixel at that position is within an object in the input image. The absolute value of a negative pixel represents the approximate distance to the nearest object boundary pixel. +The distances are **Chamfer distances**, a fast approximation to true Euclidean distance. This filter trades some accuracy for speed. If you need a closer approximation to Euclidean distance, use the [Danielsson](ITKDanielssonDistanceMapImageFilter.md) or [Signed Maurer](ITKSignedMaurerDistanceMapImageFilter.md) distance maps instead. -WARNING: This filter requires that the output type be floating-point. Otherwise internal calculations will not be performed to the appropriate precision, resulting in completely incorrect (read: zero-valued) output. +Use a signed distance map when you need a smooth field that grows away from object boundaries in both directions — for example, as a speed/level-set input, for shape morphing, or to find points a fixed distance from a feature edge. -The distances computed by this filter are Chamfer distances, which are only an approximation to Euclidean distances, and are not as exact approximations as those calculated by the DanielssonDistanceMapImageFilter . On the other hand, this filter is faster. +> Note: distances are computed and stored as floating-point values. Choose a floating-point output array type; an integer output cannot represent fractional or negative distances correctly. -This filter requires that an "inside value" and "outside value" be set as parameters. The "inside value" is the intensity value of the binary image which corresponds to objects, and the "outside value" is the intensity of the background. (A typical binary image often represents objects as black (0) and background as white (usually 255), or vice-versa.) Note that this filter is slightly faster if the inside value is less than the outside value. Otherwise an extra iteration through the image is required. +### Parameter Guidance -This filter uses the FastChamferDistanceImageFilter and the IsoContourDistanceImageFilter internally to perform the distance calculations. +The binary input is interpreted using two intensity values: -## See Also - -- [DanielssonDistanceMapImageFilter](https://itk.org/Doxygen/html/classitk_1_1DanielssonDistanceMapImageFilter.html) +- **Inside Value** — the pixel intensity that marks the **object** (foreground). Default *1*. +- **Outside Value** — the pixel intensity that marks the **background**. Default *0*. -- [SignedDanielssonDistanceMapImageFilter](https://itk.org/Doxygen/html/classitk_1_1SignedDanielssonDistanceMapImageFilter.html) +For example, in a typical mask where objects are labeled *1* and background is *0*, set *Inside Value = 1* and *Outside Value = 0*. If your mask labels objects as *255* on a *0* background, set *Inside Value = 255* and *Outside Value = 0*. -- [SignedMaurerDistanceMapImageFilter](https://itk.org/Doxygen/html/classitk_1_1SignedMaurerDistanceMapImageFilter.html) +The filter runs slightly faster when *Inside Value* is less than *Outside Value*; otherwise an extra pass over the image is required. -- [FastChamferDistanceImageFilter](https://itk.org/Doxygen/html/classitk_1_1FastChamferDistanceImageFilter.html) +### Required Input Sources -- [IsoContourDistanceImageFilter](https://itk.org/Doxygen/html/classitk_1_1IsoContourDistanceImageFilter.html) +Requires a binary (two-value) image where one intensity marks objects and the other marks background. This is typically a segmentation mask produced by a thresholding or segmentation filter upstream. -## Author +## See Also -- Zach Pincus +- [ITK Danielsson Distance Map Image Filter](ITKDanielssonDistanceMapImageFilter.md) +- [ITK Signed Danielsson Distance Map Image Filter](ITKSignedDanielssonDistanceMapImageFilter.md) +- [ITK Signed Maurer Distance Map Image Filter](ITKSignedMaurerDistanceMapImageFilter.md) +- [ITK ApproximateSignedDistanceMapImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1ApproximateSignedDistanceMapImageFilter.html) % Auto generated parameter table will be inserted here @@ -42,8 +44,8 @@ This filter uses the FastChamferDistanceImageFilter and the IsoContourDistanceIm ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKAsinImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKAsinImageFilter.md index 765c027fc5..98cab13d85 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKAsinImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKAsinImageFilter.md @@ -8,16 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -This filter is templated over the pixel type of the input image and the pixel type of the output image. - -The filter walks over all the pixels in the input image, and for each pixel does the following: - -- cast the pixel value to double , -- apply the std::asin() function to the double value, -- cast the double value resulting from std::asin() to the pixel type of the output image, -- store the casted value into the output image. - -The filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND) +Computes the arcsine (inverse sine) of each pixel. Input values should be in the range [-1, 1]; the output is in radians. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -25,7 +16,7 @@ The filter expects both images to have the same dimension (e.g. both 2D, or both ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKAtanImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKAtanImageFilter.md index dedf8ccc50..73cf9a1644 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKAtanImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKAtanImageFilter.md @@ -8,14 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -This filter is templated over the pixel type of the input image and the pixel type of the output image. - -The filter walks over all the pixels in the input image, and for each pixel does the following: - -- cast the pixel value to double , -- apply the std::atan() function to the double value, -- cast the double value resulting from std::atan() to the pixel type of the output image, -- store the cast value into the output image. +Computes the arctangent (inverse tangent) of each pixel. The output is in radians. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -23,7 +16,7 @@ The filter walks over all the pixels in the input image, and for each pixel does ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryContourImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryContourImageFilter.md index ed8e1ad590..5817a138f0 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryContourImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryContourImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Contour Image Filter -Labels the pixels on the border of the objects in a binary image. +Extracts the one-pixel-wide outlines of the foreground objects in a binary image. ## Group (Subgroup) @@ -8,19 +8,21 @@ ITKImageLabel (ImageLabel) ## Description -BinaryContourImageFilter takes a binary image as input, where the pixels in the objects are the pixels with a value equal to ForegroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue. +This filter keeps only the **border** pixels of the foreground objects in a binary image. A foreground pixel (one whose value equals the *Foreground Value*) is retained as a contour pixel if it is adjacent to a background pixel; all interior and background pixels are set to the *Background Value*. The result is the outline of each object. -The connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours. +### Parameter Guidance - +- **Foreground Value** — the pixel value that marks objects in the input. Contour pixels keep this value in the output. Default *1*. +- **Background Value** — the value written for non-contour pixels (interior and background). Default *0*. +- **Fully Connected** — controls neighbor connectivity. With it off, only face-sharing neighbors count (thinner contours); with it on, edge- and corner-sharing neighbors also count, producing **thicker contours**. -### Author +### Required Input Sources - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). For outlines of a multi-region label image, see [ITK Label Contour Image Filter](ITKLabelContourImageFilter.md). -### Related Filters +## Reference -- LabelContourImageFilter BinaryErodeImageFilter SimpleContourExtractorImageFilter +Insight Journal: % Auto generated parameter table will be inserted here @@ -28,7 +30,7 @@ The connectivity can be changed to minimum or maximum connectivity with SetFully ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryDilateImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryDilateImageFilter.md index c903331861..dc77007bd1 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryDilateImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryDilateImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Dilate Image Filter -Fast binary dilation of a single intensity value in the image. +Grows (dilates) the foreground objects of a binary or segmented image. ## Group (Subgroup) @@ -8,39 +8,39 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -BinaryDilateImageFilter is a binary dilation morphologic operation on the foreground of an image. Only the value designated by the intensity value "SetForegroundValue()" (alias as SetDilateValue() ) is considered as foreground, and other intensity values are considered background. +**Dilation** is a morphological operation that grows the foreground region of an image: a small probe shape called the **structuring element** is swept over the image, and any background pixel touched by the structuring element when it is centered on a foreground pixel becomes foreground. Dilation fills small gaps, connects nearby objects, and enlarges objects by the radius of the structuring element. (The inverse operation is [ITK Binary Erode Image Filter](ITKBinaryErodeImageFilter.md); combining the two gives [opening](ITKBinaryMorphologicalOpeningImageFilter.md) and [closing](ITKBinaryMorphologicalClosingImageFilter.md).) -Grayscale images can be processed as binary images by selecting a "ForegroundValue" (alias "DilateValue"). Pixel values matching the dilate value are considered the "foreground" and all other pixels are "background". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular "segment number" can be processed. ForegroundValue defaults to the maximum possible value of the PixelType. +The filter treats one chosen value as foreground. This makes it work directly on segmented images: if segment 1 has value 1, segment 2 has value 2, and so on, set *Foreground Value* to the segment number you want to dilate. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement . +### Parameter Guidance -This implementation is based on the papers: +- **Foreground Value** — the pixel value treated as the object/foreground (everything else is background). Default *1*. +- **Background Value** — the value used for background pixels. Default *0*. +- **Boundary To Foreground** — controls whether the region just outside the image border is treated as foreground or background, which affects objects that touch the edge of the volume. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Objects grow by this amount. -L.Vincent "Morphological transformations of binary images with -arbitrary structuring elements", and +#### Kernel Type -N.Nikopoulos et al. "An efficient algorithm for 3d binary -morphological transformations with 3d structuring elements -for arbitrary size and shape". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.* ImageToImageFilter BinaryErodeImageFilter BinaryMorphologyImageFilter - -![](Images/ITKBinaryDilation.png) - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + +![Binary dilation example.](Images/ITKBinaryDilation.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryErodeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryErodeImageFilter.md index 7a86eb1916..292ea590af 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryErodeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryErodeImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Erode Image Filter -Fast binary erosion of a single intensity value in the image. +Shrinks (erodes) the foreground objects of a binary or segmented image. ## Group (Subgroup) @@ -8,39 +8,39 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -BinaryErodeImageFilter is a binary erosion morphologic operation on the foreground of an image. Only the value designated by the intensity value "SetForegroundValue()" (alias as SetErodeValue() ) is considered as foreground, and other intensity values are considered background. +**Erosion** is a morphological operation that shrinks the foreground region of an image: a small probe shape called the **structuring element** is swept over the image, and a foreground pixel is kept only if the structuring element centered on it fits entirely within the foreground. Erosion removes small specks, separates objects connected by thin bridges, and shrinks objects by the radius of the structuring element. Eroded pixels are set to the *Background Value*. (The inverse operation is [ITK Binary Dilate Image Filter](ITKBinaryDilateImageFilter.md); combining the two gives [opening](ITKBinaryMorphologicalOpeningImageFilter.md) and [closing](ITKBinaryMorphologicalClosingImageFilter.md).) -Grayscale images can be processed as binary images by selecting a "ForegroundValue" (alias "ErodeValue"). Pixel values matching the erode value are considered the "foreground" and all other pixels are "background". This is useful in processing segmented images where all pixels in segment #1 have value 1 and pixels in segment #2 have value 2, etc. A particular "segment number" can be processed. ForegroundValue defaults to the maximum possible value of the PixelType. The eroded pixels will receive the BackgroundValue (defaults to NumericTraits::NonpositiveMin() ). +The filter treats one chosen value as foreground, so it works directly on segmented images: set *Foreground Value* to the segment number you want to erode. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. A reasonable choice of structuring element is itk::BinaryBallStructuringElement . +### Parameter Guidance -This implementation is based on the papers: +- **Foreground Value** — the pixel value treated as the object/foreground. Default *1*. +- **Background Value** — the value assigned to eroded pixels (and background). Default *0* (i.e. the lowest pixel value). +- **Boundary To Foreground** — controls whether the region just outside the image border is treated as foreground or background, which affects objects that touch the edge of the volume. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Objects shrink by this amount. -L.Vincent "Morphological transformations of binary images with -arbitrary structuring elements", and +#### Kernel Type -N.Nikopoulos et al. "An efficient algorithm for 3d binary -morphological transformations with 3d structuring elements -for arbitrary size and shape". IEEE Transactions on Image Processing. Vol. 9. No. 3. 2000. pp. 283-286.* ImageToImageFilter BinaryDilateImageFilter BinaryMorphologyImageFilter - -![](Images/ITKBinaryErosion.png) - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + +![Binary erosion example.](Images/ITKBinaryErosion.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalClosingImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalClosingImageFilter.md index 4623b6b753..e15f409b5a 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalClosingImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalClosingImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Morphological Closing Image Filter -binary morphological closing of an image. +Fills small holes and thin gaps in the foreground of a binary image (dilation followed by erosion). ## Group (Subgroup) @@ -8,30 +8,32 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -This filter removes small (i.e., smaller than the structuring element) holes and tube like structures in the interior or at the boundaries of the image. The morphological closing of an image "f" is defined as: Closing(f) = Erosion(Dilation(f)). +**Closing** is a morphological operation that fills small holes and thin gaps inside and along the borders of foreground objects, without much changing their overall size. It is a **dilation followed by an erosion** using the same structuring element: `Closing(f) = Erosion(Dilation(f))`. The dilation fills features smaller than the **structuring element** (the probe shape swept over the image), and the following erosion shrinks the objects back to roughly their original size. Use it to close up pinholes and cracks in segmented regions. The inverse pairing is [ITK Binary Morphological Opening Image Filter](ITKBinaryMorphologicalOpeningImageFilter.md), which removes small specks instead. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. +### Parameter Guidance -This code was contributed in the Insight Journal paper: "Binary morphological closing and opening image filters" by Lehmann G. +- **Foreground Value** — the pixel value treated as the object/foreground. Default *1*. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Holes/gaps smaller than this are filled. +- **Safe Border** — when on (default), a temporary border is added around the image during processing to avoid edge artifacts and removed afterward. -### Author +#### Kernel Type - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +The *Kernel Type* parameter selects the structuring element shape: -### Related Filters +- **Annulus [0]**: A ring-shaped structuring element. +- **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. +- **Box [2]**: A rectangular/cuboid structuring element. +- **Cross [3]**: A cross-shaped structuring element. -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter +### Required Input Sources -![](Images/ITKBinaryClosing.png) +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). -### Kernel Type +![Binary closing example.](Images/ITKBinaryClosing.png) -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +## Reference -- **Annulus [0]**: A ring-shaped structuring element. -- **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. -- **Box [2]**: A rectangular/cuboid structuring element. -- **Cross [3]**: A cross-shaped structuring element. +G. Lehmann, "Binary morphological closing and opening image filters," Insight Journal, . % Auto generated parameter table will be inserted here @@ -39,7 +41,7 @@ The *Kernel Type* parameter selects the structuring element used for the morphol ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalOpeningImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalOpeningImageFilter.md index 59f5c04986..fad610ed5c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalOpeningImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryMorphologicalOpeningImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Morphological Opening Image Filter -binary morphological opening of an image. +Removes small foreground specks and thin protrusions from a binary image (erosion followed by dilation). ## Group (Subgroup) @@ -8,30 +8,32 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -This filter removes small (i.e., smaller than the structuring element) structures in the interior or at the boundaries of the image. The morphological opening of an image "f" is defined as: Opening(f) = Dilatation(Erosion(f)). +**Opening** is a morphological operation that removes small foreground features — isolated specks, thin protrusions, and narrow bridges — that are smaller than the **structuring element** (the probe shape swept over the image), while leaving larger objects close to their original size. It is an **erosion followed by a dilation** using the same structuring element: `Opening(f) = Dilation(Erosion(f))`. The erosion deletes the small features and the following dilation restores the surviving objects to roughly their original size. The inverse pairing is [ITK Binary Morphological Closing Image Filter](ITKBinaryMorphologicalClosingImageFilter.md), which fills small holes instead. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. +### Parameter Guidance -This code was contributed in the Insight Journal paper: "Binary morphological closing and opening image filters" by Lehmann G. +- **Foreground Value** — the pixel value treated as the object/foreground. Default *1*. +- **Background Value** — the value used for removed/background pixels. Default *0*. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Features smaller than this are removed. -### Author +#### Kernel Type - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +The *Kernel Type* parameter selects the structuring element shape: -### Related Filters +- **Annulus [0]**: A ring-shaped structuring element. +- **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. +- **Box [2]**: A rectangular/cuboid structuring element. +- **Cross [3]**: A cross-shaped structuring element. -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleErodeImageFilter +### Required Input Sources -![](Images/ITKBinaryOpening.png) +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). -### Kernel Type +![Binary opening example.](Images/ITKBinaryOpening.png) -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +## Reference -- **Annulus [0]**: A ring-shaped structuring element. -- **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. -- **Box [2]**: A rectangular/cuboid structuring element. -- **Cross [3]**: A cross-shaped structuring element. +G. Lehmann, "Binary morphological closing and opening image filters," Insight Journal, . % Auto generated parameter table will be inserted here @@ -39,7 +41,7 @@ The *Kernel Type* parameter selects the structuring element used for the morphol ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryOpeningByReconstructionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryOpeningByReconstructionImageFilter.md index 2cb606eb1c..666324b2c0 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryOpeningByReconstructionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryOpeningByReconstructionImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Opening By Reconstruction Image Filter -Binary morphological opening by reconstruction of an image. +Removes small foreground objects from a binary image while preserving the exact shape of the objects that remain. ## Group (Subgroup) @@ -8,36 +8,45 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -This filter removes small (i.e., smaller than the structuring element) objects in the image. It is defined as: Opening(f) = ReconstructionByDilatation(Erosion(f)). +Like a standard morphological **opening**, this filter removes foreground objects that are smaller than the **structuring element** (the small probe shape — a ball, box, etc. — that is swept over the image). Unlike a plain opening, it then uses **morphological reconstruction** to restore the surviving objects to their original shape. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel. +A plain opening erodes (shrinks) the image and then dilates (regrows) it. The erosion deletes small objects, but it also rounds off and shrinks the corners of the larger objects that survive. Opening *by reconstruction* avoids that side effect: after the erosion deletes the small objects, the reconstruction step regrows each surviving object back to exactly its original boundary instead of the rounded, dilated approximation. The net effect is "delete the small objects, leave the rest untouched." -### Author - - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +The result is defined as `Opening(f) = ReconstructionByDilation(Erosion(f))`. -### Related Filters +![Binary opening by reconstruction.](Images/ITKOpeningByReconstruction.png) -This implementation was taken from the Insight Journal paper: * MorphologyImageFilter , OpeningByReconstructionImageFilter , BinaryClosingByReconstructionImageFilter +### Parameter Guidance -![](Images/ITKOpeningByReconstruction.png) +- **Foreground Value** — the pixel value that counts as object/foreground (everything else is background). For a segmented or thresholded image, this is the label of the region to process. +- **Background Value** — the value written where foreground is removed. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Objects smaller than this are removed. +- **Fully Connected** — controls neighbor connectivity during reconstruction (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on a binary/segmented image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). Compare with the standard [ITK Binary Morphological Opening Image Filter](ITKBinaryMorphologicalOpeningImageFilter.md), which does not preserve object shape. + +### Author + +Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. (Insight Journal: ) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryProjectionImageFilter.md index 28ab3ff615..a784393403 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryProjectionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryProjectionImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Projection Image Filter -Binary projection. +Collapses a 3D volume to a 2D image using a logical-OR projection: a pixel is foreground if any voxel along the axis is foreground. ## Group (Subgroup) @@ -8,30 +8,24 @@ ITKImageStatistics (ImageStatistics) ## Description -Image projection is a very common task in image analysis to reduce the dimension of an image. A base -filter is provided with some specialized filters which implement different projection methods. +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses a **binary (logical-OR) rule**: for each line of voxels parallel to the selected axis, the output pixel is set to the *Foreground Value* if **any** voxel along that line equals the *Foreground Value*; otherwise it is set to the *Background Value*. The result has one fewer dimension than the input. -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at +Use binary projection to answer "is this feature present anywhere along this axis?" — for example, to flatten a segmented 3D mask into a 2D footprint showing where labeled material exists at any depth. -## IMPORTANT NOTE +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` -This filter will change the dimensionality of the Image Geometry that the data is tied to. This has the side effect of also -changing **every** Data Array that is store in the same AttributeMatrix as the input and output data array. +### Parameter Guidance -### Author +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. +- *Foreground Value* — the voxel value treated as "foreground." An output pixel is set to this value if any voxel along the collapsed line matches it. Defaults to *1*. +- *Background Value* — the value written to output pixels where no foreground voxel was found along the line. Defaults to *0*. +- *Perform In-Place* — when enabled, the projection replaces the input geometry rather than creating a new one. - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +### Required Input Sources -### Related Filters - -- ProjectionImageFilter -- MedianProjectionImageFilter -- MeanProjectionImageFilter -- MeanProjectionImageFilter -- MaximumProjectionImageFilter -- MinimumProjectionImageFilter -- StandardDeviationProjectionImageFilter -- SumProjectionImageFilter +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -39,7 +33,7 @@ changing **every** Data Array that is store in the same AttributeMatrix as the i ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryThinningImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryThinningImageFilter.md index 555b11cbdd..02cecd4aa5 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryThinningImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryThinningImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Thinning Image Filter -This filter computes one-pixel-wide edges of the input image. +Reduces the foreground objects of a binary image to a one-pixel-wide skeleton. ## Group (Subgroup) @@ -8,17 +8,19 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -This class is parameterized over the type of the input image and the type of the output image. +This filter computes the **skeleton** (medial axis) of the foreground objects in a binary image: it repeatedly removes boundary pixels until each object is reduced to a connected, one-pixel-wide line that still captures the object's overall shape and connectivity. Skeletons are useful for analyzing the topology of elongated structures — measuring branch lengths, counting junctions, or tracing networks of fibers, cracks, or vessels. -The input is assumed to be a binary image. If the foreground pixels of the input image do not have a value of 1, they are rescaled to 1 internally to simplify the computation. +The input is treated as a binary image; if the foreground pixels are not already valued 1 they are rescaled to 1 internally. In the output, background pixels are 0 and the skeleton pixels are 1. -The filter will produce a skeleton of the object. The output background values are 0, and the foreground values are 1. +**Caveat:** this is a sequential 2D thinning algorithm (the classic Gonzalez & Woods method). On a 3D volume it operates slice by slice rather than producing a true 3D skeleton, and its run time grows with image size. -This filter is a sequential thinning algorithm and known to be computational time dependable on the image size. The algorithm corresponds with the 2D implementation described in: +### Required Input Sources -Rafael C. Gonzales and Richard E. Woods. Digital Image Processing. Addison Wesley, 491-494, (1993). +Operates on a binary image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). -To do: Make this filter ND.* MorphologyImageFilter +## Reference + +Rafael C. Gonzalez and Richard E. Woods. *Digital Image Processing*. Addison Wesley, 491-494 (1993). % Auto generated parameter table will be inserted here @@ -26,7 +28,7 @@ To do: Make this filter ND.* MorphologyImageFilter ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBinaryThresholdImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBinaryThresholdImageFilter.md index 6bb4a0232f..2ff3d6d5ad 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBinaryThresholdImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBinaryThresholdImageFilter.md @@ -1,6 +1,6 @@ # ITK Binary Threshold Image Filter -Binarize an input image by thresholding. +Produces a two-value (binary) image by marking pixels whose intensity falls inside a chosen range. ## Group (Subgroup) @@ -8,19 +8,23 @@ ITKThresholding (Thresholding) ## Description -This filter produces an output image whose pixels are either one of two values ( OutsideValue or InsideValue ), depending on whether the corresponding input image pixels lie between the two thresholds ( LowerThreshold and UpperThreshold ). Values equal to either threshold is considered to be between the thresholds. +This filter binarizes an image. Every pixel whose value lies **between the Lower Threshold and Upper Threshold (inclusive)** is set to the *Inside Value*; every other pixel is set to the *Outside Value*: -More precisely \f[ Output(x_i) = \begin{cases} InsideValue & \text{if \f$LowerThreshold \leq x_i \leq UpperThreshold\f$} \\ OutsideValue & \text{otherwise} \end{cases} \f] +$$ +\text{output}(x) = \begin{cases} \text{InsideValue} & \text{if } \text{LowerThreshold} \le x \le \text{UpperThreshold} \\ \text{OutsideValue} & \text{otherwise} \end{cases} +$$ -This filter is templated over the input image type and the output image type. +### Parameter Guidance -The filter expect both images to have the same number of dimensions. +- **Lower Threshold** / **Upper Threshold** — the bounds of the "inside" range, in the **input image's intensity units**. By default the lower bound is the smallest possible pixel value and the upper bound is the largest, so the range spans everything; in practice you usually set only one of the two — a lower bound to keep everything *above* a value, or an upper bound to keep everything *below* a value. +- **Inside Value** — the output value written for pixels inside the range (a `uint8` label, default *1*). +- **Outside Value** — the output value written for pixels outside the range (a `uint8` label, default *0*). -The default values for LowerThreshold and UpperThreshold are: LowerThreshold = NumericTraits::NonpositiveMin() ; UpperThreshold = NumericTraits::max() ; Therefore, generally only one of these needs to be set, depending on whether the user wants to threshold above or below the desired threshold. +![Binary threshold result.](Images/ITKBinaryThreshold.png) -Set the thresholds. The default lower threshold is NumericTraits::NonpositiveMin() . The default upper threshold is NumericTraits::max . An exception is thrown if the lower threshold is greater than the upper threshold. +### Required Input Sources -![](Images/ITKBinaryThreshold.png) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -28,7 +32,7 @@ Set the thresholds. The default lower threshold is NumericTraits ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBlackTopHatImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKBlackTopHatImageFilter.md index 73458c3797..aaa5726353 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBlackTopHatImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKBlackTopHatImageFilter.md @@ -1,6 +1,6 @@ # ITK Black Top Hat Image Filter -Black top hat extracts local minima that are smaller than the structuring element. +Extracts small dark features by subtracting the original image from its grayscale closing. ## Group (Subgroup) @@ -8,35 +8,40 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Black top hat extracts local minima that are smaller than the structuring element. It subtracts the background from the input image. The output of the filter transforms the black valleys into white peaks. +The **black top-hat** isolates small **dark** features — dark spots and narrow dark valleys smaller than the **structuring element** (the probe shape swept over the image). It is computed as the grayscale **closing** of the image minus the original image, which turns the dark valleys into bright peaks on a flat (near-zero) background. A common use is correcting uneven dark background or extracting small dark details for measurement. The bright-feature counterpart is [ITK White Top Hat Image Filter](ITKWhiteTopHatImageFilter.md). -Top-hats are described in Chapter 4.5 of Pierre Soille's book "Morphological Image Analysis: Principles and Applications", Second Edition, Springer, 2003. +### Parameter Guidance -### Author +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). It sets the size scale: features smaller than the structuring element are extracted, larger structures are removed. +- **Safe Border** — when on (default), a temporary border is added during processing to avoid edge artifacts and removed afterward. - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +#### Kernel Type -### Related Filters - -![](Images/ITKBlackTopHat_1.png) -![](Images/ITKBlackTopHat_2.png) - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Black top-hat example.](Images/ITKBlackTopHat_1.png) +![Black top-hat example.](Images/ITKBlackTopHat_2.png) + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 4.5). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKClosingByReconstructionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKClosingByReconstructionImageFilter.md index 87bd6f5303..2dab7bb50e 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKClosingByReconstructionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKClosingByReconstructionImageFilter.md @@ -1,6 +1,6 @@ # ITK Closing By Reconstruction Image Filter -Closing by reconstruction of an image. +Fills small dark gaps in a grayscale image while preserving the shape of the structures that remain. ## Group (Subgroup) @@ -8,39 +8,40 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -This filter is similar to the morphological closing, but contrary to the morphological closing, the closing by reconstruction preserves the shape of the components. The closing by reconstruction of an image "f" is defined as: +A standard morphological **closing** (dilation followed by erosion) fills in small dark holes and gaps that are smaller than the **structuring element**, but it also distorts the shapes of the larger features it touches. **Closing by reconstruction** achieves the same hole-filling effect while preserving the exact shape of the structures, by replacing the final erosion with a morphological reconstruction step. -ClosingByReconstruction(f) = ErosionByReconstruction(f, Dilation(f)). +It is defined as `ClosingByReconstruction(f) = ErosionByReconstruction(Dilation(f))`. In addition to filling small dark gaps, the operation tends to raise the contrast of the darkest regions. -Closing by reconstruction not only preserves structures preserved by the dilation, but also levels raises the contrast of the darkest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels. +### Parameter Guidance -Closing by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book "Morphological Image Analysis: Principles and -Applications", Second Edition, Springer, 2003. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Dark gaps smaller than this are filled. +- **Fully Connected** — controls neighbor connectivity during reconstruction (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. +- **Preserve Intensities** — when on, pixels that the operation did not need to change are restored to their exact original gray values (rather than the slightly altered values produced internally), so only the filled regions differ from the input. -### Author +#### Kernel Type - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. - -### Related Filters - -- GrayscaleMorphologicalClosingImageFilter - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. Compare with the standard [ITK Grayscale Morphological Closing Image Filter](ITKGrayscaleMorphologicalClosingImageFilter.md). + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 6.3.9). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKConnectedComponentImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKConnectedComponentImageFilter.md index 74ffc6b812..55b187bc41 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKConnectedComponentImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKConnectedComponentImageFilter.md @@ -1,6 +1,6 @@ # ITK Connected Component Image Filter -Label the objects in a binary image. +Labels each connected object in a binary image with a unique integer. ## Group (Subgroup) @@ -8,13 +8,19 @@ ITKConnectedComponents (ConnectedComponents) ## Description -ConnectedComponentImageFilter labels the objects in a binary image (non-zero pixels are considered to be objects, zero-valued pixels are considered to be background). Each distinct object is assigned a unique label. The filter experiments with some improvements to the existing implementation, and is based on run length encoding along raster lines. If the output background value is set to zero (the default), the final object labels start with 1 and are consecutive. If the output background is set to a non-zero value (by calling the SetBackgroundValue() routine of the filter), the final labels start at 0, and remain consecutive except for skipping the background value as needed. Objects that are reached earlier by a raster order scan have a lower label. This is different to the behaviour of the original connected component image filter which did not produce consecutive labels or impose any particular ordering. +This filter performs **connected components** labeling: it labels each group of touching non-zero pixels with a unique consecutive integer (0 = background). Non-zero pixels are treated as object material and zero-valued pixels as background. Every distinct touching cluster of object pixels receives its own integer label, so the output is a **label image** (one where each region has a unique integer value). -After the filter is executed, ObjectCount holds the number of connected components. +Labels are assigned consecutively starting at 1, with no gaps. The label numbers follow the raster scan order in which objects are first encountered, so the assigned numbers carry no meaning beyond identity. To order the labels by object size instead, pass the output to the [ITK Relabel Component Image Filter](ITKRelabelComponentImageFilter.md), which renumbers them so that label 1 is the largest object. -## See Also +Use this filter when you have a thresholded (binary) image and need to identify and count the individual objects within it. -- [ImageToImageFilter](https://itk.org/Doxygen/html/classitk_1_1ImageToImageFilter.html) +### Parameter Guidance + +- **Fully Connected** — controls connectivity. *Off* uses face-only connectivity (pixels touch only across shared faces). *On* uses face+edge+corner connectivity, so objects that touch only diagonally are merged into one. Turn this *On* for objects that are 1 pixel wide or that connect along diagonals. + +### Required Input Sources + +A binary image (cell data on an **Image Geometry**) where object pixels are non-zero and background pixels are zero, typically produced by a thresholding filter. % Auto generated parameter table will be inserted here @@ -22,8 +28,8 @@ After the filter is executed, ObjectCount holds the number of connected componen ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKCosImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKCosImageFilter.md index ba82c3a179..8c3fd00079 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKCosImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKCosImageFilter.md @@ -8,16 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -This filter is templated over the pixel type of the input image and the pixel type of the output image. - -The filter walks over all of the pixels in the input image, and for each pixel does the following: - -- cast the pixel value to double , -- apply the std::cos() function to the double value, -- cast the double value resulting from std::cos() to the pixel type of the output image, -- store the cast value into the output image. - -The filter expects both images to have the same dimension (e.g. both 2D, or both 3D, or both ND) +Computes the cosine of each pixel. Pixel values are interpreted as radians; the output is in the range [-1, 1]. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -25,7 +16,7 @@ The filter expects both images to have the same dimension (e.g. both 2D, or both ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKCurvatureAnisotropicDiffusionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKCurvatureAnisotropicDiffusionImageFilter.md index 311bfcc6d3..769368248b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKCurvatureAnisotropicDiffusionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKCurvatureAnisotropicDiffusionImageFilter.md @@ -1,6 +1,6 @@ # ITK Curvature Anisotropic Diffusion Image Filter -This filter performs anisotropic diffusion on a scalar itk::Image using the modified curvature diffusion equation (MCDE). +Edge-preserving smoothing that blurs within regions but not across edges, using the modified curvature diffusion equation (MCDE). ## Group (Subgroup) @@ -8,31 +8,27 @@ ITKAnisotropicSmoothing (AnisotropicSmoothing) ## Description -For detailed information on anisotropic diffusion and the MCDE see itkAnisotropicDiffusionFunction and itkCurvatureNDAnisotropicDiffusionFunction. +**Anisotropic diffusion** is an edge-preserving smoothing technique. Ordinary (Gaussian) blurring smooths everywhere equally and washes out edges. Anisotropic diffusion instead smooths strongly inside uniform regions but weakly across boundaries, so noise is reduced while real edges stay sharp. The image is evolved over a number of small time steps, as if heat were diffusing through it but slowed down wherever the image changes rapidly. -## Parameter Information +This filter uses the **modified curvature diffusion equation (MCDE)**, a variant that tends to preserve fine, high-curvature detail better than the plain gradient-based formulation (see [ITK Gradient Anisotropic Diffusion Image Filter](ITKGradientAnisotropicDiffusionImageFilter.md) for the classic Perona-Malik version). -The input and output to this filter must be a scalar itk::Image with numerical pixel types (float or double). A user defined type which correctly defines arithmetic operations with floating point accuracy should also give correct results. +The input and output must be a scalar image with a floating-point pixel type (float or double). -Please first read all the documentation found in [AnisotropicDiffusionImageFilter](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) and [AnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionFunction.html). Also see CurvatureNDAnisotropicDiffusionFunction. +### Parameter Guidance -- Set/GetNumberOfIterations specifies the number of iterations (time-step updates) that the solver will perform to produce a solution image. The appropriate number of iterations is dependent on the application and the image being processed. As a general rule, the more iterations performed, the more diffused the image will become. +- **Number Of Iterations** — how many diffusion time steps to apply. More iterations produce a more strongly smoothed result. The right number depends on the image and the amount of noise; start small and increase as needed. +- **Time Step** — the size of each diffusion step (dimensionless). It must stay below a stability limit that depends on image dimensionality: for unit pixel spacing, stable values are below **0.125** for 2D and below **0.0625** for 3D images. The filter clamps an unstable value and issues a run-time warning. The default (0.0625) is the maximum theoretically stable value for 3D. +- **Conductance Parameter** — controls how strongly edges are preserved. **Lower values preserve features more strongly** (less diffusion across high-gradient regions); higher values let the filter smooth across features more readily. Typical values range from **0.5 to 2.0**; the best value depends on the data and the iteration count. +- **Conductance Scaling Update Interval** — how often (in iterations) the internal conductance term is recomputed. The default of *1* updates it every iteration; larger values update less frequently and run slightly faster at some cost in accuracy. -- Set/GetTimeStep: In the anisotropic diffusion filter hierarchy, the time step is set explicitly by the user. The time step referred to here corresponds exactly to Δ𝑡 in the finite difference update equation described in FiniteDifferenceImageFilter (see itkFiniteDifferenceImageFilter for more information). Appropriate time steps for solving this type of p.d.e. depend on the dimensionality of the image and the order of the equation. Stable values for most 2D and 3D functions are 0.125 and 0.0625, respectively, when the pixel spacing is unity or is turned off. In general, you should keep the time step below (PixelSpacing)/2𝑁+1, where 𝑁 is the number of image dimensions. A filter will automatically attempt to constrain its time step to a stable value and generate a run-time warning if the time step is set too high. +### Required Input Sources -- Set/GetConductanceParameter: The conductance parameter controls the sensitivity of the conductance term in the basic anisotropic diffusion equation. It affects the conductance term in different ways depending on the particular variation on the basic equation. As a general rule, the lower the value, the more strongly the diffusion equation preserves image features (such as high gradients or curvature). A high value for conductance will cause the filter to diffuse image features more readily. Typical values range from 0.5 to 2.0 for data like the Visible Human color data, but the correct value for your application is wholly dependent on the results you want from a specific data set and the number or iterations you perform. - -[More information about AnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionFunction.html) - -## Default Value Caveats - -The default time step for this filter is set to the maximum theoretically stable value: 0.5 / 2^N, where N is the dimensionality of the image. For a 2D image, this means valid time steps are below 0.1250. For a 3D image, valid time steps are below 0.0625. +Operates on any scalar (floating-point) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. ## See Also -- [AnisotropicDiffusionImageFilter](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) -- [AnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionFunction.html) -- [CurvatureNDAnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1CurvatureNDAnisotropicDiffusionFunction.html) +- [ITK AnisotropicDiffusionImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) +- [ITK CurvatureNDAnisotropicDiffusionFunction (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1CurvatureNDAnisotropicDiffusionFunction.html) % Auto generated parameter table will be inserted here @@ -40,8 +36,8 @@ The default time step for this filter is set to the maximum theoretically stable ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKCurvatureFlowImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKCurvatureFlowImageFilter.md index 70f91fcaf2..d4dd4e0930 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKCurvatureFlowImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKCurvatureFlowImageFilter.md @@ -1,6 +1,6 @@ # ITK Curvature Flow Image Filter -Denoise an image using curvature driven flow. +Edge-preserving denoising that smooths an image by moving its intensity contours according to their curvature. ## Group (Subgroup) @@ -8,25 +8,20 @@ ITKCurvatureFlow (CurvatureFlow) ## Description -CurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function: +**Curvature flow** is an edge-preserving smoothing method. The grayscale image is treated as a stack of iso-intensity contours (lines of constant brightness, like the contour lines on a topographic map). Each contour is then moved at a speed proportional to its local curvature: tightly curved, wiggly parts of a contour (typically noise) move quickly and flatten out, while straight, low-curvature parts (typically real boundaries) barely move. The result is that small noise is smoothed away while sharp edges are preserved. - \f[ I_t = \kappa |\nabla I| \f] where \f$ \kappa \f$ is the curvature. +The evolution is applied over a number of small time steps. Note that applying too many iterations eventually shrinks every contour to nothing and erases all detail, so the iteration count should be tuned to the image. -The advantage of this approach is that sharp boundaries are preserved with smoothing occurring only within a region. However, it should be noted that continuous application of this scheme will result in the eventual removal of all information as each contour shrinks to zero and disappear. +A faster, scale-selective variant is available in [ITK Min Max Curvature Flow Image Filter](ITKMinMaxCurvatureFlowImageFilter.md). The output pixels are of a floating-point type. -Note that unlike level set segmentation algorithms, the image to be denoised is already the level set and can be set directly as the input using the SetInput() method. +### Parameter Guidance -This filter has two parameters: the number of update iterations to be performed and the timestep between each update. +- **Number Of Iterations** — how many time steps to apply. More iterations smooth more strongly; too many erase real features. +- **Time Step** — the size of each step (dimensionless). It must be small enough for numerical stability (each contour should move less than one grid cell per step). As a practical starting point use values around **0.125 for 2D** and **0.0625 for 3D** images and reduce if the result looks unstable. (Default 0.05.) -The timestep should be "small enough" to ensure numerical stability. Stability is guarantee when the timestep meets the CFL (Courant-Friedrichs-Levy) condition. Broadly speaking, this condition ensures that each contour does not move more than one grid position at each timestep. In the literature, the timestep is typically user specified and have to manually tuned to the application. +### Required Input Sources -This filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a CurvatureFlowFunction object. A zero flux Neumann boundary condition when computing derivatives near the data boundary. - -This filter may be streamed. To support streaming this filter produces a padded output which takes into account edge effects. The size of the padding is m_NumberOfIterations on each edge. Users of this filter should only make use of the center valid central region. - -## Warning - -This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a floating point type. This filter works for any dimensional images. +Operates on any scalar (floating-point) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. ## Reference @@ -34,14 +29,8 @@ This filter assumes that the input and output types have the same dimensions. Th ## See Also -- [DenseFiniteDifferenceImageFilter](https://itk.org/Doxygen/html/classitk_1_1DenseFiniteDifferenceImageFilter.html) - -- [CurvatureFlowFunction](https://itk.org/Doxygen/html/classitk_1_1CurvatureFlowFunction.html) - -- [MinMaxCurvatureFlowImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinMaxCurvatureFlowImageFilter.html) - -- [BinaryMinMaxCurvatureFlowImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryMinMaxCurvatureFlowImageFilter.html) - +- [ITK CurvatureFlowImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1CurvatureFlowImageFilter.html) +- [ITK Min Max Curvature Flow Image Filter](ITKMinMaxCurvatureFlowImageFilter.md) % Auto generated parameter table will be inserted here @@ -49,8 +38,8 @@ This filter assumes that the input and output types have the same dimensions. Th ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKDanielssonDistanceMapImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKDanielssonDistanceMapImageFilter.md index 8cce37c467..9eba4f3cde 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKDanielssonDistanceMapImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKDanielssonDistanceMapImageFilter.md @@ -1,6 +1,6 @@ # ITK Danielsson Distance Map Image Filter -This filter computes the distance map of the input image as an approximation with pixel accuracy to the Euclidean distance. +Computes a near-Euclidean distance map of an image, with optional Voronoi partition and nearest-object offset map. ## Group (Subgroup) @@ -8,15 +8,32 @@ ITKDistanceMap (DistanceMap) ## Description -The input is assumed to contain numeric codes defining objects. The filter will produce as output the following images: +A **distance map** replaces every pixel with its distance to the nearest object. This filter computes a close approximation to the true Euclidean distance using the Danielsson algorithm, which is fast and accurate to about one pixel. -- A Voronoi partition using the same numeric codes as the input. -- A distance map with the approximation to the euclidean distance. from a particular pixel to the nearest object to this pixel in the input image. -- A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in "pixels", the vector is represented by an itk::Offset. That is, physical coordinates are not used. +The input is treated as a set of labeled objects (any nonzero pixel belongs to an object). The filter can produce three related results: -This filter is N-dimensional and known to be efficient in computational time. The algorithm is the N-dimensional version of the 4SED algorithm given for two dimensions in: +- **Distance map** — each pixel holds the (approximate Euclidean) distance to the nearest object pixel. This is the primary output. +- **Voronoi partition** — a labeling in which every background pixel is assigned the label of the closest object, dividing the image into regions of nearest influence (like territory maps around each object). +- **Offset / vector map** — for each pixel, the displacement (in pixels along each axis) that points from the pixel to its closest object point. This records the direction to the nearest object, not just the distance. -Danielsson, Per-Erik. Euclidean Distance Mapping. Computer Graphics and Image Processing 14, 227-248 (1980). +Use a distance map when you need to know how far each location is from a feature — for example, to find region centers (local distance maxima), to seed a watershed, or to grow regions outward from objects. + +### Parameter Guidance + +- **Input Is Binary** — when enabled, each nonzero input pixel is given a unique code so the Voronoi partition can separate individual objects. Leave it off if your input already carries distinct object labels, or if you do not need per-object Voronoi regions. +- **Squared Distance** — when enabled, the output holds the distance **squared** instead of the distance itself. Squaring avoids a square-root step and keeps integer arithmetic exact, but the output is no longer in linear distance units. Leave off for true distances. +- **Use Image Spacing** — when enabled, distances are measured in the image's **physical units** (using the pixel spacing of the geometry). When disabled, distances are measured in **pixels**. + +### Required Input Sources + +Requires an image whose pixels encode objects (any nonzero value is part of an object; zero is background). This is commonly a segmentation mask or label image produced upstream. + +## See Also + +- [ITK Signed Danielsson Distance Map Image Filter](ITKSignedDanielssonDistanceMapImageFilter.md) +- [ITK Danielsson Distance Map Image Filter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1DanielssonDistanceMapImageFilter.html) + +Reference: Danielsson, Per-Erik. *Euclidean Distance Mapping.* Computer Graphics and Image Processing 14, 227-248 (1980). % Auto generated parameter table will be inserted here @@ -24,8 +41,8 @@ Danielsson, Per-Erik. Euclidean Distance Mapping. Computer Graphics and Image Pr ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKDilateObjectMorphologyImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKDilateObjectMorphologyImageFilter.md index ce7a353371..a67dbab5d9 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKDilateObjectMorphologyImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKDilateObjectMorphologyImageFilter.md @@ -1,6 +1,6 @@ # ITK Dilate Object Morphology Image Filter -dilation of an object in an image +Grows (dilates) a single labeled object in a mask image — a fast single-object variant of binary dilation. ## Group (Subgroup) @@ -8,28 +8,33 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -Dilate an image using binary morphology. Pixel values matching the object value are considered the "foreground" and all other pixels are "background". This is useful in processing mask images containing only one object. +This filter **dilates one object** in a mask image. Pixels whose value equals the *Object Value* are treated as the object (foreground); all other pixels are background. Wherever an object pixel is adjacent to a background pixel, the **structuring element** (the probe shape swept over the image) is centered on the object pixel and the background pixels it covers are set to the object value, growing the object outward. It is intended for masks that contain a single object; to dilate any of several segment values in a general segmented image, use [ITK Binary Dilate Image Filter](ITKBinaryDilateImageFilter.md). -If a pixel's value is equal to the object value and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the object value. The structuring element is assumed to be composed of binary values (zero or one).* ObjectMorphologyImageFilter , ErodeObjectMorphologyImageFilter +### Parameter Guidance -- BinaryDilateImageFilter +- **Object Value** — the pixel value of the object to dilate. Default *1*. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). The object grows by this amount. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on a binary/single-object mask image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKDiscreteGaussianImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKDiscreteGaussianImageFilter.md index 7e7521185e..2eea3b7884 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKDiscreteGaussianImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKDiscreteGaussianImageFilter.md @@ -1,6 +1,6 @@ # ITK Discrete Gaussian Image Filter -Blurs an image by separable convolution with discrete gaussian kernels. This filter performs Gaussian blurring by separable convolution of an image and a discrete Gaussian operator (kernel). +Blurs an image with a Gaussian kernel — the standard linear smoothing/denoising operation. ## Group (Subgroup) @@ -8,18 +8,26 @@ ITKSmoothing (Smoothing) ## Description -The Gaussian operator used here was described by Tony Lindeberg (Discrete Scale-Space Theory and the Scale-Space Primal Sketch. Dissertation. Royal Institute of Technology, Stockholm, Sweden. May 1991.) The Gaussian kernel used here was designed so that smoothing and derivative operations commute after discretization. +This filter applies **Gaussian blurring**: each pixel is replaced by a weighted average of its neighborhood, with the weights following a bell-shaped (Gaussian) curve so nearby pixels count more than distant ones. It is the most common general-purpose smoothing/denoising filter. The blur is performed efficiently as a separable convolution and can be set independently per axis. -The variance or standard deviation (sigma) will be evaluated as pixel units if SetUseImageSpacing is off (false) or as physical units if SetUseImageSpacing is on (true, default). The variance can be set independently in each dimension. +A faster alternative for large blur widths is a recursive-Gaussian (IIR) smoother, whose run time does not grow with the blur size. -When the Gaussian kernel is small, this filter tends to run faster than itk::RecursiveGaussianImageFilter .* GaussianOperator +### Parameter Guidance -- Image -- Neighborhood -- NeighborhoodOperator -- RecursiveGaussianImageFilter +- **Variance** — the blur strength per axis. Note this is the **variance (sigma squared)**, *not* sigma itself — a common point of confusion. Larger values blur more. Units are **pixels²** when *Use Image Spacing* is off, or **physical units²** when it is on. Typical values are around 1.0-4.0 px². +- **Use Image Spacing** — when on (default), the variance is interpreted in the geometry's physical units; when off, in pixels. +- **Maximum Kernel Width** — the largest kernel size, in **pixels**, the filter is allowed to build. It caps memory/time for very large variances. +- **Maximum Error** — the maximum allowed approximation error of the discrete Gaussian (per axis), a small dimensionless tolerance. -![](Images/ITKDiscreteGaussianImageFilter.png) +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +## Reference + +T. Lindeberg, *Discrete Scale-Space Theory and the Scale-Space Primal Sketch*, Dissertation, Royal Institute of Technology, Stockholm, May 1991. + +![Discrete Gaussian blur example.](Images/ITKDiscreteGaussianImageFilter.png) % Auto generated parameter table will be inserted here @@ -27,7 +35,7 @@ When the Gaussian kernel is small, this filter tends to run faster than itk::Rec ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKDoubleThresholdImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKDoubleThresholdImageFilter.md index c67397ddde..524dddda67 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKDoubleThresholdImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKDoubleThresholdImageFilter.md @@ -1,6 +1,6 @@ # ITK Double Threshold Image Filter -Binarize an input image using double thresholding. +Binarizes an image using a hysteresis-style double threshold that keeps the objects of interest without picking up extraneous ones. ## Group (Subgroup) @@ -8,13 +8,20 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Double threshold addresses the difficulty in selecting a threshold that will select the objects of interest without selecting extraneous objects. Double threshold considers two threshold ranges: a narrow range and a wide range (where the wide range encompasses the narrow range). If the wide range was used for a traditional threshold (where values inside the range map to the foreground and values outside the range map to the background), many extraneous pixels may survive the threshold operation. If the narrow range was used for a traditional threshold, then too few pixels may survive the threshold. +Choosing a single threshold is often a compromise: a wide range catches the whole object but also lets in noise and extraneous pixels, while a narrow range rejects the noise but also clips the object. **Double threshold** resolves this with two nested ranges — a **narrow** range that reliably marks only true object pixels, and a **wide** range that captures the full extent of the objects (and some extras). -Double threshold uses the narrow threshold image as a marker image and the wide threshold image as a mask image in the geodesic dilation. Essentially, the marker image (narrow threshold) is dilated but constrained to lie within the mask image (wide threshold). Thus, only the objects of interest (those pixels that survived the narrow threshold) are extracted but the those objects appear in the final image as they would have if the wide threshold was used. -- [GrayscaleGeodesicDilateImageFilter](https://itk.org/Doxygen/html/classitk_1_1GrayscaleGeodesicDilateImageFilter.html) +The filter keeps every object that contains at least one pixel passing the narrow range, and grows it out to its full extent within the wide range (a geodesic dilation of the narrow-range result, constrained to the wide-range mask). The result is that only genuine objects survive, but each appears at the full size it would have had under the wide threshold. -- [MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter ,](https://itk.org/Doxygen/html/classitk_1_1MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter ,.html)BinaryDilateImageFilter +### Parameter Guidance +- **Threshold1, Threshold2, Threshold3, Threshold4** — four bounds, in the **input image's intensity units**, that must be ordered `Threshold1 ≤ Threshold2 ≤ Threshold3 ≤ Threshold4`. They define the **wide** range as `[Threshold1, Threshold4]` and the **narrow** range as `[Threshold2, Threshold3]` inside it. +- **Inside Value** — the output value for pixels that pass (a `uint8` label, default *1*). +- **Outside Value** — the output value for all other pixels (a `uint8` label, default *0*). +- **Fully Connected** — controls neighbor connectivity for the grow step (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -22,8 +29,8 @@ Double threshold uses the narrow threshold image as a marker image and the wide ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKErodeObjectMorphologyImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKErodeObjectMorphologyImageFilter.md index bdf43f1a81..b15d0d0405 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKErodeObjectMorphologyImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKErodeObjectMorphologyImageFilter.md @@ -1,6 +1,6 @@ # ITK Erode Object Morphology Image Filter -Erosion of an object in an image. +Shrinks (erodes) a single labeled object in a mask image — a fast single-object variant of binary erosion. ## Group (Subgroup) @@ -8,28 +8,34 @@ ITKBinaryMathematicalMorphology (BinaryMathematicalMorphology) ## Description -Erosion of an image using binary morphology. Pixel values matching the object value are considered the "object" and all other pixels are "background". This is useful in processing mask images containing only one object. +This filter **erodes one object** in a mask image. Pixels whose value equals the *Object Value* are treated as the object; all other pixels are background. Wherever an object pixel sits at the boundary with background, the **structuring element** (the probe shape swept over the image) is centered on it and the covered neighboring pixels are set to the *Background Value*, shrinking the object inward. It is intended for masks that contain a single object; to erode any of several segment values in a general segmented image, use [ITK Binary Erode Image Filter](ITKBinaryErodeImageFilter.md). -If the pixel covered by the center of the kernel has the pixel value ObjectValue and the pixel is adjacent to a non-object valued pixel, then the kernel is centered on the object-value pixel and neighboring pixels covered by the kernel are assigned the background value. The structuring element is assumed to be composed of binary values (zero or one).* ObjectMorphologyImageFilter , BinaryFunctionErodeImageFilter +### Parameter Guidance -- BinaryErodeImageFilter +- **Object Value** — the pixel value of the object to erode. Default *1*. +- **Background Value** — the value assigned to eroded pixels. Default *0*. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). The object shrinks by this amount. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on a binary/single-object mask image — typically the output of a thresholding filter such as [ITK Binary Threshold Image Filter](ITKBinaryThresholdImageFilter.md) or [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKExpImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKExpImageFilter.md index 144eab40b7..837995148d 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKExpImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKExpImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The computation is performed using std::exp(x). +Computes the natural exponential (e raised to the pixel value) of each pixel. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -16,7 +16,7 @@ The computation is performed using std::exp(x). ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKExpNegativeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKExpNegativeImageFilter.md index d92fe28cca..76bb243fda 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKExpNegativeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKExpNegativeImageFilter.md @@ -1,6 +1,6 @@ # ITK Exp Negative Image Filter -Computes the function exp(-K.x) for each input pixel. +Computes exp(-x) for each input pixel. ## Group (Subgroup) @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -Every output pixel is equal to std::exp(-K.x ). where x is the intensity of the homologous input pixel, and K is a user-provided constant. +Computes the negative natural exponential exp(-x) of each pixel, where x is the input pixel value. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -16,7 +16,7 @@ Every output pixel is equal to std::exp(-K.x ). where x is the intensity of the ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGradientAnisotropicDiffusionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGradientAnisotropicDiffusionImageFilter.md index 7384ed2dbb..1252260976 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGradientAnisotropicDiffusionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGradientAnisotropicDiffusionImageFilter.md @@ -1,6 +1,6 @@ # ITK Gradient Anisotropic Diffusion Image Filter -This filter performs anisotropic diffusion on a scalar itk::Image using the classic Perona-Malik, gradient magnitude based equation. +Edge-preserving smoothing that blurs within regions but not across edges, using the classic Perona-Malik gradient-magnitude equation. ## Group (Subgroup) @@ -8,22 +8,27 @@ ITKAnisotropicSmoothing (AnisotropicSmoothing) ## Description -For detailed information on anisotropic diffusion, see itkAnisotropicDiffusionFunction and itkGradientNDAnisotropicDiffusionFunction. +**Anisotropic diffusion** is an edge-preserving smoothing technique. Ordinary (Gaussian) blurring smooths everywhere equally and washes out edges. Anisotropic diffusion instead smooths strongly inside uniform regions but weakly across boundaries, so noise is reduced while real edges stay sharp. The image is evolved over a number of small time steps, as if heat were diffusing through it but slowed down wherever the image changes rapidly. -## Parameter Information +This filter uses the classic **Perona-Malik** formulation, in which the diffusion at each pixel is throttled by the local **gradient magnitude**: where the gradient is high (an edge), diffusion is suppressed; where the image is flat, diffusion proceeds freely. The closely related [ITK Curvature Anisotropic Diffusion Image Filter](ITKCurvatureAnisotropicDiffusionImageFilter.md) preserves fine detail somewhat better. -The input and output to this filter must be a scalar itk::Image with numerical pixel types (float or double). A user defined type which correctly defines arithmetic operations with floating point accuracy should also give correct results. +The input and output must be a scalar image with a floating-point pixel type (float or double). -Please first read all the documentation found in [AnisotropicDiffusionImageFilter](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) and [AnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionFunction.html). Also see CurvatureNDAnisotropicDiffusionFunction. +### Parameter Guidance -- Set/GetNumberOfIterations specifies the number of iterations (time-step updates) that the solver will perform to produce a solution image. The appropriate number of iterations is dependent on the application and the image being processed. As a general rule, the more iterations performed, the more diffused the image will become. +- **Number Of Iterations** — how many diffusion time steps to apply. More iterations produce a more strongly smoothed result. The right number depends on the image and the amount of noise. +- **Time Step** — the size of each diffusion step (dimensionless). It must stay below a stability limit: for unit pixel spacing, stable values are below **0.125** for 2D and below **0.0625** for 3D images. The filter clamps an unstable value and issues a run-time warning. (Default 0.125.) +- **Conductance Parameter** — controls how strongly edges are preserved. **Lower values preserve features more strongly**; higher values smooth across features more readily. Typical values range from **0.5 to 2.0**; the best value depends on the data and the iteration count. +- **Conductance Scaling Update Interval** — how often (in iterations) the internal conductance term is recomputed. The default of *1* updates it every iteration; larger values update less frequently and run slightly faster at some cost in accuracy. -- Set/GetTimeStep: In the anisotropic diffusion filter hierarchy, the time step is set explicitly by the user. The time step referred to here corresponds exactly to Δ𝑡 in the finite difference update equation described in FiniteDifferenceImageFilter (see itkFiniteDifferenceImageFilter for more information). Appropriate time steps for solving this type of p.d.e. depend on the dimensionality of the image and the order of the equation. Stable values for most 2D and 3D functions are 0.125 and 0.0625, respectively, when the pixel spacing is unity or is turned off. In general, you should keep the time step below (PixelSpacing)/2𝑁+1, where 𝑁 is the number of image dimensions. A filter will automatically attempt to constrain its time step to a stable value and generate a run-time warning if the time step is set too high. +### Required Input Sources -- Set/GetConductanceParameter: The conductance parameter controls the sensitivity of the conductance term in the basic anisotropic diffusion equation. It affects the conductance term in different ways depending on the particular variation on the basic equation. As a general rule, the lower the value, the more strongly the diffusion equation preserves image features (such as high gradients or curvature). A high value for conductance will cause the filter to diffuse image features more readily. Typical values range from 0.5 to 2.0 for data like the Visible Human color data, but the correct value for your application is wholly dependent on the results you want from a specific data set and the number or iterations you perform. +Operates on any scalar (floating-point) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -[AnisotropicDiffusionImageFilter](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) -[AnisotropicDiffusionFunction](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionFunction.html) +## See Also + +- [ITK AnisotropicDiffusionImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1AnisotropicDiffusionImageFilter.html) +- [ITK GradientNDAnisotropicDiffusionFunction (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1GradientNDAnisotropicDiffusionFunction.html) % Auto generated parameter table will be inserted here @@ -31,8 +36,8 @@ Please first read all the documentation found in [AnisotropicDiffusionImageFilte ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeImageFilter.md index f6f5732d3f..5773528f78 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeImageFilter.md @@ -1,6 +1,6 @@ # ITK Gradient Magnitude Image Filter -Computes the gradient magnitude of an image region at each pixel. +Computes the gradient magnitude (edge strength) of an image at each pixel. ## Group (Subgroup) @@ -8,14 +8,15 @@ ITKImageGradient (ImageGradient) ## Description -Computes the gradient magnitude of an image region at each pixel. +The gradient magnitude is the length of the local intensity gradient vector — large where the image changes rapidly (edges) and near zero in smooth regions. This filter estimates it directly from simple finite differences between neighboring pixels, which makes it fast but sensitive to noise; for noisy data prefer the smoothed variant [ITK Gradient Magnitude Recursive Gaussian Image Filter](ITKGradientMagnitudeRecursiveGaussianImageFilter.md), which blurs with a Gaussian before differentiating. -### Related Filters +### Parameter Guidance -- Image -- Neighborhood -- NeighborhoodOperator -- NeighborhoodIterator +- **Use Image Spacing**: When on (default), derivatives are computed in physical space using the image spacing, giving results in intensity units per physical length unit. When off, spacing is ignored and the gradient is computed in isotropic voxel space. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -23,7 +24,7 @@ Computes the gradient magnitude of an image region at each pixel. ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeRecursiveGaussianImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeRecursiveGaussianImageFilter.md index 9a0b2c2d07..6e586deee7 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeRecursiveGaussianImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGradientMagnitudeRecursiveGaussianImageFilter.md @@ -1,6 +1,6 @@ # ITK Gradient Magnitude Recursive Gaussian Image Filter -Computes the Magnitude of the Gradient of an image by convolution with the first derivative of a Gaussian. +Computes the gradient magnitude (edge strength) of an image after Gaussian smoothing. ## Group (Subgroup) @@ -8,38 +8,29 @@ ITKImageGradient (ImageGradient) ## Description -This filter is implemented using the recursive gaussian filters +The **gradient magnitude** measures how fast intensity changes at each pixel — it is high along edges and near zero in flat regions, so the output is an edge-strength image. This filter first smooths the image with a Gaussian and then takes the gradient, combining the two steps so that the smoothing scale is controlled directly. Smoothing suppresses noise, so edges are detected more reliably than with a raw (un-smoothed) gradient. -## Parameters +The amount of smoothing is set by *Sigma*: a small *Sigma* responds to fine, sharp edges; a large *Sigma* blurs away fine detail and responds only to broad, large-scale edges. -| Name | Type | Description | -|------|------|-------------| -| Sigma | float64 | Set/Get Sigma value. Sigma is measured in the units of image spacing. | -| NormalizeAcrossScale | bool | Set/Get the normalization factor that will be used for the Gaussian. \sa RecursiveGaussianImageFilter::SetNormalizeAcrossScale | +Use this filter to produce an edge-strength map for edge detection, segmentation seeding (for example, as a speed image for level sets), or feature extraction. -## Required Geometry +### Parameter Guidance -Image Geometry +- **Sigma** — the standard deviation (width) of the Gaussian smoothing kernel, measured in **image-spacing (physical) units**, not pixels. For example, with a pixel spacing of 0.5 µm, a *Sigma* of *1.0* corresponds to 2 pixels. Larger values smooth more and detect broader edges. +- **Normalize Across Scale** — controls how the response is scaled when *Sigma* changes. Leave this off for ordinary edge detection. Enable it only when you compare gradient magnitudes computed at several different *Sigma* values (multi-scale analysis), so that the strongest response is not simply the smallest *Sigma*. -## Required Objects +### Required Input Sources -| Name |Type | Description | -|-----|------|-------------| -| Input Image Geometry | DataPath | DataPath to the Input Image Geometry | -| Input Image Data Array | DataPath | Path to input image with pixel type matching BasicPixelIDTypeList | +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -## Created Objects - -| Name |Type | Description | -|-----|------|-------------| -| Output Image Data Array | DataPath | Path to output image with pixel type matching BasicPixelIDTypeList | +% Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleDilateImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleDilateImageFilter.md index e61434623f..e59788185a 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleDilateImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleDilateImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Dilate Image Filter -Grayscale dilation of an image. +Replaces each pixel with the maximum value in its neighborhood — a grayscale dilation that brightens the image and grows bright regions. ## Group (Subgroup) @@ -8,28 +8,34 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Dilate an image using grayscale morphology. Dilation takes the maximum of all the pixels identified by the structuring element. +Grayscale **dilation** replaces each pixel with the **maximum** value found within the neighborhood defined by the **structuring element** (the probe shape — ball, box, etc. — swept over the image). The effect is to brighten the image, grow bright regions, and shrink dark ones. It is the grayscale counterpart of binary dilation and the building block of grayscale opening, closing, and top-hat filters. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.* MorphologyImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +### Parameter Guidance -![](Images/ITKGrayscaleDilation.png) +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Larger radii grow bright regions more. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Grayscale dilation example.](Images/ITKGrayscaleDilation.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleErodeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleErodeImageFilter.md index 31878bc9ab..afe22e6dc0 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleErodeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleErodeImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Erode Image Filter -Grayscale erosion of an image. +Replaces each pixel with the minimum value in its neighborhood — a grayscale erosion that darkens the image and grows dark regions. ## Group (Subgroup) @@ -8,28 +8,34 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Erode an image using grayscale morphology. Erosion takes the maximum of all the pixels identified by the structuring element. +Grayscale **erosion** replaces each pixel with the **minimum** value found within the neighborhood defined by the **structuring element** (the probe shape — ball, box, etc. — swept over the image). The effect is to darken the image, grow dark regions, and shrink bright ones. It is the grayscale counterpart of binary erosion and the dual of [ITK Grayscale Dilate Image Filter](ITKGrayscaleDilateImageFilter.md). -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.* MorphologyImageFilter , GrayscaleFunctionErodeImageFilter , BinaryErodeImageFilter +### Parameter Guidance -![](Images/ITKGrayscaleErosion.png) +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Larger radii grow dark regions more. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Grayscale erosion example.](Images/ITKGrayscaleErosion.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleFillholeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleFillholeImageFilter.md index 0e63ff7d3f..2bfe372366 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleFillholeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleFillholeImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Fillhole Image Filter -Remove local minima not connected to the boundary of the image. +Fills dark "holes" in a grayscale image — enclosed dark spots that are not connected to the image border. ## Group (Subgroup) @@ -8,18 +8,23 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -GrayscaleFillholeImageFilter fills holes in a grayscale image. Holes are local minima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a hole are extrapolated across the hole. +This filter fills **holes** in a grayscale image. A hole is a local minimum (a dark spot) that is fully enclosed by brighter pixels and not connected to the image border. The filter raises each hole up to the gray level of the surrounding pixels, smoothing over dark spots while leaving bright features (local maxima) untouched. -This filter is used to smooth over local minima without affecting the values of local maxima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local minima. +A useful trick: subtract the original image from this filter's output (and optionally threshold the difference) to obtain a map of the dark spots that were filled. The dual operation, which removes bright peaks instead, is [ITK Grayscale Grind Peak Image Filter](ITKGrayscaleGrindPeakImageFilter.md). -This filter uses the ReconstructionByErosionImageFilter . It provides its own input as the "mask" input to the geodesic erosion. The "marker" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the maximum pixel value in the input image. +### Parameter Guidance -Geodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003.* ReconstructionByErosionImageFilter +- **Fully Connected** — controls neighbor connectivity when deciding whether a region is "enclosed" (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide structures. -- MorphologyImageFilter , GrayscaleErodeImageFilter , GrayscaleFunctionErodeImageFilter , BinaryErodeImageFilter +### Required Input Sources -![](Images/ITKGrayscaleFillHole.png) +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Grayscale fill-hole example.](Images/ITKGrayscaleFillHole.png) + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 6). % Auto generated parameter table will be inserted here @@ -27,7 +32,7 @@ Principles and Applications", Second Edition, Springer, 2003.* ReconstructionByE ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleGrindPeakImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleGrindPeakImageFilter.md index da79a72695..810d64fd9c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleGrindPeakImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleGrindPeakImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Grind Peak Image Filter -Remove local maxima not connected to the boundary of the image. +Removes bright "peaks" from a grayscale image — enclosed bright spots that are not connected to the image border. ## Group (Subgroup) @@ -8,20 +8,23 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -GrayscaleGrindPeakImageFilter removes peaks in a grayscale image. Peaks are local maxima in the grayscale topography that are not connected to boundaries of the image. Gray level values adjacent to a peak are extrapolated through the peak. +This filter removes **peaks** in a grayscale image. A peak is a local maximum (a bright spot) that is fully enclosed by darker pixels and not connected to the image border. The filter lowers each peak down to the gray level of the surrounding pixels, smoothing over bright spots while leaving dark features (local minima) untouched. It is the exact dual of [ITK Grayscale Fillhole Image Filter](ITKGrayscaleFillholeImageFilter.md). -This filter is used to smooth over local maxima without affecting the values of local minima. If you take the difference between the output of this filter and the original image (and perhaps threshold the difference above a small value), you'll obtain a map of the local maxima. +A useful trick: subtract this filter's output from the original image (and optionally threshold the difference) to obtain a map of the bright spots that were removed. -This filter uses the GrayscaleGeodesicDilateImageFilter . It provides its own input as the "mask" input to the geodesic erosion. The "marker" image for the geodesic erosion is constructed such that boundary pixels match the boundary pixels of the input image and the interior pixels are set to the minimum pixel value in the input image. +### Parameter Guidance -This filter is the dual to the GrayscaleFillholeImageFilter which implements the Fillhole algorithm. Since it is a dual, it is somewhat superfluous but is provided as a convenience. +- **Fully Connected** — controls neighbor connectivity when deciding whether a region is "enclosed" (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide structures. -Geodesic morphology and the Fillhole algorithm is described in Chapter 6 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesicDilateImageFilter +### Required Input Sources -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -![](Images/ITKGrayscaleGrindPeak.png) +![Grayscale grind-peak example.](Images/ITKGrayscaleGrindPeak.png) + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 6). % Auto generated parameter table will be inserted here @@ -29,7 +32,7 @@ Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesic ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalClosingImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalClosingImageFilter.md index c63276080c..232476e48e 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalClosingImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalClosingImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Morphological Closing Image Filter -Grayscale closing of an image. +Fills small dark features in a grayscale image (a grayscale dilation followed by an erosion). ## Group (Subgroup) @@ -8,28 +8,35 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Close an image using grayscale morphology. +Grayscale **closing** is a **dilation followed by an erosion** using the same structuring element. It removes small **dark** features — narrow dark gaps, thin dark lines, and small dark spots smaller than the **structuring element** (the probe shape swept over the image) — while leaving the overall brightness and larger structures essentially unchanged. The dual operation, [ITK Grayscale Morphological Opening Image Filter](ITKGrayscaleMorphologicalOpeningImageFilter.md), removes small bright features instead. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.* MorphologyImageFilter , GrayscaleFunctionErodeImageFilter , BinaryErodeImageFilter +### Parameter Guidance -![](Images/ITKGrayscaleClosing.png) +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Dark features smaller than this are removed. +- **Safe Border** — when on (default), a temporary border is added during processing to avoid edge artifacts and removed afterward. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Grayscale closing example.](Images/ITKGrayscaleClosing.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalOpeningImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalOpeningImageFilter.md index 606e5dcf77..7a39757672 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalOpeningImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKGrayscaleMorphologicalOpeningImageFilter.md @@ -1,6 +1,6 @@ # ITK Grayscale Morphological Opening Image Filter -Grayscale opening of an image. +Removes small bright features from a grayscale image (a grayscale erosion followed by a dilation). ## Group (Subgroup) @@ -8,28 +8,35 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Open an image using grayscale morphology. +Grayscale **opening** is an **erosion followed by a dilation** using the same structuring element. It removes small **bright** features — small bright spots, thin bright lines, and narrow bright protrusions smaller than the **structuring element** (the probe shape swept over the image) — while leaving the overall brightness and larger structures essentially unchanged. The dual operation, [ITK Grayscale Morphological Closing Image Filter](ITKGrayscaleMorphologicalClosingImageFilter.md), removes small dark features instead. -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.* MorphologyImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +### Parameter Guidance -![](Images/ITKGrayscaleOpening.png) +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Bright features smaller than this are removed. +- **Safe Border** — when on (default), a temporary border is added during processing to avoid edge artifacts and removed afterward. -### Kernel Type +#### Kernel Type -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Grayscale opening example.](Images/ITKGrayscaleOpening.png) + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKHConvexImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKHConvexImageFilter.md index 2dcc59457f..2e52ff1ae5 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKHConvexImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKHConvexImageFilter.md @@ -1,6 +1,6 @@ # ITK H Convex Image Filter -Identify local maxima whose height above the baseline is greater than h. +Extracts bright peaks (local maxima) that rise more than a height *h* above their surroundings. ## Group (Subgroup) @@ -8,14 +8,18 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -HConvexImageFilter extract local maxima that are more than h intensity units above the (local) background. This has the effect of extracting objects that are brighter than background by at least h intensity units. +The **H-Convex** transform isolates the prominent peaks in a grayscale image. It keeps only those local maxima whose **prominence — their height above the local background — is greater than *h***, and reports each peak's prominence (up to *h*) while flattening everything else toward zero. In other words, it extracts objects that are brighter than their surroundings by at least *h* intensity units. -This filter uses the HMaximaImageFilter . +Use this filter to detect or enhance bright blobs, spots, or particles on an uneven background. Because it measures prominence rather than absolute brightness, it finds peaks consistently even when the background level drifts across the image. -Geodesic morphology and the H-Convex algorithm is described in Chapter 6 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter +### Parameter Guidance -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +- **Height** — the height *h*, in the **input image's intensity units**. It sets the minimum peak prominence: only maxima that rise more than *h* above their local background are extracted; shallower bumps are suppressed. Larger values keep only the most prominent peaks. Default *2.0*. +- **Fully Connected** — controls pixel connectivity. When off (default), neighbors share a face; when on, neighbors also include edge- and corner-touching pixels. Turn it on for thin, one-pixel-wide features. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -23,7 +27,7 @@ Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesic ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKHMaximaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKHMaximaImageFilter.md index 8a6fa48766..aa5afea06c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKHMaximaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKHMaximaImageFilter.md @@ -1,6 +1,6 @@ # ITK H Maxima Image Filter -Suppress local maxima whose height above the baseline is less than h. +Flattens shallow bright peaks by suppressing local maxima whose height is less than *h*. ## Group (Subgroup) @@ -8,18 +8,17 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -HMaximaImageFilter suppresses local maxima that are less than h intensity units above the (local) background. This has the effect of smoothing over the "high" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMinimaImageFilter to suppress the local minima whose depth is less than h intensity units below the (local) background. +The **H-Maxima** transform removes insignificant bright peaks from a grayscale image. Any local maximum that rises **less than *h* above its local background** is suppressed — flattened down to an estimate of that background — while larger, genuine peaks are preserved. This smooths over the "high" parts of the noise without blurring real region boundaries or large intensity changes. -If the output of HMaximaImageFilter is subtracted from the original image, the significant "peaks" in the image can be identified. This is what the HConvexImageFilter provides. +Use this filter to clean up speckle and spurious bright spots before segmentation, or as a preconditioning step for peak/maxima detection. Subtracting this filter's output from the original image yields the prominent peaks themselves (the operation performed by the [H Convex](ITKHConvexImageFilter.md) filter); the complementary operation for dark features is the [H Minima](ITKHMinimaImageFilter.md) filter. -This filter uses the ReconstructionByDilationImageFilter . It provides its own input as the "mask" input to the geodesic dilation. The "marker" image for the geodesic dilation is the input image minus the height parameter h. +### Parameter Guidance -Geodesic morphology and the H-Maxima algorithm is described in Chapter 6 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003. +- **Height** — the height *h*, in the **input image's intensity units**. Maxima that rise less than *h* above their local background are suppressed; peaks taller than *h* survive. Larger values flatten more peaks. Default *2.0*. -The height parameter is set using SetHeight.* ReconstructionByDilationImageFilter , HMinimaImageFilter , HConvexImageFilter +### Required Input Sources -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -27,7 +26,7 @@ The height parameter is set using SetHeight.* ReconstructionByDilationImageFilte ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKHMinimaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKHMinimaImageFilter.md index 5486e8a7df..3078492d08 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKHMinimaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKHMinimaImageFilter.md @@ -1,6 +1,6 @@ # ITK H Minima Image Filter -Suppress local minima whose depth below the baseline is less than h. +Fills shallow dark valleys by suppressing local minima whose depth is less than *h*. ## Group (Subgroup) @@ -8,16 +8,18 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -HMinimaImageFilter suppresses local minima that are less than h intensity units below the (local) background. This has the effect of smoothing over the "low" parts of the noise in the image without smoothing over large changes in intensity (region boundaries). See the HMaximaImageFilter to suppress the local maxima whose height is less than h intensity units above the (local) background. +The **H-Minima** transform removes insignificant dark dips from a grayscale image. Any local minimum that lies **less than *h* below its local background** is filled in — raised to an estimate of that background — while deeper, genuine valleys are preserved. This smooths over the "low" parts of the noise without blurring real region boundaries or large intensity changes. -If original image is subtracted from the output of HMinimaImageFilter , the significant "valleys" in the image can be identified. This is what the HConcaveImageFilter provides. +Use this filter to clean up dark speckle and spurious low spots before segmentation, or as a preconditioning step for minima detection (for example to control over-segmentation in a watershed). It is the dark-feature counterpart of the [H Maxima](ITKHMaximaImageFilter.md) filter; the matching operation that *extracts* prominent bright peaks is the [H Convex](ITKHConvexImageFilter.md) filter. -This filter uses the GrayscaleGeodesicErodeImageFilter . It provides its own input as the "mask" input to the geodesic dilation. The "marker" image for the geodesic dilation is the input image plus the height parameter h. +### Parameter Guidance -Geodesic morphology and the H-Minima algorithm is described in Chapter 6 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesicDilateImageFilter , HMinimaImageFilter , HConvexImageFilter +- **Height** — the depth *h*, in the **input image's intensity units**. Minima that lie less than *h* below their local background are filled; valleys deeper than *h* survive. Larger values fill more dips. Default *2.0*. +- **Fully Connected** — controls pixel connectivity. When off (default), neighbors share a face; when on, neighbors also include edge- and corner-touching pixels. Turn it on for thin, one-pixel-wide features. -- MorphologyImageFilter , GrayscaleDilateImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -25,7 +27,7 @@ Principles and Applications", Second Edition, Springer, 2003.* GrayscaleGeodesic ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKImageReaderFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKImageReaderFilter.md index 14a0f1010c..1f49d64a71 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKImageReaderFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKImageReaderFilter.md @@ -1,6 +1,6 @@ # Read Image (ITK) -This filter directly wraps an ITK filter of the same name. +Reads a single image file into a new Image Geometry using the ITK software library. ## Group (Subgroup) @@ -10,6 +10,8 @@ ITKImageProcessing (ITKImageProcessing) Reads images through the ITK software library [https://www.itk.org](https://www.itk.org) +This filter shares its human name with the SimplnxCore [Read Image](../SimplnxCore/ReadImageFilter.md) filter. This ITK-based variant supports additional file formats (such as NRRD and MHA) and provides ITK-driven decoding; if you only need common 2D formats, the SimplnxCore filter may be sufficient. + The following image types are supported: - PNG diff --git a/src/Plugins/ITKImageProcessing/docs/ITKImportFijiMontageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKImportFijiMontageFilter.md index c994ebc873..f84eb042bd 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKImportFijiMontageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKImportFijiMontageFilter.md @@ -1,16 +1,31 @@ # Read Fiji Montage (ITK) +Imports a set of overlapping tile images described by a Fiji/ImageJ TileConfiguration file, placing each tile in its own data group for later montage assembly. + ## Group (Subgroup) IO (Input) ## Description -Imports multiple images for the purpose of montage assembly. Each image is stored in it's own *DataContaner/AttributeMatrix/AttributeArray* where the name of the *DataContainer* is based off the row & column index of the montage. The filter assumes that the Configuration File is in the same folder as the images. The created *AttributeMatrix* and *AttributeArray* will have the same name. The image files **MUST** be located in the same directory as the Fiji Configuration File. +This filter reads a Fiji/ImageJ *TileConfiguration* file and imports the overlapping tile images it references so they can later be assembled into a single montage. The configuration file lists each tile image along with the coordinate at which it belongs in the mosaic. The image files **must** be located in the same directory as the configuration file. + +Each tile is imported into its own **Image Geometry**, named using the *Image Geometry Prefix* followed by the tile's file name. Inside each Image Geometry, the pixel data is stored in a **Cell Attribute Matrix** group, which holds the image **Data Array**. If *Parent Imported Images Under a DataGroup* is enabled, all of these per-tile Image Geometries are placed under a single parent **DataGroup** so they are grouped together in the DataStructure. + +Use this filter as the first step in a montage-stitching workflow when your tiles are described by a Fiji TileConfiguration file. + +### Parameter Guidance -Utilizes the *itkReadImage* and *ColorToGrayScale* filters +- **Change Origin** / **Origin** — when enabled, overrides the origin of the assembled mosaic with the user-supplied value (in the chosen length unit). +- **Convert To GrayScale** / **Color Weighting** — when enabled, converts color tiles to grayscale using a weighted (luminosity) average of the red, green, and blue channels. The default weights are the BT.709 values *Red 0.2125, Green 0.7154, Blue 0.0721*, which approximate human brightness perception (the eye is most sensitive to green). The weights can be changed to any values. The incoming color array must be 8-bit unsigned (uint8); otherwise that image is skipped. +- **Set Image Data Type** / **Output Data Type** — when enabled, stores the imported pixel data using the chosen numeric type (uint8, uint16, or uint32). +- **Length Unit** — the physical length unit applied to the created Image Geometries. -## Example Registration File +### Required Input Sources + +A Fiji/ImageJ TileConfiguration text file, with all referenced tile images in the same directory. + +## Example Configuration File # Define the number of dimensions we are working on dim = 2 <===== THIS LINE IS REQUIRED @@ -23,56 +38,6 @@ Utilizes the *itkReadImage* and *ColorToGrayScale* filters SampleMosaic_p4.bmp; ; (0.23675, 1839.55) SampleMosaic_p5.bmp; ; (1227.31, 1839.55) -### Color To Gray Scale Notes - -**For this option to work the read in color array must be a *UInt8Array* otherwise the image will be skipped over when loading** - -The luminosity method is a more sophisticated version of the average method. It also averages the values, but it forms a weighted average to account for human perception. We re more sensitive to green than other colors, so green is weighted most heavily. The default formula for luminosity is BT709 Gray scale: - - Red: 0.2125 Green: 0.7154 Blue: 0.0721. - -The user can set the weightings to what ever values they would like. - -### Lenght Unit - - Yoctometer = 0 - Zeptometer = 1 - Attometer = 2 - Femtometer = 3 - Picometer = 4 - Nanometer = 5 - Micrometer = 6 - Millimeter = 7 - Centimeter = 8 - Decimeter = 9 - Meter = 10 - Decameter = 11 - Hectometer = 12 - Kilometer = 13 - Megameter = 14 - Gigameter = 15 - Terameter = 16 - Petameter = 17 - Exameter = 18 - Zettameter = 19 - Yottameter = 20 - Angstrom = 21 - Mil = 22 - Inch = 23 - Foot = 24 - Mile = 25 - Fathom = 26 - Unspecified = 100U - Unknown = 101U - -### Output Data Type - -The *Output Data Type* parameter controls the numeric type used to store the imported image data: - -- **uint8 [0]**: Read image data as unsigned 8-bit integers (0–255). -- **uint16 [1]**: Read image data as unsigned 16-bit integers (0–65535). -- **uint32 [2]**: Read image data as unsigned 32-bit integers (0–4294967295). - % Auto generated parameter table will be inserted here ## Example Pipelines @@ -81,9 +46,8 @@ Prebuilt Pipelines / Examples / ITKImageProcessing / Fiji Import ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help -If you need more help with a filter, please consider asking your question on the DREAM3D Users mailing list: - +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKImportImageStackFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKImportImageStackFilter.md index e7c5fccb69..15ba2d275b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKImportImageStackFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKImportImageStackFilter.md @@ -1,6 +1,6 @@ # Read Images [3D Stack] (ITK) -This filter directly wraps an ITK filter of the same name. +Reads a stack of 2D images and assembles them into a 3D Image Geometry using the ITK library. ## Group (Subgroup) @@ -10,6 +10,8 @@ ITKImageProcessing (ITKImageProcessing) Read in a stack of 2D images and stack the images into a 3D Volume using the ITK library. Supports most common scalar pixel types and the many file formats supported by ITK. +This filter shares its human name with the SimplnxCore [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md) filter. This ITK-based variant supports the broader range of file formats handled by ITK along with additional cropping, resampling, and data-type conversion options. + ### Processing Order Image operations are applied in the following order: diff --git a/src/Plugins/ITKImageProcessing/docs/ITKIntensityWindowingImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKIntensityWindowingImageFilter.md index 77ab3f1f03..97d7159e31 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKIntensityWindowingImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKIntensityWindowingImageFilter.md @@ -1,6 +1,6 @@ # ITK Intensity Windowing Image Filter -Applies a linear transformation to the intensity levels of the input Image that are inside a user-defined interval. Values below this interval are mapped to a constant. Values over the interval are mapped to another constant. +Linearly stretches a chosen input intensity window into a target output range, clamping everything outside the window. ## Group (Subgroup) @@ -8,12 +8,21 @@ ITKImageIntensity (ImageIntensity) ## Description -IntensityWindowingImageFilter applies pixel-wise a linear transformation to the intensity values of input image pixels. The linear transformation is defined by the user in terms of the minimum and maximum values that the output image should have and the lower and upper limits of the intensity window of the input image. This operation is very common in visualization, and can also be applied as a convenient preprocessing operation for image segmentation. +This filter remaps pixel intensities with a linear "window/level" transform, the operation behind most medical-image and CT contrast controls. Input values inside the window — between *Window Minimum* and *Window Maximum* — are stretched linearly to fill the output range *Output Minimum* to *Output Maximum*. Input values below the window are clamped to *Output Minimum*, and values above it are clamped to *Output Maximum*. It is commonly used for visualization and as a preprocessing step before segmentation. -All computations are performed in the precision of the input pixel's RealType. Before assigning the computed value to the output pixel.* RescaleIntensityImageFilter +To map the *full* input range automatically instead of a chosen window, use [ITK Rescale Intensity Image Filter](ITKRescaleIntensityImageFilter.md). -![](Images/ITKIntensityWindowingImageFilter.png) -![](Images/ITKIntensityWindowingImageFilter_2.png) +### Parameter Guidance + +- **Window Minimum** / **Window Maximum** — the lower and upper bounds of the input intensity window of interest, in **input intensity units**. This window is what gets stretched. +- **Output Minimum** / **Output Maximum** — the target output range, in **output intensity units** (defaults *0* and *255*). + +![Intensity windowing example.](Images/ITKIntensityWindowingImageFilter.png) +![Intensity windowing example.](Images/ITKIntensityWindowingImageFilter_2.png) + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -21,7 +30,7 @@ All computations are performed in the precision of the input pixel's RealType. B ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKInvertIntensityImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKInvertIntensityImageFilter.md index 58eef662e2..b9f50cc19c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKInvertIntensityImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKInvertIntensityImageFilter.md @@ -8,15 +8,11 @@ ITKImageIntensity (ImageIntensity) ## Description -InvertIntensityImageFilter inverts intensity of pixels by subtracting pixel value to a maximum value. The maximum value can be set with SetMaximum and defaults the maximum of input pixel type. This filter can be used to invert, for example, a binary image, a distance map, etc. +Inverts the intensity of each pixel by computing `Maximum - pixel`. This filter can be used to invert, for example, a binary image, a distance map, etc. -### Author +### Parameter Guidance - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. - -### Related Filters - -- IntensityWindowingImageFilter ShiftScaleImageFilter +- **Maximum**: The largest intensity value used as the reference for the inversion, in image intensity units. Set this to the largest intensity present in the data (for example, 255 for an 8-bit image). ![](Images/ITKInvertIntensityImageFilter.png) diff --git a/src/Plugins/ITKImageProcessing/docs/ITKIsoContourDistanceImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKIsoContourDistanceImageFilter.md index 1d8baa6876..093a2309db 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKIsoContourDistanceImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKIsoContourDistanceImageFilter.md @@ -1,6 +1,6 @@ # ITK Iso Contour Distance Image Filter -Compute an approximate distance from an interpolated isocontour to the close grid points. +For a level-set (signed) image, estimates how far each grid pixel near the zero contour is from that contour. ## Group (Subgroup) @@ -8,40 +8,33 @@ ITKDistanceMap (DistanceMap) ## Description -For standard level set algorithms, it is useful to periodically reinitialize the evolving image to prevent numerical accuracy problems in computing derivatives. This reinitialization is done by computing a signed distance map to the current level set. This class provides the first step in this reinitialization by computing an estimate of the distance from the interpolated isocontour to the pixels (or voxels) that are close to it, i.e. for which the isocontour crosses a segment between them and one of their direct neighbors. This class supports narrowbanding. If the input narrowband is provided, the algorithm will only locate the level set within the input narrowband. +This is a specialized filter used in **level-set** methods. A level-set image is a signed image whose zero crossing (the **iso-contour** at value 0) implicitly represents a curve or surface — pixels inside the shape are negative and pixels outside are positive. As a level-set evolves, the values drift away from a true distance and must periodically be "reinitialized" back to a clean signed-distance field. -Implementation of this class is based on Fast and Accurate Redistancing for Level Set Methods Krissian K. and Westin C.F., EUROCAST NeuroImaging Workshop Las Palmas Spain, Ninth International Conference on Computer Aided Systems Theory , pages 48-51, Feb 2003. +This filter performs the first step of that reinitialization: for the grid pixels lying immediately next to the iso-contour (those for which the contour crosses a segment to a direct neighbor), it computes an accurate estimate of the distance from the pixel to the interpolated contour. Pixels farther from the contour are left at a saturated "far" value. If a narrowband is supplied, only pixels within that band are processed. -## Parameters +This filter is for users implementing level-set / fast-marching workflows; for a general-purpose distance transform of a binary mask use one of the distance-map filters such as [ITK Signed Maurer Distance Map Image Filter](ITKSignedMaurerDistanceMapImageFilter.md). -| Name | Type | Description | -|------|------|-------------| -| LevelSetValue | float64 | Set/Get the value of the level set to be located. The default value is 0. | -| FarValue | float64 | Set/Get the value of the level set to be located. The default value is 0. | +### Parameter Guidance -## Required Geometry +- **Level Set Value** — the iso-value whose contour is located, in the **input image's intensity units** (default *0*, the usual zero level set). +- **Far Value** — the saturation distance assigned to pixels that are not adjacent to the contour. Pixels beyond the immediate neighborhood of the contour are clamped to this value (default *10*), so it should be set larger than the band width you care about. (Units are the same length units as the computed distances.) -Image Geometry +### Required Input Sources -## Required Objects +Operates on a signed scalar (level-set) image — typically the output of a prior level-set or distance-map filter. -| Name |Type | Description | -|-----|------|-------------| -| Input Image Geometry | DataPath | DataPath to the Input Image Geometry | -| Input Image Data Array | DataPath | Path to input image with pixel type matching BasicPixelIDTypeList | +## Reference -## Created Objects +K. Krissian and C.-F. Westin, "Fast and Accurate Redistancing for Level Set Methods," EUROCAST NeuroImaging Workshop, Ninth International Conference on Computer Aided Systems Theory, pp. 48-51, Feb 2003. -| Name |Type | Description | -|-----|------|-------------| -| Output Image Data Array | DataPath | Path to output image with pixel type matching BasicPixelIDTypeList | +% Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKLabelContourImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKLabelContourImageFilter.md index 85a64b01c2..e510b7264c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKLabelContourImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKLabelContourImageFilter.md @@ -1,6 +1,6 @@ # ITK Label Contour Image Filter -Labels the pixels on the border of the objects in a labeled image. +From a label image, keeps only the boundary pixels of each labeled region. ## Group (Subgroup) @@ -8,27 +8,30 @@ ITKImageLabel (ImageLabel) ## Description -LabelContourImageFilter takes a labeled image as input, where the pixels in the objects are the pixels with a value different of the BackgroundValue. Only the pixels on the contours of the objects are kept. The pixels not on the border are changed to BackgroundValue. The labels of the object are the same in the input and in the output image. +This filter takes a **label image** (one where each region has a unique integer value) and keeps only the pixels that lie on the contour (outer boundary) of each labeled region. Object pixels are those whose value differs from the *Background Value*. Pixels that sit on a region's border keep their original label, while all interior pixels are set to the *Background Value*. The result is an outline of every region, with each outline retaining the label of the region it bounds. -The connectivity can be changed to minimum or maximum connectivity with SetFullyConnected() . Full connectivity produces thicker contours. +Use this filter when you need the edges of segmented regions — for example to overlay region boundaries on an image or to measure perimeters — rather than the filled regions themselves. - +### Parameter Guidance -### Author +- **Background Value** — the pixel value treated as background. Any pixel equal to this value is ignored, and interior (non-boundary) object pixels are reset to it. The default is 0. +- **Fully Connected** — controls connectivity. *Off* uses face-only connectivity. *On* uses face+edge+corner connectivity, which produces thicker contours. Turn this *On* for objects that are 1 pixel wide or that connect along diagonals. - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +### Required Input Sources -### Related Filters - -- BinaryContourImageFilter +A label image (cell data on an **Image Geometry**), such as the output of the [ITK Connected Component Image Filter](ITKConnectedComponentImageFilter.md) or a segmentation filter. % Auto generated parameter table will be inserted here +## See Also + +- [Insight Journal: Label object representation and manipulation with ITK](https://www.insight-journal.org/browse/publication/217) — Gaetan Lehmann, INRA de Jouy-en-Josas, France. + ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKLaplacianRecursiveGaussianImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKLaplacianRecursiveGaussianImageFilter.md index 15801bcdb0..d9daecbf88 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKLaplacianRecursiveGaussianImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKLaplacianRecursiveGaussianImageFilter.md @@ -8,8 +8,16 @@ ITKImageFeature (ImageFeature) ## Description -Computes the Laplacian of Gaussian (LoG) of an image by convolution with the second derivative of a Gaussian. This filter is implemented using the recursive gaussian filters. +The Laplacian of Gaussian (LoG) first smooths the image with a Gaussian of a chosen width and then takes its second spatial derivative (the Laplacian). It is a classic blob and edge detector: it responds strongly to features whose size matches the Gaussian width, and the zero crossings of its output mark edge locations. A common workflow is to run this filter and then locate those edges with [ITK Zero Crossing Image Filter](ITKZeroCrossingImageFilter.md). This implementation uses ITK's recursive Gaussian filters, so the cost does not grow with the smoothing width. +### Parameter Guidance + +- **Sigma**: Standard deviation of the Gaussian, measured in the units of the image spacing (e.g. micrometers, not pixels). Larger Sigma smooths more and tunes the filter to larger blobs/coarser edges. +- **Normalize Across Scale**: Selects the normalization factor applied to the Gaussian. Leave off (default) for standard LoG output; turn on when comparing responses computed at different Sigma values (scale-space analysis) so that magnitudes remain comparable across scales. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -17,8 +25,8 @@ Computes the Laplacian of Gaussian (LoG) of an image by convolution with the sec ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKLog10ImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKLog10ImageFilter.md index f849b25866..c1f2fb20e9 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKLog10ImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKLog10ImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The computation is performed using std::log10(x). +Computes the base-10 logarithm of each pixel. Input values must be greater than zero. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -16,7 +16,7 @@ The computation is performed using std::log10(x). ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKLogImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKLogImageFilter.md index c8cfe132db..86e857573b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKLogImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKLogImageFilter.md @@ -8,6 +8,8 @@ ITKImageIntensity (ImageIntensity) ## Description +Computes the natural logarithm of each pixel. Input values must be greater than zero. Operates on any scalar image. + ![](Images/ITKLogImageFilter.png) % Auto generated parameter table will be inserted here @@ -16,7 +18,7 @@ ITKImageIntensity (ImageIntensity) ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMaskImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMaskImageFilter.md index 85af231bb1..7e3cbb651e 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMaskImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMaskImageFilter.md @@ -1,6 +1,6 @@ # ITK Mask Image Filter -This filter directly wraps an ITK filter of the same name. +Masks an image using a second mask image. ## Group (Subgroup) @@ -8,27 +8,13 @@ ITKImageIntensity (ImageIntensity) ## Description -Mask an image with a mask. +This filter combines an input image with a mask image of the same size. For each pixel, if the corresponding mask pixel is non-zero (foreground), the input pixel value is copied to the output. If the mask pixel is zero (background), the *Outside Value* is written to the output instead. -This class is templated over the types of the input image type, the mask image type and the type of the output image. Numeric conversions (castings) are done by the C++ defaults. +The input image and the mask image must have the same dimensions. -The pixel type of the input 2 image must have a valid definition of the operator != with zero. This condition is required because internally this filter will perform the operation +### Parameter Guidance -``` -- if pixel_from_mask_image != masking_value -- pixel_output_image = pixel_input_image -- else -- pixel_output_image = outside_value -* -``` - -The pixel from the input 1 is cast to the pixel type of the output image. - -Note that the input and the mask images must be of the same size. - -*WARNING* Any pixel value other than masking value (0 by default) will not be masked out.* MaskNegatedImageFilter - - Wiki Examples:*All Examples* Apply a mask to an image +**Outside Value** is the value written to the output wherever the mask pixel equals 0. It defaults to 0. This value is interpreted in the intensity units of the image data. ![](Images/ITKMaskImageFilter.png) @@ -44,9 +30,8 @@ Note that the input and the mask images must be of the same size. ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. -## DREAM3D Mailing Lists +## DREAM3D-NX Help -If you need more help with a filter, please consider asking your question on the DREAM3D Users mailing list: - +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMaximumProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMaximumProjectionImageFilter.md index 1469192344..43097c843d 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMaximumProjectionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMaximumProjectionImageFilter.md @@ -1,6 +1,6 @@ # ITK Maximum Projection Image Filter -Maximum projection. +Collapses a 3D volume to a 2D image by taking the maximum voxel value along one axis. ## Group (Subgroup) @@ -8,27 +8,22 @@ ITKImageStatistics (ImageStatistics) ## Description -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **maximum**: for each line of voxels parallel to the selected axis, the output voxel is the largest value found along that line. The result has one fewer dimension than the input. -## Author +Maximum projection is the basis of the familiar *maximum intensity projection* (MIP) used to flatten bright features — vessels, particles, or other high-intensity structures — onto a single image regardless of their depth in the stack. Use it when you want to ensure the brightest object along each line of sight is preserved in the 2D summary. -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` -## See Also +### Parameter Guidance -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. +- *Perform In-Place* — when enabled, the projection replaces the input geometry rather than creating a new one. -- [MedianProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MedianProjectionImageFilter.html) +### Required Input Sources -- [MinimumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinimumProjectionImageFilter.html) - -- [StandardDeviationProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1StandardDeviationProjectionImageFilter.html) - -- [SumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1SumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -36,7 +31,7 @@ This class was contributed to the Insight Journal by Gaetan Lehmann. The origina ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMeanProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMeanProjectionImageFilter.md index b079821f1c..f0dc7028ee 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMeanProjectionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMeanProjectionImageFilter.md @@ -1,6 +1,6 @@ -# ITK Mean Projection Image Filter (ITKMeanProjectionImage) +# ITK Mean Projection Image Filter -Mean projection. +Collapses a 3D volume to a 2D image by taking the mean (average) voxel value along one axis. ## Group (Subgroup) @@ -8,27 +8,22 @@ ITKImageStatistics (ImageStatistics) ## Description -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **mean**: for each line of voxels parallel to the selected axis, the output voxel is the arithmetic average of all values along that line. The result has one fewer dimension than the input. -## Author +Mean projection produces a smooth, noise-suppressed summary of the volume because averaging reduces random fluctuations. Use it when you want a representative average view rather than emphasizing the brightest or darkest voxels. Note that the mean is sensitive to outliers; if a few extreme voxels would skew the result, consider [ITK Median Projection Image Filter](ITKMedianProjectionImageFilter.md) instead. -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` -## See Also +### Parameter Guidance -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. +- *Perform In-Place* — when enabled, the projection replaces the input geometry rather than creating a new one. -- [MedianProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MedianProjectionImageFilter.html) +### Required Input Sources -- [MinimumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinimumProjectionImageFilter.html) - -- [StandardDeviationProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1StandardDeviationProjectionImageFilter.html) - -- [SumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1SumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -- [MaximumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MaximumProjectionImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -36,7 +31,7 @@ This class was contributed to the Insight Journal by Gaetan Lehmann. The origina ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMedianImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMedianImageFilter.md index d42a643d6e..725f5533b1 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMedianImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMedianImageFilter.md @@ -1,6 +1,6 @@ # ITK Median Image Filter -Applies a median filter to an image. +Replaces each pixel with the median of its neighborhood — removes speckle/salt-and-pepper noise while keeping edges sharp. ## Group (Subgroup) @@ -8,15 +8,15 @@ ITKSmoothing (Smoothing) ## Description -Computes an image where a given pixel is the median value of the the pixels in a neighborhood about the corresponding input pixel. +This filter replaces each pixel with the **median** value of the pixels in a neighborhood around it. The median is a nonlinear statistic that is not pulled toward extreme values, so a median filter removes isolated noise spikes (salt-and-pepper / shot noise) much more cleanly than a mean/Gaussian blur, and it preserves sharp edges better because it does not average across them. -A median filter is one of the family of nonlinear filters. It is used to smooth an image without being biased by outliers or shot noise. +### Parameter Guidance -This filter requires that the input pixel type provides an operator<() (LessThan Comparable).* Image +- **Radius** — the neighborhood half-width per axis, **in pixels**. The neighborhood spans `2 × Radius + 1` pixels along each axis (so a radius of *1* gives a 3×3×3 window). Larger radii remove more noise but blur fine detail; typical values are 1-2. -- Neighborhood -- NeighborhoodOperator -- NeighborhoodIterator +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -24,7 +24,7 @@ This filter requires that the input pixel type provides an operator<() (LessThan ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMedianProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMedianProjectionImageFilter.md index 9edf342eca..0f11cfa507 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMedianProjectionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMedianProjectionImageFilter.md @@ -1,6 +1,6 @@ -# ITK Median Projection Image Filter (ITKMedianProjectionImage) +# ITK Median Projection Image Filter -Median projection. +Collapses a 3D volume to a 2D image by taking the median voxel value along one axis. ## Group (Subgroup) @@ -8,27 +8,22 @@ ITKImageStatistics (ImageStatistics) ## Description -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **median**: for each line of voxels parallel to the selected axis, the output voxel is the middle value once that line's voxels are sorted. The result has one fewer dimension than the input. -## Author +The median is **robust to outliers** — unlike the mean, a few extreme bright or dark voxels do not pull the result away from the typical value. Use median projection when the volume contains spikes, hot pixels, or sparse noise that you do not want reflected in the 2D summary. -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` -## See Also +### Parameter Guidance -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. +- *Perform In-Place* — when enabled, the projection replaces the input geometry rather than creating a new one. -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) +### Required Input Sources -- [MinimumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinimumProjectionImageFilter.html) - -- [StandardDeviationProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1StandardDeviationProjectionImageFilter.html) - -- [SumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1SumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -- [MaximumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MaximumProjectionImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -36,7 +31,7 @@ This class was contributed to the Insight Journal by Gaetan Lehmann. The origina ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMhaFileReaderFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMhaFileReaderFilter.md index a3027badbb..840a5363c4 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMhaFileReaderFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMhaFileReaderFilter.md @@ -14,21 +14,18 @@ Reads MHA images and the transformation matrix using ITK. Some select headers fr - Number of Dimensions - Center of Rotation (0,0,0 is the default) -- Offset (used at the origin for the created Image Geometr: 0,0,0 is the default) +- Offset (used as the origin for the created Image Geometry; 0,0,0 is the default) - Transformation Matrix +This is a variant of the [Read Image (ITK)](ITKImageReaderFilter.md) filter that also handles the transformation matrix embedded in the MHA file. + ### Use of the Transformation Matrix Notes There is an option to use the transpose of the Transformation Matrix. This can be useful if the stored transformation matrix is not the correct active transformation. If the determinant of the transformation matrix is NOT 1.0 (or really close) AND the user has selected to transpose the matrix a preflight error will be thrown. Using the *transpose* of the transformation matrix **only** works if the transformation matrix purely represents a rotation: Other affine transforms are **NOT** allowed such as shear, scale and translation. #### Technical Discussion -A 4x4 transformation matrix that involves only rotation (and no translation, scaling, or other transformations), the transpose of the matrix is equivalent to its inverse. This property is specific to orthogonal matrices, which are matrices where the rows and columns form a set of orthonormal vectors. In the context of 3D graphics and transformations, a rotation matrix is a type of orthogonal matrix. - -The key properties that make the transpose of a rotation matrix equivalent to its inverse are: - -- **Preservation of Dot Product**: The rotation does not change the dot product between vectors, preserving angles and lengths. -- **Orthonormal Rows and Columns**: The rows (and columns) of a rotation matrix are orthonormal, meaning they have unit length and are perpendicular to each other. This property ensures that multiplying the matrix by its transpose results in the identity matrix, indicating that the transpose is indeed the inverse. +For a pure rotation matrix (no translation, scaling, or shear) the transpose is equal to the inverse, because rotation matrices are orthogonal (their rows and columns are orthonormal). This is why transposing is only valid when the transformation represents a pure rotation. ### Interpolation Type diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMinMaxCurvatureFlowImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMinMaxCurvatureFlowImageFilter.md index 951554f204..d8c2d557f4 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMinMaxCurvatureFlowImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMinMaxCurvatureFlowImageFilter.md @@ -1,6 +1,6 @@ # ITK Min Max Curvature Flow Image Filter -Denoise an image using min/max curvature flow. +Edge-preserving denoising like Curvature Flow, but with a switch that targets a chosen noise scale and better preserves real features. ## Group (Subgroup) @@ -8,31 +8,30 @@ ITKCurvatureFlow (CurvatureFlow) ## Description -MinMaxCurvatureFlowImageFilter implements a curvature driven image denoising algorithm. Iso-brightness contours in the grayscale input image are viewed as a level set. The level set is then evolved using a curvature-based speed function: +This filter is a variant of [ITK Curvature Flow Image Filter](ITKCurvatureFlowImageFilter.md). Plain curvature flow smooths every intensity contour according to its curvature; the **min/max** variant adds a switch that turns smoothing on or off at each point depending on the local image content, so that smoothing is applied where it removes noise but suppressed where it would erode a genuine feature. - \f[ I_t = F_{\mbox{minmax}} |\nabla I| \f] +The switch is keyed to the **stencil radius**: the filter looks at the average intensity in a neighborhood of that radius around each point and uses it to decide whether the point sits on noise (smooth it) or on a real structure (leave it). Choosing the stencil radius therefore selects the *scale* of the noise to remove — a small radius targets fine, single-pixel noise; a larger radius targets coarser texture. -where \f$ F_{\mbox{minmax}} = \max(\kappa,0) \f$ if \f$ \mbox{Avg}_{\mbox{stencil}}(x) \f$ is less than or equal to \f$ T_{threshold} \f$ and \f$ \min(\kappa,0) \f$ , otherwise. \f$ \kappa \f$ is the mean curvature of the iso-brightness contour at point \f$ x \f$ . +The output pixels are of a floating-point type. -In min/max curvature flow, movement is turned on or off depending on the scale of the noise one wants to remove. Switching depends on the average image value of a region of radius \f$ R \f$ around each point. The choice of \f$ R \f$ , the stencil radius, governs the scale of the noise to be removed. +### Parameter Guidance -The threshold value \f$ T_{threshold} \f$ is the average intensity obtained in the direction perpendicular to the gradient at point \f$ x \f$ at the extrema of the local neighborhood. +- **Number Of Iterations** — how many time steps to apply. More iterations smooth more strongly. +- **Time Step** — the size of each step (dimensionless). Keep it small for numerical stability (around **0.125 for 2D** and **0.0625 for 3D**; default 0.05) and reduce if the result looks unstable. +- **Stencil Radius** — the neighborhood radius, **in pixels**, used by the min/max switch; it sets the scale of noise that is removed. Small values (the default is *2*) target fine noise; larger values target coarser features. (Stored as a signed integer, but only non-negative values are meaningful.) -This filter make use of the multi-threaded finite difference solver hierarchy. Updates are computed using a MinMaxCurvatureFlowFunction object. A zero flux Neumann boundary condition is used when computing derivatives near the data boundary. +### Required Input Sources -## Warning +Operates on any scalar (floating-point) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -This filter assumes that the input and output types have the same dimensions. This filter also requires that the output image pixels are of a real type. This filter works for any dimensional images, however for dimensions greater than 3D, an expensive brute-force search is used to compute the local threshold. +## Reference -Reference: "Level Set Methods and Fast Marching Methods", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999. +"Level Set Methods and Fast Marching Methods", J.A. Sethian, Cambridge Press, Chapter 16, Second edition, 1999. ## See Also -- [MinMaxCurvatureFlowFunction](https://itk.org/Doxygen/html/classitk_1_1MinMaxCurvatureFlowFunction.html) - -- [CurvatureFlowImageFilter](https://itk.org/Doxygen/html/classitk_1_1CurvatureFlowImageFilter.html) - -- [BinaryMinMaxCurvatureFlowImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryMinMaxCurvatureFlowImageFilter.html) +- [ITK MinMaxCurvatureFlowImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1MinMaxCurvatureFlowImageFilter.html) +- [ITK Curvature Flow Image Filter](ITKCurvatureFlowImageFilter.md) % Auto generated parameter table will be inserted here @@ -40,8 +39,8 @@ Reference: "Level Set Methods and Fast Marching Methods", J.A. Sethian, Cambridg ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMinimumProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMinimumProjectionImageFilter.md index b4ac3d85e8..8207259a3b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMinimumProjectionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMinimumProjectionImageFilter.md @@ -1,6 +1,6 @@ -# ITK Minimum Projection Image Filter (ITKMinimumProjectionImage) +# ITK Minimum Projection Image Filter -Minimum projection. +Collapses a 3D volume to a 2D image by taking the minimum voxel value along one axis. ## Group (Subgroup) @@ -8,27 +8,22 @@ ITKImageStatistics (ImageStatistics) ## Description -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **minimum**: for each line of voxels parallel to the selected axis, the output voxel is the smallest value found along that line. The result has one fewer dimension than the input. -## Author +Minimum projection is the dark-feature counterpart of maximum projection: it preserves the darkest object along each line of sight, which is useful for emphasizing low-intensity structures such as voids, pores, or absorbing features against a bright background. -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` -## See Also +### Parameter Guidance -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. +- *Perform In-Place* — when enabled, the projection replaces the input geometry rather than creating a new one. -- [MedianProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MedianProjectionImageFilter.html) +### Required Input Sources -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) - -- [StandardDeviationProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1StandardDeviationProjectionImageFilter.html) - -- [SumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1SumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -- [MaximumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MaximumProjectionImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -36,7 +31,7 @@ This class was contributed to the Insight Journal by Gaetan Lehmann. The origina ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalGradientImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalGradientImageFilter.md index 92a237919e..6cef3c8f01 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalGradientImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalGradientImageFilter.md @@ -1,6 +1,6 @@ # ITK Morphological Gradient Image Filter -Compute the gradient of a grayscale image. +Highlights edges in a grayscale image by subtracting a local minimum-filtered image from a local maximum-filtered image. ## Group (Subgroup) @@ -8,24 +8,36 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -The structuring element is assumed to be composed of binary values (zero or one). Only elements of the structuring element having values > 0 are candidates for affecting the center pixel.* MorphologyImageFilter , GrayscaleFunctionDilateImageFilter , BinaryDilateImageFilter +The **morphological gradient** is an edge detector. At each pixel it computes the difference between a grayscale **dilation** (the maximum value in the neighborhood defined by the structuring element) and a grayscale **erosion** (the minimum value in that same neighborhood): -### Kernel Type +`morphological gradient = dilation − erosion` -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +Where the image is flat, the local maximum and minimum are nearly equal and the result is near zero (dark). Where intensity changes sharply — an edge — the maximum and minimum differ greatly and the result is large (bright). The output is therefore bright along object boundaries and dark in uniform regions. The width of the detected edges grows with the size of the structuring element. + +### Parameter Guidance + +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Larger radii detect broader edges. + +#### Kernel Type + +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedFromMarkersImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedFromMarkersImageFilter.md deleted file mode 100644 index 7acdd191fa..0000000000 --- a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedFromMarkersImageFilter.md +++ /dev/null @@ -1,44 +0,0 @@ -# ITK Morphological Watershed From Markers Image Filter (ITKMorphologicalWatershedFromMarkersImage) - -Morphological watershed transform from markers. - -## Group (Subgroup) - -ITKWatersheds (Watersheds) - -## Description - -The watershed transform is a tool for image segmentation that is fast and flexible and potentially fairly parameter free. It was originally derived from a geophysical model of rain falling on a terrain and a variety of more formal definitions have been devised to allow development of practical algorithms. If an image is considered as a terrain and divided into catchment basins then the hope is that each catchment basin would contain an object of interest. - -The output is a label image. A label image, sometimes referred to as a categorical image, has unique values for each region. For example, if a watershed produces 2 regions, all pixels belonging to one region would have value A, and all belonging to the other might have value B. Unassigned pixels, such as watershed lines, might have the background value (0 by convention). - -The simplest way of using the watershed is to preprocess the image we want to segment so that the boundaries of our objects are bright (e.g apply an edge detector) and compute the watershed transform of the edge image. Watershed lines will correspond to the boundaries and our problem will be solved. This is rarely useful in practice because there are always more regional minima than there are objects, either due to noise or natural variations in the object surfaces. Therefore, while many watershed lines do lie on significant boundaries, there are many that don't. Various methods can be used to reduce the number of minima in the image, like thresholding the smallest values, filtering the minima and/or smoothing the image. - -This filter use another approach to avoid the problem of over segmentation: it let the user provide a marker image which mark the minima in the input image and give them a label. The minima are imposed in the input image by the markers. The labels of the output image are the label of the marker image. - -The morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003. - -This code was contributed in the Insight Journal paper: "The watershed transform in ITK - discussion and new developments" by Beare R., Lehmann G. https://www.insight-journal.org/browse/publication/92 - -## Author - -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. -- Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. - - -## See Also - -- [WatershedImageFilter ,](https://itk.org/Doxygen/html/classitk_1_1WatershedImageFilter ,.html)MorphologicalWatershedImageFilter - -% Auto generated parameter table will be inserted here - -## Example Pipelines - -## License & Copyright - -Please see the description file distributed with this plugin. - -## DREAM3D Mailing Lists - -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedImageFilter.md index 61e7d9ae49..ac4140e69b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKMorphologicalWatershedImageFilter.md @@ -1,6 +1,6 @@ # ITK Morphological Watershed Image Filter -Watershed segmentation implementation with morphological operators. +Segments an image into labeled regions using the watershed transform — flooding the image as if it were a terrain. ## Group (Subgroup) @@ -8,20 +8,27 @@ ITKWatersheds (Watersheds) ## Description -Watershed pixel are labeled 0. TOutputImage should be an integer type. Labels of output image are in no particular order. You can reorder the labels such that object labels are consecutive and sorted based on object size by passing the output of this filter to a RelabelComponentImageFilter . +The **watershed transform** treats a grayscale image as a topographic surface: bright pixels are high ground and dark pixels are low ground. Imagine rain falling on this terrain and water collecting in the low spots. Each local low point seeds a **catchment basin**, and the rising water floods outward until basins meet. The lines where neighboring basins meet are the **watershed lines** (the ridge tops between valleys). Each basin becomes one labeled output region. -The morphological watershed transform algorithm is described in Chapter 9.2 of Pierre Soille's book "Morphological Image Analysis: -Principles and Applications", Second Edition, Springer, 2003. +This filter is most commonly run on a gradient/edge image (for example the output of [ITK Morphological Gradient Image Filter](ITKMorphologicalGradientImageFilter.md)), so that bright ridges fall on object boundaries and the basins fall on the objects. -This code was contributed in the Insight Journal paper: "The watershed transform in ITK - discussion and new developments" by Beare R., Lehmann G. +The output is a **label image**: every region has a unique integer value, and the watershed lines (if marked) are 0. A raw watershed almost always produces **far more regions than there are real objects** (over-segmentation) because every small dip becomes its own basin; the *Level* parameter and a marker-controlled variant exist to control this. -### Author +### Parameter Guidance - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +- **Level** — a depth/contrast threshold, in the **input image's intensity units**, that merges shallow neighboring basins. A higher Level merges more aggressively and yields fewer, larger regions; *0* (the default) performs no merging and tends to over-segment. Raising Level is the primary way to reduce over-segmentation. +- **Mark Watershed Line** — when on, the boundary pixels between regions are written as 0; when off, no separating line is drawn. +- **Fully Connected** — controls neighbor connectivity (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. -### Related Filters +The output labels are in no particular order. To renumber them consecutively and sort by region size, follow this filter with [ITK Relabel Component Image Filter](ITKRelabelComponentImageFilter.md). A marker-controlled variant (one region per user-supplied seed, avoiding over-segmentation) exists in ITK but is not currently built into DREAM3D-NX (see [issue #1639](https://github.com/BlueQuartzSoftware/simplnx/issues/1639)). -- WatershedImageFilter , MorphologicalWatershedFromMarkersImageFilter +### Required Input Sources + +Operates on any scalar (typically gradient/edge) image — for example the output of [ITK Morphological Gradient Image Filter](ITKMorphologicalGradientImageFilter.md) or another ITK image filter. + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 9.2). Beare R., Lehmann G., "The watershed transform in ITK — discussion and new developments," Insight Journal, . % Auto generated parameter table will be inserted here @@ -29,7 +36,7 @@ This code was contributed in the Insight Journal paper: "The watershed transform ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKNormalizeImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKNormalizeImageFilter.md index 77dc096dec..2500e9c618 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKNormalizeImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKNormalizeImageFilter.md @@ -8,9 +8,9 @@ ITKImageIntensity (ImageIntensity) ## Description -NormalizeImageFilter shifts and scales an image so that the pixels in the image have a zero mean and unit variance. This filter uses StatisticsImageFilter to compute the mean and variance of the input and then applies ShiftScaleImageFilter to shift and scale the pixels. +Shifts and scales an image so that the pixels in the image have a zero mean and unit variance. The filter first computes the mean and variance of the input and then shifts and scales the pixels accordingly. Output values are in dimensionless normalized units. -NB: since this filter normalizes the data such that the mean is at 0, and \f$-\sigma\f$ to \f$+\sigma\f$ is mapped to -1.0 to 1.0, output image integral types will produce an image that DOES NOT HAVE a unit variance due to 68% of the intensity values being mapped to the real number range of -1.0 to 1.0 and then cast to the output integral value.* NormalizeToConstantImageFilter +NB: since this filter normalizes the data such that the mean is at 0, and $-\sigma$ to $+\sigma$ is mapped to -1.0 to 1.0, output image integral types will produce an image that DOES NOT HAVE a unit variance due to 68% of the intensity values being mapped to the real number range of -1.0 to 1.0 and then cast to the output integral value. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/ITKImageProcessing/docs/ITKNotImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKNotImageFilter.md index 7e0d2b11a7..6708bdbc83 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKNotImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKNotImageFilter.md @@ -8,26 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -This class is templated over the type of an input image and the type of the output image. Numeric conversions (castings) are done by the C++ defaults. - -Since the logical NOT operation operates only on boolean types, the input type must be implicitly convertible to bool, which is only defined in C++ for integer types, the images passed to this filter must comply with the requirement of using integer pixel type. - -The total operation over one pixel will be - -``` -if( !A ) - - { - - return this->m_ForegroundValue; - - } - -return this->m_BackgroundValue; - -``` - -Where "!" is the unary Logical NOT operator in C++. +Applies the logical NOT operator to each pixel of an integer image. The input must be an integer-valued image. For each pixel, a value equal to 0 is replaced with the Foreground Value, and any non-zero value is replaced with the Background Value. This is commonly used to invert a binary (mask) image. ![](Images/ITKNotImageFilter.png) diff --git a/src/Plugins/ITKImageProcessing/docs/ITKOpeningByReconstructionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKOpeningByReconstructionImageFilter.md index 7c0168d458..c7ea69d971 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKOpeningByReconstructionImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKOpeningByReconstructionImageFilter.md @@ -1,6 +1,6 @@ # ITK Opening By Reconstruction Image Filter -Opening by reconstruction of an image. +Removes small bright features from a grayscale image while preserving the shape of the structures that remain. ## Group (Subgroup) @@ -8,39 +8,40 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -This filter preserves regions, in the foreground, that can completely contain the structuring element. At the same time, this filter eliminates all other regions of foreground pixels. Contrary to the morphological opening, the opening by reconstruction preserves the shape of the components that are not removed by erosion. The opening by reconstruction of an image "f" is defined as: +A standard morphological **opening** (erosion followed by dilation) removes small bright features that are smaller than the **structuring element**, but it also distorts the shapes of the larger features it touches. **Opening by reconstruction** achieves the same effect while preserving the exact shape of the structures, by replacing the final dilation with a morphological reconstruction step. -OpeningByReconstruction(f) = DilationByReconstruction(f, Erosion(f)). +It keeps the foreground regions that can fully contain the structuring element and removes the rest; the surviving regions are restored to their original shape rather than the eroded approximation. It is defined as `OpeningByReconstruction(f) = DilationByReconstruction(Erosion(f))`. In addition to removing small bright features, the operation tends to lower the contrast of the brightest regions. -Opening by reconstruction not only removes structures destroyed by the erosion, but also levels down the contrast of the brightest regions. If PreserveIntensities is on, a subsequent reconstruction by dilation using a marker image that is the original image for all unaffected pixels. +### Parameter Guidance -Opening by reconstruction is described in Chapter 6.3.9 of Pierre Soille's book "Morphological Image Analysis: Principles and -Applications", Second Edition, Springer, 2003. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). Bright features smaller than this are removed. +- **Fully Connected** — controls neighbor connectivity during reconstruction (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. +- **Preserve Intensities** — when on, pixels that the operation did not need to change are restored to their exact original gray values, so only the affected regions differ from the input. -### Author +#### Kernel Type - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. - -### Related Filters - -- GrayscaleMorphologicalOpeningImageFilter - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. Compare with the standard [ITK Grayscale Morphological Opening Image Filter](ITKGrayscaleMorphologicalOpeningImageFilter.md). + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 6.3.9). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKOtsuMultipleThresholdsImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKOtsuMultipleThresholdsImageFilter.md index 8dc7739086..dabb4c60f7 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKOtsuMultipleThresholdsImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKOtsuMultipleThresholdsImageFilter.md @@ -1,6 +1,6 @@ # ITK Otsu Multiple Thresholds Image Filter -Threshold an image using multiple Otsu Thresholds. +Automatically separates an image into several intensity classes using Otsu's method and writes a label map. ## Group (Subgroup) @@ -8,14 +8,25 @@ ITKThresholding (Thresholding) ## Description -This filter creates a labeled image that separates the input image into various classes. The filter computes the thresholds using the OtsuMultipleThresholdsCalculator and applies those thresholds to the input image using the ThresholdLabelerImageFilter . The NumberOfHistogramBins and NumberOfThresholds can be set for the Calculator. The LabelOffset can be set for the ThresholdLabelerImageFilter . +**Otsu thresholding** automatically chooses threshold values from the image's intensity histogram — it picks the thresholds that best separate the pixels into distinct classes by maximizing the variance *between* classes (equivalently, minimizing the variance *within* each class). No threshold intensities are entered by hand; the filter computes them for you. -This filter also includes an option to use the valley emphasis algorithm from H.F. Ng, "Automatic thresholding for defect detection", Pattern Recognition Letters, (27): 1644-1649, 2006. The valley emphasis algorithm is particularly effective when the object to be thresholded is small. See the following tests for examples: itkOtsuMultipleThresholdsImageFilterTest3 and itkOtsuMultipleThresholdsImageFilterTest4 To use this algorithm, simple call the setter: SetValleyEmphasis(true) It is turned off by default.* ScalarImageToHistogramGenerator +This filter is the multi-level version: instead of one threshold (two classes), it finds **N** thresholds that partition the image into **N + 1** classes. The output is a **label map** in which each pixel is assigned an integer class index (0, 1, 2, …) according to which intensity band it falls into. -- OtsuMultipleThresholdsCalculator -- ThresholdLabelerImageFilter +Use this filter when an image contains several distinguishable intensity populations (for example background, matrix, and one or more phases) and you want them segmented into labels without manually tuning cutoffs. -![](Images/ITKOtsuThreshold.png) +### Parameter Guidance + +- **Number Of Thresholds** — how many thresholds to compute. The output contains one more class than this number (N thresholds → N + 1 labels). Default *1* (two classes). +- **Number Of Histogram Bins** — the number of bins used to build the intensity histogram the thresholds are computed from. More bins give finer threshold resolution at the cost of speed; default *128*. +- **Label Offset** — an integer added to every output label so the classes start from a value other than 0 (useful for keeping labels distinct from other label maps). Default *0*. +- **Valley Emphasis** — when on, biases the threshold selection toward the valleys (low-population dips) of the histogram. This helps when the object of interest is small and would otherwise be lost against a large background population. Default *off*. +- **ReturnBinMidpoint** — when on, each computed threshold is reported as the midpoint of its histogram bin; when off (default), the bin's maximum value is used. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![Otsu multiple-threshold label map.](Images/ITKOtsuThreshold.png) % Auto generated parameter table will be inserted here @@ -23,7 +34,7 @@ This filter also includes an option to use the valley emphasis algorithm from H. ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKRegionalMaximaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKRegionalMaximaImageFilter.md index 5f0e5879bf..2aa10e6935 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKRegionalMaximaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKRegionalMaximaImageFilter.md @@ -1,6 +1,6 @@ # ITK Regional Maxima Image Filter -Produce a binary image where foreground is the regional maxima of the input image. +Produces a binary image marking the regional maxima of the input image. ## Group (Subgroup) @@ -8,21 +8,19 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Regional maxima are flat zones surrounded by pixels of lower value. +A regional maximum is a connected flat zone of pixels that all share the same value and whose every neighboring pixel has a strictly lower value (a local "plateau" that is brighter than everything immediately surrounding it). This filter labels those pixels in the output and labels everything else as background, producing a binary image. Use it to detect peaks, bright spots, or seed points for later segmentation. -If the input image is constant, the entire image can be considered as a maxima or not. The desired behavior can be selected with the SetFlatIsMaxima() method. +If the input image is constant (completely flat), the entire image can be treated either as a single regional maximum or as background; the **Flat Is Maxima** option selects which behavior to use. -## Author +### Parameter Guidance -This class was contributed to the Insight Journal by author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. The paper can be found at https://www.insight-journal.org/browse/publication/65 +- **Flat Is Maxima**: When on (default), a completely flat input image is reported as a regional maximum; when off, a flat image produces an all-background result. +- **Fully Connected**: Controls pixel connectivity. When off (default, "face connected"), only face-adjacent neighbors are considered (connectivity 4 in 2D, 6 in 3D); when on, diagonal neighbors are also included (connectivity 8 in 2D, 26 in 3D). Turning it on tends to merge nearby maxima into a single connected region. +- **Background Value** / **Foreground Value**: These are the output binary labels written for non-maxima and maxima pixels respectively. They are not intensity thresholds applied to the input. -## See Also +### Required Input Sources -- [ValuedRegionalMaximaImageFilter](https://itk.org/Doxygen/html/classitk_1_1ValuedRegionalMaximaImageFilter.html) - -- [HConvexImageFilter](https://itk.org/Doxygen/html/classitk_1_1HConvexImageFilter.html) - -- [RegionalMinimaImageFilter](https://itk.org/Doxygen/html/classitk_1_1RegionalMinimaImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -30,8 +28,8 @@ This class was contributed to the Insight Journal by author Gaetan Lehmann. Biol ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKRegionalMinimaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKRegionalMinimaImageFilter.md index b57c06aa75..a4bf65065b 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKRegionalMinimaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKRegionalMinimaImageFilter.md @@ -1,6 +1,6 @@ # ITK Regional Minima Image Filter -Produce a binary image where foreground is the regional minima of the input image. +Produces a binary image marking the regional minima of the input image. ## Group (Subgroup) @@ -8,23 +8,19 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Regional minima are flat zones surrounded by pixels of greater value. +A regional minimum is a connected flat zone of pixels that all share the same value and whose every neighboring pixel has a strictly higher value (a local "valley" that is darker than everything immediately surrounding it). This filter labels those pixels in the output and labels everything else as background, producing a binary image. Use it to detect dark spots, basins, or seed points for later segmentation. -If the input image is constant, the entire image can be considered as a minima or not. The SetFlatIsMinima() method let the user choose which behavior to use. +If the input image is constant (completely flat), the entire image can be treated either as a single regional minimum or as background; the **Flat Is Minima** option selects which behavior to use. -## Author +### Parameter Guidance -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +- **Flat Is Minima**: When on (default), a completely flat input image is reported as a regional minimum; when off, a flat image produces an all-background result. +- **Fully Connected**: Controls pixel connectivity. When off (default, "face connected"), only face-adjacent neighbors are considered (connectivity 4 in 2D, 6 in 3D); when on, diagonal neighbors are also included (connectivity 8 in 2D, 26 in 3D). Turning it on tends to merge nearby minima into a single connected region. +- **Background Value** / **Foreground Value**: These are the output binary labels written for non-minima and minima pixels respectively. They are not intensity thresholds applied to the input. -This class was contributed to the Insight Journal by author Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. https://www.insight-journal.org/browse/publication/65 +### Required Input Sources -## See Also - -- [RegionalMaximaImageFilter](https://itk.org/Doxygen/html/classitk_1_1RegionalMaximaImageFilter.html) - -- [ValuedRegionalMinimaImageFilter](https://itk.org/Doxygen/html/classitk_1_1ValuedRegionalMinimaImageFilter.html) - -- [HConcaveImageFilter](https://itk.org/Doxygen/html/classitk_1_1HConcaveImageFilter.html) +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -32,8 +28,8 @@ This class was contributed to the Insight Journal by author Gaetan Lehmann. Biol ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKRelabelComponentImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKRelabelComponentImageFilter.md index aba93d0b15..7e0b662497 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKRelabelComponentImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKRelabelComponentImageFilter.md @@ -1,6 +1,6 @@ # ITK Relabel Component Image Filter -Relabel the components in an image such that consecutive labels are used. +Renumbers the labels in a label image consecutively, sorted so that label 1 is the largest object. ## Group (Subgroup) @@ -8,17 +8,22 @@ ITKConnectedComponents (ConnectedComponents) ## Description -RelabelComponentImageFilter remaps the labels associated with the objects in an image (as from the output of ConnectedComponentImageFilter ) such that the label numbers are consecutive with no gaps between the label numbers used. By default, the relabeling will also sort the labels based on the size of the object: the largest object will have label #1, the second largest will have label #2, etc. If two labels have the same size their initial order is kept. The sorting by size can be disabled using SetSortByObjectSize. +This filter takes a **label image** (one where each region has a unique integer value) and remaps the labels so they are consecutive with no gaps. By default it also sorts the labels by object size: the largest object becomes label 1, the second largest becomes label 2, and so on. If two objects have the same size their original relative order is kept. Sorting can be turned off, in which case the original ordering of the labels is preserved while still removing any gaps. -Label #0 is assumed to be the background and is left unaltered by the relabeling. +Label 0 is assumed to be the background and is left unchanged. -RelabelComponentImageFilter is typically used on the output of the ConnectedComponentImageFilter for those applications that want to extract the largest object or the "k" largest objects. Any particular object can be extracted from the relabeled output using a BinaryThresholdImageFilter . A group of objects can be extracted from the relabeled output using a ThresholdImageFilter . +Optionally, objects smaller than a minimum size can be discarded. This is useful for cleaning up small spurious regions after a connected-components step. Because the labels are sorted by size, you can then easily extract the largest object (label 1) or the *k* largest objects. -Once all the objects are relabeled, the application can query the number of objects and the size of each object. Object sizes are returned in a vector. The size of the background is not calculated. So the size of object #1 is GetSizeOfObjectsInPixels() [0], the size of object #2 is GetSizeOfObjectsInPixels() [1], etc. +Use this filter on the output of a labeling step, such as the [ITK Connected Component Image Filter](ITKConnectedComponentImageFilter.md) or a watershed segmentation, when you want labels ordered by size or want to drop small objects. -If user sets a minimum object size, all objects with fewer pixels than the minimum will be discarded, so that the number of objects reported will be only those remaining. The GetOriginalNumberOfObjects method can be called to find out how many objects were present before the small ones were discarded. +### Parameter Guidance -RelabelComponentImageFilter can be run as an "in place" filter, where it will overwrite its output. The default is run out of place (or generate a separate output). "In place" operation can be controlled via methods in the superclass, InPlaceImageFilter::InPlaceOn() and InPlaceImageFilter::InPlaceOff().* ConnectedComponentImageFilter , BinaryThresholdImageFilter , ThresholdImageFilter +- **Minimum Object Size** — the smallest object to keep, measured as a **voxel/pixel count** (number of pixels in the object). Any object with fewer pixels than this value is discarded and does not appear in the output. A value of 0 keeps every object. +- **SortByObjectSize** — when *On* (the default), labels are renumbered in order of decreasing object size (label 1 = largest). When *Off*, the original label order is preserved and only the gaps are removed. + +### Required Input Sources + +A label image (cell data on an **Image Geometry**), such as the output of the [ITK Connected Component Image Filter](ITKConnectedComponentImageFilter.md) or a watershed/segmentation filter. % Auto generated parameter table will be inserted here @@ -26,7 +31,7 @@ RelabelComponentImageFilter can be run as an "in place" filter, where it will ov ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKRescaleIntensityImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKRescaleIntensityImageFilter.md index 66b30c922d..bcfa1a72e5 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKRescaleIntensityImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKRescaleIntensityImageFilter.md @@ -1,6 +1,6 @@ # ITK Rescale Intensity Image Filter -Applies a linear transformation to the intensity levels of the input Image . +Linearly rescales the full intensity range of an image into a chosen output range. ## Group (Subgroup) @@ -8,15 +8,21 @@ ITKImageIntensity (ImageIntensity) ## Description -RescaleIntensityImageFilter applies pixel-wise a linear transformation to the intensity values of input image pixels. The linear transformation is defined by the user in terms of the minimum and maximum values that the output image should have. +This filter applies a linear transform that maps the **full** intensity range of the input image onto a user-specified output range. The smallest input value maps to *Output Minimum*, the largest input value maps to *Output Maximum*, and everything in between scales proportionally. It is the standard way to normalize an image to a fixed range (for example 0-255 for display, or 0-1 for downstream processing). -The following equation gives the mapping of the intensity values +$$ +\text{output} = (\text{input} - \text{inputMin}) \cdot \frac{\text{OutputMax} - \text{OutputMin}}{\text{inputMax} - \text{inputMin}} + \text{OutputMin} +$$ - \f[ outputPixel = ( inputPixel - inputMin) \cdot \frac{(outputMax - outputMin )}{(inputMax - inputMin)} + outputMin \f] +The input minimum and maximum are detected automatically, so only the output range is set by the user. To stretch a *chosen* input window rather than the full range (clamping outside it), use [ITK Intensity Windowing Image Filter](ITKIntensityWindowingImageFilter.md). -All computations are performed in the precision of the input pixel's RealType. Before assigning the computed value to the output pixel. +### Parameter Guidance -NOTE: In this filter the minimum and maximum values of the input image are computed internally using the MinimumMaximumImageCalculator . Users are not supposed to set those values in this filter. If you need a filter where you can set the minimum and maximum values of the input, please use the IntensityWindowingImageFilter . If you want a filter that can use a user-defined linear transformation for the intensity, then please use the ShiftScaleImageFilter .* IntensityWindowingImageFilter +- **Output Minimum** / **Output Maximum** — the target output range, in **output intensity units** (defaults *0* and *255*). + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -24,7 +30,7 @@ NOTE: In this filter the minimum and maximum values of the input image are compu ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSigmoidImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSigmoidImageFilter.md index 85e3a43020..86857a34dd 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSigmoidImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSigmoidImageFilter.md @@ -1,6 +1,6 @@ # ITK Sigmoid Image Filter -Computes the sigmoid function pixel-wise. +Remaps pixel intensities through an S-shaped (sigmoid) curve, useful for smoothly boosting contrast within a chosen intensity band. ## Group (Subgroup) @@ -8,11 +8,25 @@ ITKImageIntensity (ImageIntensity) ## Description -A linear transformation is applied first on the argument of the sigmoid function. The resulting total transform is given by +This filter passes every pixel value through a **sigmoid** function — a smooth S-shaped curve. Input values near a chosen center are stretched (increasing contrast there), while values far above or below the center are gently compressed toward the output maximum or minimum. It is a common way to enhance contrast in a region of interest without the hard clipping of a threshold. -![Images/ITKSigmoidImage_Equation.png](Images/ITKSigmoidImage_Equation.png) +Each output pixel is computed as: -Every output pixel is equal to f(x). Where x is the intensity of the homologous input pixel, and alpha and beta are user-provided constants. +$$ +\text{output} = (\text{OutputMax} - \text{OutputMin}) \cdot \frac{1}{1 + e^{-(x - \beta)/\alpha}} + \text{OutputMin} +$$ + +where $x$ is the input pixel value. + +### Parameter Guidance + +- **Alpha** — the width of the transition region, in input intensity units. Larger values give a gentler, more gradual slope; smaller values give a sharper, more threshold-like transition. A negative value inverts the curve. +- **Beta** — the center (inflection point) of the curve, in input intensity units. Input values near *Beta* land in the steep part of the S and are spread out the most. +- **Output Minimum** / **Output Maximum** — the range the output is mapped into (defaults *0* and *255*). + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. % Auto generated parameter table will be inserted here @@ -20,7 +34,7 @@ Every output pixel is equal to f(x). Where x is the intensity of the homologous ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSignedDanielssonDistanceMapImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSignedDanielssonDistanceMapImageFilter.md index cee3ef6952..78272f337f 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSignedDanielssonDistanceMapImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSignedDanielssonDistanceMapImageFilter.md @@ -1,6 +1,6 @@ # ITK Signed Danielsson Distance Map Image Filter -This filter computes the signed distance map of the input image as an approximation with pixel accuracy to the Euclidean distance. +Computes a near-Euclidean signed distance map of a binary image, with inside distances negative. ## Group (Subgroup) @@ -8,29 +8,31 @@ ITKDistanceMap (DistanceMap) ## Description -This class is parameterized over the type of the input image and the type of the output image. +A **distance map** replaces every pixel with its distance to the nearest object boundary. This is the **signed** variant of the Danielsson distance map: pixels **inside** an object are given **negative** distances and pixels **outside** are given **positive** distances. The distance is measured from the boundary of the object (the ON pixels). By default, inside is negative; enable *Inside Is Positive* to flip the convention. -For purposes of evaluating the signed distance map, the input is assumed to be binary composed of pixels with value 0 and non-zero. +The input is treated as binary: pixels with value 0 are background and all nonzero pixels are object. Distances are a close approximation to true Euclidean distance. -The inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function. +Like the unsigned Danielsson filter, it can also report: -As a convention, the distance is evaluated from the boundary of the ON pixels. +- **Voronoi partition** — each background pixel labeled with the closest object, dividing the image into nearest-influence regions. +- **Offset / vector map** — for each pixel, the per-axis displacement (in pixels) pointing to its closest object point. -The filter returns +Use a signed distance map when you need a smooth field that changes sign at object boundaries — for example as a level-set or shape-morphing input. -\li A signed distance map with the approximation to the euclidean distance. +### Parameter Guidance -\li A voronoi partition. (See itkDanielssonDistanceMapImageFilter) +- **Inside Is Positive** — by default, pixels inside an object are negative and pixels outside are positive. Enable this to reverse that convention (inside positive, outside negative). +- **Squared Distance** — when enabled, the output holds the distance **squared** instead of the distance. This avoids a square-root step but the values are no longer in linear distance units. Leave off for true distances. +- **Use Image Spacing** — when enabled, distances are measured in the image's **physical units** (using pixel spacing). When disabled, distances are measured in **pixels**. -\li A vector map containing the component of the vector relating the current pixel with the closest point of the closest object to this pixel. Given that the components of the distance are computed in "pixels", the vector is represented by an itk::Offset . That is, physical coordinates are not used. (See itkDanielssonDistanceMapImageFilter) +### Required Input Sources -## Warning - -This filter internally uses the DanielssonDistanceMap filter. This filter is N-dimensional. +Requires a binary image: zero marks background and any nonzero value marks object. This is typically a segmentation mask produced upstream. ## See Also -- [itkDanielssonDistanceMapImageFilter](https://itk.org/Doxygen/html/classitk_1_1itkDanielssonDistanceMapImageFilter.html) +- [ITK Danielsson Distance Map Image Filter](ITKDanielssonDistanceMapImageFilter.md) +- [ITK Signed Danielsson Distance Map Image Filter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1SignedDanielssonDistanceMapImageFilter.html) % Auto generated parameter table will be inserted here @@ -38,8 +40,8 @@ This filter internally uses the DanielssonDistanceMap filter. This filter is N-d ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSignedMaurerDistanceMapImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSignedMaurerDistanceMapImageFilter.md index 299a79a4c1..c6cdafb80d 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSignedMaurerDistanceMapImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSignedMaurerDistanceMapImageFilter.md @@ -1,6 +1,6 @@ # ITK Signed Maurer Distance Map Image Filter -This filter calculates the Euclidean distance transform of a binary image in linear time for arbitrary dimensions. +Computes an exact Euclidean signed distance map of a binary image in linear time. ## Group (Subgroup) @@ -8,17 +8,33 @@ ITKDistanceMap (DistanceMap) ## Description - Inputs and Outputs -This is an image-to-image filter. The dimensionality is arbitrary. The only dimensionality constraint is that the input and output images be of the same dimensions and size. To maintain integer arithmetic within the filter, the default output is the signed squared distance. This implies that the input image should be of type "unsigned int" or "int" whereas the output image is of type "int". Obviously, if the user wishes to utilize the image spacing or to have a filter with the Euclidean distance (as opposed to the squared distance), output image types of float or double should be used. +A **distance map** replaces every pixel with its distance to the nearest object boundary. This filter computes the **exact** Euclidean distance (not an approximation) using the Maurer algorithm, which runs in linear time for images of any dimension. -The inside is considered as having negative distances. Outside is treated as having positive distances. To change the convention, use the InsideIsPositive(bool) function. +It produces a **signed** distance map: pixels **inside** an object are given **negative** distances and pixels **outside** are given **positive** distances. By default inside is negative; enable *Inside Is Positive* to flip the convention. Unlike the Danielsson filters, this filter does not produce a Voronoi map. - Parameters -Set/GetBackgroundValue specifies the background of the value of the input binary image. Normally this is zero and, as such, zero is the default value. Other than that, the usage is completely analogous to the itk::DanielssonDistanceImageFilter class except it does not return the Voronoi map. +Use this when you need an accurate signed Euclidean distance field — for example as a level-set input or for precise distance-from-boundary measurements. -Reference: C. R. Maurer, Jr., R. Qi, and V. Raghavan, "A Linear Time Algorithm - for Computing Exact Euclidean Distance Transforms of Binary Images in - Arbitrary Dimensions", IEEE - Transactions on Pattern Analysis and Machine Intelligence, 25(2): 265-270, 2003. +> Important — the default output is the **squared** distance, not the distance itself. *Squared Distance* is enabled by default so the filter can stay in fast integer arithmetic. To get true (un-squared) Euclidean distance, turn *Squared Distance* off. + +> Note: for true Euclidean distances, or when *Use Image Spacing* is enabled, choose a floating-point output array type. An integer output can only represent the squared, pixel-unit distances correctly. + +### Parameter Guidance + +- **Inside Is Positive** — by default, pixels inside an object are negative and pixels outside are positive. Enable this to reverse the convention. +- **Squared Distance** — when enabled (the default), the output holds the distance **squared**. Disable it to get the actual (linear) distance. +- **Use Image Spacing** — when enabled, distances are measured in the image's **physical units** (using pixel spacing). When disabled, distances are measured in **pixels**. +- **Background Value** — the input intensity that marks the background. Object pixels are everything else. Normally *0* (the default). + +### Required Input Sources + +Requires a binary image where the *Background Value* marks background and all other pixels mark object. This is typically a segmentation mask produced upstream. + +## See Also + +- [ITK Danielsson Distance Map Image Filter](ITKDanielssonDistanceMapImageFilter.md) +- [ITK Signed Maurer Distance Map Image Filter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1SignedMaurerDistanceMapImageFilter.html) + +Reference: C. R. Maurer, Jr., R. Qi, and V. Raghavan, "A Linear Time Algorithm for Computing Exact Euclidean Distance Transforms of Binary Images in Arbitrary Dimensions," IEEE Transactions on Pattern Analysis and Machine Intelligence, 25(2): 265-270, 2003. % Auto generated parameter table will be inserted here @@ -26,7 +42,7 @@ Reference: C. R. Maurer, Jr., R. Qi, and V. Raghavan, "A Linear Time Algorithm ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSinImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSinImageFilter.md index 083e962ee5..ea25f9afee 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSinImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSinImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The computations are performed using std::sin(x). +Computes the sine of each pixel. Pixel values are interpreted as radians; the output is in the range [-1, 1]. Operates on any scalar image. ![](Images/ITKSinImageFilter.png) @@ -18,7 +18,7 @@ The computations are performed using std::sin(x). ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSmoothingRecursiveGaussianImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSmoothingRecursiveGaussianImageFilter.md deleted file mode 100644 index ff678f8f0e..0000000000 --- a/src/Plugins/ITKImageProcessing/docs/ITKSmoothingRecursiveGaussianImageFilter.md +++ /dev/null @@ -1,29 +0,0 @@ -# ITK Smoothing Recursive Gaussian Image Filter - -Computes the smoothing of an image by convolution with the Gaussian kernels implemented as IIR filters. - -## Group (Subgroup) - -ITKSmoothing (Smoothing) - -## Description - -This filter is implemented using the recursive gaussian filters. For multi-component images, the filter works on each component independently. - -For this filter to be able to run in-place the input and output image types need to be the same and/or the same type as the RealImageType. - -## See Also - -- [RecursiveGaussianImageFilter::SetNormalizeAcrossScale](https://itk.org/Doxygen/html/classitk_1_1RecursiveGaussianImageFilter::SetNormalizeAcrossScale.html)| - -% Auto generated parameter table will be inserted here - -## Example Pipelines - -## License & Copyright - -Please see the description file distributed with this plugin. - -## DREAM3D Mailing Lists - -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSqrtImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSqrtImageFilter.md index de49cc6cc6..59391479a7 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSqrtImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSqrtImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The computations are performed using std::sqrt(x). +Replaces each pixel value with its square root. The input image should contain only non-negative values, since the square root of a negative number is undefined. Pixel values are in image intensity units. ![](Images/ITKSqrtImageFilter.png) diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSquareImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSquareImageFilter.md index 9a1d2f4153..1f2c7c6631 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKSquareImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKSquareImageFilter.md @@ -8,6 +8,8 @@ ITKImageIntensity (ImageIntensity) ## Description +Replaces each pixel with the square of its value. + ![](Images/ITKSquareImageFilter.png) % Auto generated parameter table will be inserted here diff --git a/src/Plugins/ITKImageProcessing/docs/ITKStandardDeviationProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKStandardDeviationProjectionImageFilter.md deleted file mode 100644 index a1f47077c2..0000000000 --- a/src/Plugins/ITKImageProcessing/docs/ITKStandardDeviationProjectionImageFilter.md +++ /dev/null @@ -1,45 +0,0 @@ -# ITK Standard Deviation Projection Image Filter - -Standard deviation projection. - -## Group (Subgroup) - -ITKImageStatistics (ImageStatistics) - -## Description - -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 - -## Author - -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. - -## See Also - -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) - -- [MedianProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MedianProjectionImageFilter.html) - -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) - -- [SumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1SumProjectionImageFilter.html) - -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) - -- [MaximumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MaximumProjectionImageFilter.html) - -- [MinimumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinimumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -% Auto generated parameter table will be inserted here - -## Example Pipelines - -## License & Copyright - -Please see the description file distributed with this plugin. - -## DREAM3D Mailing Lists - -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKSumProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKSumProjectionImageFilter.md deleted file mode 100644 index 6077ef71a4..0000000000 --- a/src/Plugins/ITKImageProcessing/docs/ITKSumProjectionImageFilter.md +++ /dev/null @@ -1,45 +0,0 @@ -# ITK Sum Projection Image Filter - -Sum projection. - -## Group (Subgroup) - -ITKImageStatistics (ImageStatistics) - -## Description - -This class was contributed to the Insight Journal by Gaetan Lehmann. The original paper can be found at https://www.insight-journal.org/browse/publication/71 - -## Author - -- Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. - -## See Also - -- [ProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1ProjectionImageFilter.html) - -- [MedianProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MedianProjectionImageFilter.html) - -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) - -- [MeanProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MeanProjectionImageFilter.html) - -- [MaximumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MaximumProjectionImageFilter.html) - -- [MinimumProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1MinimumProjectionImageFilter.html) - -- [BinaryProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1BinaryProjectionImageFilter.html) - -- [StandardDeviationProjectionImageFilter](https://itk.org/Doxygen/html/classitk_1_1StandardDeviationProjectionImageFilter.html) - -% Auto generated parameter table will be inserted here - -## Example Pipelines - -## License & Copyright - -Please see the description file distributed with this plugin. - -## DREAM3D Mailing Lists - -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKTanImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKTanImageFilter.md index 5ea89f31fe..2247935f1c 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKTanImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKTanImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The computations are performed using std::tan(x). +Computes the tangent of each pixel. Pixel values are interpreted as radians. Operates on any scalar image. % Auto generated parameter table will be inserted here @@ -16,7 +16,7 @@ The computations are performed using std::tan(x). ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKThresholdImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKThresholdImageFilter.md index ade9f26f03..ad42572d51 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKThresholdImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKThresholdImageFilter.md @@ -1,6 +1,6 @@ # ITK Threshold Image Filter -Set image values to a user-specified value if they are below, above, or between simple threshold values. +Replaces pixels that fall outside a chosen intensity range with a single "outside" value while leaving in-range pixels unchanged. ## Group (Subgroup) @@ -8,21 +8,24 @@ ITKThresholding (Thresholding) ## Description -ThresholdImageFilter sets image values to a user-specified "outside" value (by default, "black") if the image values are below, above, or between simple threshold values. +This filter clips an image by intensity. Every pixel whose value lies **within the range [Lower, Upper]** keeps its original value; every pixel **outside** that range is replaced with the *Outside Value*: -The available methods are: +$$ +\text{output}(x) = \begin{cases} x & \text{if } \text{Lower} \le x \le \text{Upper} \\ \text{OutsideValue} & \text{otherwise} \end{cases} +$$ -ThresholdAbove() : The values greater than the threshold value are set to OutsideValue +Use this filter when you want to mask away intensities that are too low or too high while preserving the actual pixel values inside the band of interest. This is different from the [Binary Threshold](ITKBinaryThresholdImageFilter.md) filter, which replaces *every* pixel with one of two labels (it binarizes); here the in-range pixels retain their measured intensity. -ThresholdBelow() : The values less than the threshold value are set to OutsideValue +### Parameter Guidance -ThresholdOutside() : The values outside the threshold range (less than lower or greater than upper) are set to OutsideValue +- **Lower** / **Upper** — the bounds of the range to keep, in the **input image's intensity units**. Pixels below *Lower* or above *Upper* are set to the *Outside Value*. To keep everything above a value, set *Lower* and leave *Upper* at its maximum; to keep everything below a value, set *Upper* and leave *Lower* at its minimum. +- **Outside Value** — the intensity written for every out-of-range pixel (in the image's intensity units, default *0*). -Note that these definitions indicate that pixels equal to the threshold value are not set to OutsideValue in any of these methods +### Required Input Sources -The pixels must support the operators >= and <=. +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -![](Images/ITKThresholdImageFilter.png) +![Threshold result.](Images/ITKThresholdImageFilter.png) % Auto generated parameter table will be inserted here @@ -30,7 +33,7 @@ The pixels must support the operators >= and <=. ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKThresholdMaximumConnectedComponentsImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKThresholdMaximumConnectedComponentsImageFilter.md index fe257ea8ca..5bb750564d 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKThresholdMaximumConnectedComponentsImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKThresholdMaximumConnectedComponentsImageFilter.md @@ -1,6 +1,6 @@ # ITK Threshold Maximum Connected Components Image Filter -Finds the threshold value of an image based on maximizing the number of objects in the image that are larger than a given minimal size. +Automatically picks the threshold that yields the most distinct objects above a minimum size, then produces a binary image. ## Group (Subgroup) @@ -8,34 +8,34 @@ ITKConnectedComponents (ConnectedComponents) ## Description -This method is based on Topological Stable State Thresholding to calculate the threshold set point. This method is particularly effective when there are a large number of objects in a microscopy image. Compiling in Debug mode and enable the debug flag for this filter to print debug information to see how the filter focuses in on a threshold value. Please see the Insight Journal's MICCAI 2005 workshop for a complete description. References are below. +This filter automatically selects a threshold rather than asking you for an intensity cutoff. It searches for the threshold value that **maximizes the number of connected objects** larger than a given minimum size, then binarizes the image at that threshold. Because the chosen threshold separates as many real objects as possible while merging or dropping noise-sized blobs, the filter is well suited to **counting many small objects** — for example cells or particles in a microscopy image. -### Parameters +The lower threshold boundary is computed by the filter; you supply the upper boundary of the search and the minimum object size. Pixels that pass the selected threshold are written with the *Inside Value* and all others with the *Outside Value*. -The MinimumObjectSizeInPixels parameter is controlled through the class Get/SetMinimumObjectSizeInPixels() method. Similar to the standard itk::BinaryThresholdImageFilter the Get/SetInside and Get/SetOutside values of the threshold can be set. The GetNumberOfObjects() and GetThresholdValue() methods return the number of objects above the minimum pixel size and the calculated threshold value. +### Parameter Guidance -### Automatic Thresholding in ITK +- **Minimum Object Size In Pixels** — the smallest connected region (in **pixels**) that counts as an object. Regions smaller than this are treated as noise and ignored when the filter optimizes the threshold. Default *0* (count everything). +- **Upper Boundary** — the upper limit of the threshold search, in the **input image's intensity units**. The filter computes the lower boundary automatically. Default is the maximum intensity of the pixel type. +- **Inside Value** — the output value written for pixels that pass the selected threshold (a `uint8` label, default *1*). +- **Outside Value** — the output value written for all other pixels (a `uint8` label, default *0*). -There are multiple methods to automatically calculate the threshold intensity value of an image. As of version 4.0, ITK has a Thresholding ( ITKThresholding ) module which contains numerous automatic thresholding methods.implements two of these. Topological Stable State Thresholding works well on images with a large number of objects to be counted. +### Required Input Sources -## References - -1) Urish KL, August J, Huard J. "Unsupervised segmentation for myofiber counting in immunofluorescent microscopy images". Insight Journal. ISC/NA-MIC/MICCAI Workshop on Open-Source Software (2005) https://insight-journal.org/browse/publication/40 -2) Pikaz A, Averbuch, A. "Digital image thresholding based on topological -stable-state". Pattern Recognition, 29(5): 829-843, 1996. +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. -## Questions +% Auto generated parameter table will be inserted here -email Ken Urish at ken.urish(at)gmail.com Please cc the itk list serve for archival purposes. +## References -% Auto generated parameter table will be inserted here +1. Urish KL, August J, Huard J. "Unsupervised segmentation for myofiber counting in immunofluorescent microscopy images." Insight Journal, ISC/NA-MIC/MICCAI Workshop on Open-Source Software (2005). +2. Pikaz A, Averbuch A. "Digital image thresholding based on topological stable-state." Pattern Recognition, 29(5): 829-843, 1996. ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMaximaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMaximaImageFilter.md index 7640064986..7fb9c28800 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMaximaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMaximaImageFilter.md @@ -1,14 +1,6 @@ # ITK Valued Regional Maxima Image Filter -Transforms the image so that any pixel that is not a regional maxima is set to the minimum value for the pixel type. Pixels that are regional maxima retain their value. - -The pixel neighborhood is controlled by the FullyConnected attribute. All adjacent pixels are included in -the neighborhood when FullyConnected=True and the diagonally adjacent pixels are not included when -FullyConnected=False. Different terminology is often used to describe neighborhoods – one common ex- -ample is the “connectivity” notation, which refers to the number of pixels in the neighborhood. FullyCon- -nected=False corresponds to a connectivty of 4 in 2D and 6 in 3D, while FullyConnected=True corresponds -to a connectivity of 8 in 2D and 26 in 3D. FullyConnected=False is also commonly referred to as “face -connected”. +Marks regional maxima while preserving their original pixel intensities; all other pixels are set to the pixel-type minimum. ## Group (Subgroup) @@ -16,19 +8,21 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Regional maxima are flat zones surrounded by pixels of lower value. A completely flat image will be marked as a regional maxima by this filter. +A regional maximum is a connected flat zone of pixels that all share the same value and whose every neighboring pixel has a strictly lower value. Unlike the binary [ITK Regional Maxima Image Filter](ITKRegionalMaximaImageFilter.md), this filter keeps each regional-maximum pixel at its original intensity and sets every other pixel to the minimum value for the pixel type, so the relative brightness of the detected peaks is retained. A completely flat image is marked entirely as a regional maximum. + +The pixel neighborhood is controlled by the **Fully Connected** attribute. When it is off ("face connected"), only face-adjacent pixels are considered neighbors, corresponding to a connectivity of 4 in 2D and 6 in 3D. When it is on, diagonally adjacent pixels are also included, corresponding to a connectivity of 8 in 2D and 26 in 3D; this tends to merge nearby maxima into a single connected region. + +### Parameter Guidance -This code was contributed in the Insight Journal paper: "Finding regional extrema - methods and performance" by Beare R., Lehmann G. +- **Fully Connected Components**: See the connectivity discussion above. Leave off for standard face-connected behavior. -### Author +### Required Input Sources - Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. -### Related Filters +### See Also -- ValuedRegionalMinimaImageFilter -- ValuedRegionalExtremaImageFilter -- HMinimaImageFilter +- [ITK Valued Regional Minima Image Filter](ITKValuedRegionalMinimaImageFilter.md) % Auto generated parameter table will be inserted here @@ -36,7 +30,7 @@ This code was contributed in the Insight Journal paper: "Finding regional extrem ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMinimaImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMinimaImageFilter.md index 95d7bef3f2..74941269e0 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMinimaImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKValuedRegionalMinimaImageFilter.md @@ -1,6 +1,6 @@ # ITK Valued Regional Minima Image Filter -Transforms the image so that any pixel that is not a regional minima is set to the maximum value for the pixel type. Pixels that are regional minima retain their value. +Marks regional minima while preserving their original pixel intensities; all other pixels are set to the pixel-type maximum. ## Group (Subgroup) @@ -8,18 +8,21 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Regional minima are flat zones surrounded by pixels of higher value. A completely flat image will be marked as a regional minima by this filter. +A regional minimum is a connected flat zone of pixels that all share the same value and whose every neighboring pixel has a strictly higher value. Unlike the binary [ITK Regional Minima Image Filter](ITKRegionalMinimaImageFilter.md), this filter keeps each regional-minimum pixel at its original intensity and sets every other pixel to the maximum value for the pixel type, so the relative darkness of the detected valleys is retained. A completely flat image is marked entirely as a regional minimum. -This code was contributed in the Insight Journal paper: "Finding regional extrema - methods and performance" by Beare R., Lehmann G. +The pixel neighborhood is controlled by the **Fully Connected** attribute. When it is off ("face connected"), only face-adjacent pixels are considered neighbors, corresponding to a connectivity of 4 in 2D and 6 in 3D. When it is on, diagonally adjacent pixels are also included, corresponding to a connectivity of 8 in 2D and 26 in 3D; this tends to merge nearby minima into a single connected region. -### Author +### Parameter Guidance - Richard Beare. Department of Medicine, Monash University, Melbourne, Australia. +- **Fully Connected Components**: See the connectivity discussion above. Leave off for standard face-connected behavior. -### Related Filters +### Required Input Sources -- ValuedRegionalMaximaImageFilter , ValuedRegionalExtremaImageFilter , -- HMinimaImageFilter +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or a prior ITK image filter. + +### See Also + +- [ITK Valued Regional Maxima Image Filter](ITKValuedRegionalMaximaImageFilter.md) % Auto generated parameter table will be inserted here @@ -27,7 +30,7 @@ This code was contributed in the Insight Journal paper: "Finding regional extrem ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin**. ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKWhiteTopHatImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKWhiteTopHatImageFilter.md index c4e2b009eb..1536e54427 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKWhiteTopHatImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKWhiteTopHatImageFilter.md @@ -1,6 +1,6 @@ # ITK White Top Hat Image Filter -White top hat extracts local maxima that are larger than the structuring element. +Extracts small bright features by subtracting the grayscale opening from the original image. ## Group (Subgroup) @@ -8,32 +8,39 @@ ITKMathematicalMorphology (MathematicalMorphology) ## Description -Top-hats are described in Chapter 4.5 of Pierre Soille's book "Morphological Image Analysis: Principles and Applications", Second Edition, Springer, 2003. +The **white top-hat** isolates small **bright** features — bright spots and narrow bright ridges smaller than the **structuring element** (the probe shape swept over the image). It is computed as the original image minus its grayscale **opening**, which leaves the small bright details on a flat (near-zero) background. A common use is correcting uneven (bright) background illumination or extracting small bright details for measurement. The dark-feature counterpart is [ITK Black Top Hat Image Filter](ITKBlackTopHatImageFilter.md). -### Author +### Parameter Guidance - Gaetan Lehmann. Biologie du Developpement et de la Reproduction, INRA de Jouy-en-Josas, France. +- **Kernel Radius** — the radius of the structuring element, **in pixels** (one value per axis). It sets the size scale: features smaller than the structuring element are extracted, larger structures are removed. +- **Safe Border** — when on (default), a temporary border is added during processing to avoid edge artifacts and removed afterward. -### Related Filters +#### Kernel Type -![](Images/ITKWhiteTopHat.png) - -### Kernel Type - -The *Kernel Type* parameter selects the structuring element used for the morphological operation: +The *Kernel Type* parameter selects the structuring element shape: - **Annulus [0]**: A ring-shaped structuring element. - **Ball [1]**: A spherical structuring element (default). Most commonly used for general morphological operations. - **Box [2]**: A rectangular/cuboid structuring element. - **Cross [3]**: A cross-shaped structuring element. +### Required Input Sources + +Operates on any scalar (grayscale) image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +![White top-hat example.](Images/ITKWhiteTopHat.png) + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 4.5). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/ITKImageProcessing/docs/ITKZeroCrossingImageFilter.md b/src/Plugins/ITKImageProcessing/docs/ITKZeroCrossingImageFilter.md index cf01c32f8a..e2e6f4c2f2 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKZeroCrossingImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs/ITKZeroCrossingImageFilter.md @@ -1,6 +1,6 @@ # ITK Zero Crossing Image Filter -This filter finds the closest pixel to the zero-crossings (sign changes) in a signed itk::Image . +Marks the pixels that sit at sign changes (zero crossings) of a signed image, which typically correspond to edges. ## Group (Subgroup) @@ -8,25 +8,27 @@ ITKImageFeature (ImageFeature) ## Description -Pixels closest to zero-crossings are labeled with a foreground value. All other pixels are marked with a background value. The algorithm works by detecting differences in sign among neighbors using city-block style connectivity (4-neighbors in 2d, 6-neighbors in 3d, etc.). +A **zero crossing** is a place where a signed image changes sign — going from positive to negative or vice versa. When the input is a second-derivative image such as a Laplacian, these sign changes line up with the edges in the original image, so detecting them is a common edge-finding step. -## Parameter Information +This filter examines each pixel and its immediate neighbors using city-block (face) connectivity — 4 neighbors in 2D, 6 in 3D. Where a sign change is found, the pixel nearest the crossing is labeled as foreground; every other pixel is labeled as background. The result is a thin, binary edge map. -- The input to this filter is an itk::Image of arbitrary dimension. The algorithm assumes a signed data type (zero-crossings are not defined for unsigned int data types), and requires that operator>, operator<, operator==, and operator!= are defined. +The input must be a **signed** image. Zero crossings are not defined for unsigned data, since unsigned values never go negative. -- The output of the filter is a binary, labeled image of user-specified type. By default, zero-crossing pixels are labeled with a default "foreground" value of itk::NumericTraits::OneValue() , where OutputDataType is the data type of the output image. All other pixels are labeled with a default "background" value of itk::NumericTraits::ZeroValue() . +Use this filter after computing a Laplacian (or other signed response) to extract edge locations. -- There are two parameters for this filter. ForegroundValue is the value that marks zero-crossing pixels. The BackgroundValue is the value given to all other pixels. +### Parameter Guidance -## See Also +- **Foreground Value** — the label written to pixels that lie on a zero crossing (the detected edges). Default *1*. +- **Background Value** — the label written to all other pixels. Default *0*. -- [Image](https://itk.org/Doxygen/html/classitk_1_1Image.html) +### Required Input Sources -- [Neighborhood](https://itk.org/Doxygen/html/classitk_1_1Neighborhood.html) +Requires a **signed** scalar image whose sign changes are meaningful — most commonly the output of a Laplacian-of-Gaussian step such as [ITK Laplacian Recursive Gaussian Image Filter](ITKLaplacianRecursiveGaussianImageFilter.md). -- [NeighborhoodOperator](https://itk.org/Doxygen/html/classitk_1_1NeighborhoodOperator.html) +## See Also -- [NeighborhoodIterator](https://itk.org/Doxygen/html/classitk_1_1NeighborhoodIterator.html) +- [ITK Laplacian Recursive Gaussian Image Filter](ITKLaplacianRecursiveGaussianImageFilter.md) +- [ITK ZeroCrossingImageFilter (ITK Doxygen)](https://itk.org/Doxygen/html/classitk_1_1ZeroCrossingImageFilter.html) % Auto generated parameter table will be inserted here @@ -34,8 +36,8 @@ Pixels closest to zero-crossings are labeled with a foreground value. All other ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKBoundedReciprocalImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKBoundedReciprocalImageFilter.md similarity index 70% rename from src/Plugins/ITKImageProcessing/docs/ITKBoundedReciprocalImageFilter.md rename to src/Plugins/ITKImageProcessing/docs_disabled/ITKBoundedReciprocalImageFilter.md index 98c42b427d..108d07bd63 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKBoundedReciprocalImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKBoundedReciprocalImageFilter.md @@ -8,7 +8,7 @@ ITKImageIntensity (ImageIntensity) ## Description -The filter expects both the input and output images to have the same number of dimensions, and both of a scalar image type. +Computes `1 / (1 + x)` for each pixel value `x`. For non-negative input intensities the result is bounded in the range `(0, 1]`, which makes this filter useful for mapping an unbounded intensity range into a normalized interval. Output values are dimensionless. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/ITKImageProcessing/docs_disabled/ITKMorphologicalWatershedFromMarkersImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKMorphologicalWatershedFromMarkersImageFilter.md new file mode 100644 index 0000000000..ec8279c66f --- /dev/null +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKMorphologicalWatershedFromMarkersImageFilter.md @@ -0,0 +1,38 @@ +# ITK Morphological Watershed From Markers Image Filter + +Marker-controlled watershed segmentation: floods the image from user-supplied seeds so that each seed produces exactly one labeled region. + +## Group (Subgroup) + +ITKWatersheds (Watersheds) + +## Description + +The **watershed transform** treats a grayscale image as a terrain (bright = high ground, dark = low ground) and floods it from its low points, partitioning it into **catchment basins** separated by **watershed lines**. Run on its own, a watershed almost always produces far more regions than there are real objects, because every small dip seeds a basin (over-segmentation). + +The **marker-controlled** variant fixes this. Instead of seeding a basin at every local minimum, it floods only from a set of **markers** — labeled seed points the user places, typically one marker per object of interest plus one for the background. Exactly one output region is produced per marker, and each output region carries that marker's label. Choosing good markers (for example, the centers of objects found by thresholding and [ITK Connected Component Image Filter](ITKConnectedComponentImageFilter.md)) is what makes this approach robust. + +> **Not currently available:** in ITK this filter takes *two* images — the image to flood (usually a gradient/edge image) and a separate **marker (seed) label image**. The DREAM3D-NX wrapper only exposes a single input array (no marker-image parameter), so it is **not built into the application** at present. See [bluequartzsoftware/simplnx#1639](https://github.com/BlueQuartzSoftware/simplnx/issues/1639). For an unseeded watershed, use [ITK Morphological Watershed Image Filter](ITKMorphologicalWatershedImageFilter.md). + +### Parameter Guidance + +- **Mark Watershed Line** — when on, the boundary pixels between regions are written as 0; when off, no separating line is drawn. +- **Fully Connected** — controls neighbor connectivity (face-only versus face + edge + corner). Turn it on for thin, one-pixel-wide features. + +The output is a label image whose region labels come from the marker labels. Compare with the unseeded [ITK Morphological Watershed Image Filter](ITKMorphologicalWatershedImageFilter.md). + +## Reference + +Pierre Soille, *Morphological Image Analysis: Principles and Applications*, Second Edition, Springer, 2003 (Chapter 9.2). Beare R., Lehmann G., "The watershed transform in ITK — discussion and new developments," Insight Journal, . + +% Auto generated parameter table will be inserted here + +## Example Pipelines + +## License & Copyright + +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs/ITKNormalizeToConstantImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKNormalizeToConstantImageFilter.md similarity index 76% rename from src/Plugins/ITKImageProcessing/docs/ITKNormalizeToConstantImageFilter.md rename to src/Plugins/ITKImageProcessing/docs_disabled/ITKNormalizeToConstantImageFilter.md index e16ae7ad32..c9e7bdfd03 100644 --- a/src/Plugins/ITKImageProcessing/docs/ITKNormalizeToConstantImageFilter.md +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKNormalizeToConstantImageFilter.md @@ -1,4 +1,4 @@ -# ITK Normalize To Constant Image Filter (ITKNormalizeToConstantImage) +# ITK Normalize To Constant Image Filter Scales image pixel intensities to make the sum of all pixels equal a user-defined constant. @@ -8,9 +8,11 @@ ITKImageIntensity (ImageIntensity) ## Description -The default value of the constant is 1. It can be changed with SetConstant() . +Scales every pixel so that the sum of all pixel values equals the user-defined Constant. This transform is especially useful for normalizing a convolution kernel. -This transform is especially useful for normalizing a convolution kernel. +### Parameter Guidance + +- **Constant**: The target sum for all pixel values after scaling. This is a dimensionless value with a default of 1. This code was contributed in the Insight Journal paper: ["FFT based convolution" by Lehmann G. https://insight-journal.org/browse/publication/717](https://insight-journal.org/browse/publication/717) @@ -35,6 +37,6 @@ convolution" by Lehmann G. https://insight-journal.org/browse/publication/717](h Please see the description file distributed with this plugin. -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs_disabled/ITKSmoothingRecursiveGaussianImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKSmoothingRecursiveGaussianImageFilter.md new file mode 100644 index 0000000000..10abe07292 --- /dev/null +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKSmoothingRecursiveGaussianImageFilter.md @@ -0,0 +1,32 @@ +# ITK Smoothing Recursive Gaussian Image Filter + +Gaussian blur computed recursively, so the run time stays constant no matter how large the blur — preferred for wide smoothing. + +## Group (Subgroup) + +ITKSmoothing (Smoothing) + +## Description + +This filter produces the same kind of **Gaussian blur** as [ITK Discrete Gaussian Image Filter](ITKDiscreteGaussianImageFilter.md), but implements it with a recursive (IIR) approximation. The key advantage is that its cost is **independent of the blur width (sigma)** — a large blur takes no longer than a small one — so it is the better choice when smoothing strongly. For multi-component images each component is smoothed independently. + +### Parameter Guidance + +- **Sigma** — the Gaussian standard deviation (the blur radius). Larger values blur more. By default it is measured in the geometry's **physical/world units** (or pixels if image spacing is not used). It is specified as an integer value; typical values are around 1-3. +- **Normalize Across Scale** — a scale-normalization option used mainly when comparing the responses of this filter at several different Sigma values (multi-scale analysis); leave off for ordinary smoothing. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +% Auto generated parameter table will be inserted here + +## Example Pipelines + +## License & Copyright + +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs_disabled/ITKStandardDeviationProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKStandardDeviationProjectionImageFilter.md new file mode 100644 index 0000000000..211f48e911 --- /dev/null +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKStandardDeviationProjectionImageFilter.md @@ -0,0 +1,37 @@ +# ITK Standard Deviation Projection Image Filter + +Collapses a 3D volume to a 2D image by taking the standard deviation of voxel values along one axis. + +## Group (Subgroup) + +ITKImageStatistics (ImageStatistics) + +## Description + +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **standard deviation**: for each line of voxels parallel to the selected axis, the output voxel measures how much the values along that line vary about their mean. The result has one fewer dimension than the input. + +Where the volume is uniform along the collapsed axis, the standard deviation is near zero (dark). Where intensity varies strongly along that axis, the result is large (bright). Use this filter to **highlight variability** — for example, to find regions that change through a stack of slices rather than to summarize their average value. + +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` + +### Parameter Guidance + +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +% Auto generated parameter table will be inserted here + +## Example Pipelines + +## License & Copyright + +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/docs_disabled/ITKSumProjectionImageFilter.md b/src/Plugins/ITKImageProcessing/docs_disabled/ITKSumProjectionImageFilter.md new file mode 100644 index 0000000000..3e26910d7b --- /dev/null +++ b/src/Plugins/ITKImageProcessing/docs_disabled/ITKSumProjectionImageFilter.md @@ -0,0 +1,41 @@ +# ITK Sum Projection Image Filter + +Collapses a 3D volume to a 2D image by summing voxel values along one axis. + +## Group (Subgroup) + +ITKImageStatistics (ImageStatistics) + +## Description + +A **projection** collapses a 3D volume into a 2D image by combining all voxels along one axis into a single output value. This filter uses the **sum**: for each line of voxels parallel to the selected axis, the output voxel is the total of all values along that line. The result has one fewer dimension than the input. + +Sum projection accumulates intensity through the volume, much like an X-ray-style integrated view where the output brightness reflects the total material or signal along each line of sight. + +```{warning} +Summing many voxels can produce values far larger than any single input voxel. If the output array uses the same data type as the input (for example, an 8-bit or 16-bit integer), the accumulated sum can **exceed the type's range and overflow**, wrapping around to incorrect values. Convert the image to a wider type (such as float32) before this filter when overflow is a concern. +``` + +```{note} +This filter changes the dimensionality of the **Image Geometry** that the data is tied to. As a side effect, **every** Data Array stored in the same Attribute Matrix as the input and output array is also affected. +``` + +### Parameter Guidance + +- *Projection Dimension* — the axis to collapse, given as an index: *0*, *1*, or *2*. Index *0* is the slowest-moving dimension. The output image keeps the two remaining axes. + +### Required Input Sources + +Operates on any scalar image — typically from [Read Image](../SimplnxCore/ReadImageFilter.md), [Read Images [3D Stack]](../SimplnxCore/ReadImageStackFilter.md), or the output of a prior ITK image filter. + +% Auto generated parameter table will be inserted here + +## Example Pipelines + +## License & Copyright + +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/ITKImageProcessing/src/ITKImageProcessing/Filters/ITKIsoContourDistanceImageFilter.cpp b/src/Plugins/ITKImageProcessing/src/ITKImageProcessing/Filters/ITKIsoContourDistanceImageFilter.cpp index 507b380552..10aab17051 100644 --- a/src/Plugins/ITKImageProcessing/src/ITKImageProcessing/Filters/ITKIsoContourDistanceImageFilter.cpp +++ b/src/Plugins/ITKImageProcessing/src/ITKImageProcessing/Filters/ITKIsoContourDistanceImageFilter.cpp @@ -73,7 +73,10 @@ Parameters ITKIsoContourDistanceImageFilter::parameters() const Parameters params; params.insertSeparator(Parameters::Separator{"Input Parameter(s)"}); params.insert(std::make_unique(k_LevelSetValue_Key, "Level Set Value", "Set/Get the value of the level set to be located. The default value is 0.", 0.0)); - params.insert(std::make_unique(k_FarValue_Key, "Far Value", "Set/Get the value of the level set to be located. The default value is 0.", 10)); + params.insert(std::make_unique(k_FarValue_Key, "Far Value", + "The saturation distance assigned to pixels that are not adjacent to the iso-contour. Pixels beyond the immediate neighborhood of the contour are " + "clamped to this value. The default value is 10.", + 10)); params.insertSeparator(Parameters::Separator{"Input Cell Data"}); params.insert(std::make_unique(k_InputImageGeomPath_Key, "Image Geometry", "Select the Image Geometry Group from the DataStructure.", DataPath({"Image Geometry"}), diff --git a/src/Plugins/OrientationAnalysis/docs/AlignSectionsMisorientationFilter.md b/src/Plugins/OrientationAnalysis/docs/AlignSectionsMisorientationFilter.md index 0e9674d464..98fb777f7d 100644 --- a/src/Plugins/OrientationAnalysis/docs/AlignSectionsMisorientationFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/AlignSectionsMisorientationFilter.md @@ -6,20 +6,34 @@ Reconstruction (Alignment) ## Description -This **Filter** attempts to align consecutive 'sections' perpendicular to the Z-direction of the sample by determining the position that results in the minimum amount of misorientation between **Cells** directly above-below each other. The algorithm of this **Filter** is as follows: +This **Filter** aligns serial sections (2D slices stacked along the Z-direction) by finding the shift that minimizes the crystal orientation mismatch between cells on neighboring slices. This is the most commonly used alignment method for EBSD data because it directly uses the orientation information measured at each point. -1. Calculate the misorientation between each **Cell** in a section and the **Cell** directly above it in the next section -2. Count the number of **Cell** pairs that have a misorientation above the user defined tolerance and store that as the misalignment value for that position -3. Repeat steps 1 and 2 for each position when shifting the second slice (relative to the first) from three (3) **Cells** to the left to three (3) **Cells** to the right, as well as from three (3) **Cells** up to three (3) **Cells** down. *Note that this creates a 7x7 grid* -4. Determine the position in the 7x7 grid that has the lowest misalignment value. (It will be the position with the fewest different **Cell** pairs) -5. Repeat steps 1-4 with the center of each (new) 7x7 grid at the best position from the last 7x7 grid until the best position in the current/new 7x7 grid is the same as the last 7x7 grid -6. Repeat steps 1-5 for each pair of neighboring sections +### When to Use This Method -**Note that this is similar to a downhill simplex and can get caught in a local minimum!** +Use this method when your data contains crystal orientation measurements (quaternions or Euler angles) and you want to align sections based on the actual crystallographic content. This works well for most EBSD datasets. For data without orientation information, consider the [Align Sections (Feature Centroid)](../SimplnxCore/AlignSectionsFeatureCentroidFilter.md) or [Align Sections (Mutual Information)](AlignSectionsMutualInformationFilter.md) methods instead. -If the user elects to use a mask array, the **Cells** flagged as *false* in the mask array will not be considered during the alignment process. +### How This Filter Works -The user can also decide to remove a *background shift* present in the sample. The process for this is to fit a line to the X and Y shifts along the Z-direction of the sample. The individual shifts are then modified to make the slope of the fit line be 0. Effectively, this process is trying to keep the top and bottom section of the sample fixed. Some combinations of sample geometry and internal features can result in this algorithm introducing a 'shear' in the sample and the *Linear Background Subtraction* will attempt to correct for this. +The filter uses an iterative grid search to find the optimal alignment for each pair of neighboring sections: + +1. For a given relative position of two sections, calculate the misorientation between each **Cell** on the lower section and the **Cell** directly above it on the upper section +2. Count the number of cell pairs whose misorientation exceeds the user-defined tolerance. This count is the "misalignment score" for that position -- lower is better +3. Evaluate the misalignment score at all 49 positions in a 7x7 grid (shifting the upper section from -3 to +3 cells in both X and Y) +4. Select the position with the lowest misalignment score +5. Re-center the 7x7 grid on the best position and repeat until the best position no longer changes +6. Repeat for each pair of neighboring sections + +### Local Minima Warning + +This iterative grid search is similar to a downhill simplex optimization and **can get caught in a local minimum**. If alignment results look incorrect, try adjusting the misorientation tolerance or consider using the [Align Sections (Feature Centroid)](../SimplnxCore/AlignSectionsFeatureCentroidFilter.md) method, which does not have this limitation. + +### Masking + +If a mask array is provided, **Cells** flagged as *false* are excluded from the alignment calculation. This is useful for ignoring regions of bad data or regions outside the sample boundary. + +### Linear Background Subtraction + +Some combinations of sample geometry and internal features can cause the alignment to introduce a gradual "shear" across the sample. Enabling *Linear Background Subtraction* corrects for this by fitting a line to the X and Y shifts along the Z-direction and removing the linear trend. This effectively keeps the top and bottom sections of the sample fixed relative to each other. ## Optional Output Data @@ -44,12 +58,18 @@ In this new structure, what follows is what the created structures represent: In previous versions a file would have been produced instead. If you wish to recreate this, you can write the Attribute Matrix as a CSV/Text file. +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). +- **Mask** (optional) -- a boolean array marking valid cells, typically produced by a threshold operation such as [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -+ (02) Small IN100 Full Reconstruction ++ `(02) Small IN100 Full Reconstruction` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/AlignSectionsMutualInformationFilter.md b/src/Plugins/OrientationAnalysis/docs/AlignSectionsMutualInformationFilter.md index 9fe3485150..7f267e4db7 100644 --- a/src/Plugins/OrientationAnalysis/docs/AlignSectionsMutualInformationFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/AlignSectionsMutualInformationFilter.md @@ -6,25 +6,35 @@ Reconstruction (Alignment) ## Description -This **Filter** segments each 2D slice, creating *Feature Ids* that are used when determining the *mutual information* between neighboring slices. The slices are shifted relative to one another until the position of maximum *mutual information* is determined for each section. The *Feature Ids* are temporary, they apply to this **Filter** only and are not related to the *Feature Ids* generated in other **Filters**. The algorithm of this **Filter** is listed below: +This **Filter** aligns serial sections (2D slices stacked along the Z-direction) by maximizing the *mutual information* between the feature patterns on neighboring slices. Rather than comparing individual cell orientations (as in [Align Sections (Misorientation)](AlignSectionsMisorientationFilter.md)), this method first groups cells into temporary features on each slice, then finds the shift that best aligns those feature patterns between slices. -1. Segment *Features* on each 'section' of the sample perpendicular to the Z-direction. This is done using the same algorithm in the [Segment Features (Misorientation)](@ref alignsectionsmisorientation) **Filter** (only in 2D on each section) -2. Calculate the *mutual information* between neighboring sections and store that as the misalignment value for that position. *Mutual information* is related to the ratio of joint probability to individual probabilities of variables (i.e., p(x,y)/p(x)p(y) ). Details of the actual *mutual information* calculation can be found in the references below, but can be thought of as the inherent dependence between variables (here the *Feature Ids* on neighboring sections). -3. Repeat step 2 for each position when shifting the second slice (relative to the first) from three (3) **Cells** to the left -to three (3) **Cells** to the right, as well as from three (3) **Cells** up to three (3) **Cells** down -*Note that this creates a 7x7 grid* -4. Determine the position in the 7x7 grid that has the highest *mutual information* value -5. Repeat steps 2-4 with the center of each (new) 7x7 grid at the best position from the last 7x7 grid until the best position in the current/new 7x7 grid is the same as the last 7x7 grid +### When to Use This Method -6) Repeat steps 2-5 for each pair of neighboring sections +This method is useful when feature-level pattern matching is more appropriate than cell-level orientation comparison. It can sometimes produce better results than misorientation-based alignment when the data has significant noise or when features are large relative to the misalignment. -**Note that this is similar to a downhill simplex and can get caught in a local minimum!** +### What is Mutual Information? -The user choses the level of *misorientation tolerance* by which to align **Cells**, where here the tolerance means the *misorientation* cannot exceed a given value. If the rotation angle is below the tolerance, then the **Cell** is grouped with other **Cells** that satisfy the criterion. +Mutual information is a statistical measure of how much information one variable provides about another. In this context, it measures how well the feature patterns on two neighboring slices correspond to each other. High mutual information means the features on one slice strongly predict the features on the adjacent slice -- indicating good alignment. -The approach used in this **Filter** is to group neighboring **Cells** on a slice that have a *misorientation* below the tolerance the user entered. *Misorientation* here means the minimum rotation angle of one **Cell's** crystal axis needed to coincide with another **Cell's** crystal axis. When the **Features** in the slices are defined, they are moved until *disks* in neighboring slices align with each other. +### How This Filter Works -If the user elects to use a mask array, the **Cells** flagged as *false* in the mask array will not be considered during the alignment process. +1. **Segment features on each slice:** Neighboring cells on each 2D slice are grouped into temporary features using a misorientation tolerance (the same algorithm as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md), applied in 2D). These feature IDs are internal to this filter and are not stored. +2. **Calculate mutual information:** For a given relative position of two slices, compute the mutual information between the feature ID patterns on the two slices. +3. **Grid search:** Evaluate the mutual information at all 49 positions in a 7x7 grid (shifting the upper slice from -3 to +3 cells in both X and Y). Select the position with the highest mutual information. +4. **Iterate:** Re-center the 7x7 grid on the best position and repeat until the best position no longer changes. +5. **Repeat** for each pair of neighboring sections. + +### Misorientation Tolerance + +The *misorientation tolerance* parameter controls how cells are grouped into temporary features on each slice. Cells whose orientations differ by less than this tolerance are grouped together. Lower values produce more, smaller features; higher values produce fewer, larger features. + +### Local Minima Warning + +This iterative grid search is similar to a downhill simplex optimization and **can get caught in a local minimum**. If alignment results look incorrect, try adjusting the misorientation tolerance or consider using the [Align Sections (Feature Centroid)](../SimplnxCore/AlignSectionsFeatureCentroidFilter.md) method, which does not have this limitation. + +### Masking + +If a mask array is provided, **Cells** flagged as *false* are excluded from the alignment calculation. ## Optional Output Data @@ -49,6 +59,13 @@ In this new structure, what follows is what the created structures represent: In previous versions a file would have been produced instead. If you wish to recreate this, you can write the Attribute Matrix as a CSV/Text file. +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). +- **Mask** (optional) -- a boolean array marking valid cells, typically produced by a threshold operation such as [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## References @@ -65,7 +82,7 @@ Journal articles on *Mutual Information* that are useful: ## Example Pipelines -AlignSectionsMutualInformation ++ `AlignSectionsMutualInformation` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/BadDataNeighborOrientationCheckFilter.md b/src/Plugins/OrientationAnalysis/docs/BadDataNeighborOrientationCheckFilter.md index c2030698d3..ba46453696 100644 --- a/src/Plugins/OrientationAnalysis/docs/BadDataNeighborOrientationCheckFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/BadDataNeighborOrientationCheckFilter.md @@ -6,55 +6,54 @@ Processing (Cleanup) ## Description -This filter will change the value of a cell's `mask` value from **False** to **True** based on the misorientation between the target -cell and it's 6-face neighbors. This filter should be used to target isolated -voxels inside potential features (grains). +This **Filter** rescues *bad* cells (those with *Mask = false*) that are surrounded by good cells with consistent orientations. It does **not** modify any cell-level attributes other than the **Mask** array; it only flips the *Mask* value of qualifying cells from **false** to **true**, effectively re-classifying them as good. -### Algorithm Description +This is a sister filter to [Neighbor Orientation Correlation](NeighborOrientationCorrelationFilter.md). The key difference: this filter only updates the mask, while *Neighbor Orientation Correlation* copies full cell attributes from a neighbor. Use this filter as the **first pass** to recover cells that were marked bad by an over-aggressive threshold but are genuinely surrounded by valid neighbors; use *Neighbor Orientation Correlation* afterward to clean up cells whose orientation is genuinely wrong. -For each cell (voxel) in the input Image Geometry, if the *Mask* value of the target cell is **FALSE**, -then the misorientation between that cell and each of its 6-face -neighbor cells is calculated. If the number of misorientation values that fall below the -user defined threshold is equal to or greater than the user defined value of -`Required Number of Neighbors` then the current cells `mask` value is changed from -**False** to **True**. +### How This Filter Works -The filter will iteratively reduce the required number of neighbors from 6 until -it reaches the user defined number. So, if the user selects a required number -of neighbors of 4, then the filter will run with a required number of neighbors -of 6, then 5, then 4 before finishing. +For each cell whose *Mask* is **false**: -During the algorithm since the `mask` array is being updated continuously, each time -the `mask` array is updated, any neighbors of that changed voxel are evaluated again -to check if that neighbor now has the required number of valid neighbors. If this -check ends up being true then that neighbor voxel is added to the list of voxels to check. -This can lead to a **Flood Fill** type of algorithm. The user should take care to examine -the output from this filter to ensure that the filter is not being overly aggressive about -changing voxels. +1. Compute the misorientation between the cell and each of its 6 face-neighbors (cells in the +X, -X, +Y, -Y, +Z, -Z directions). +2. Count the number of neighbors whose misorientation falls below the user-specified *Misorientation Tolerance*. +3. If that count is at least *Required Number of Neighbors*, flip the cell's *Mask* from **false** to **true**. -### 2D Versus 3D Note +The filter steps down through *Required Number of Neighbors* from 6 to the user-defined floor: setting it to 4 runs at levels 6, 5, and 4 in sequence. -If the user is processing a 2D data set, **none** of the voxels can have 6 neighbors -since there are no neighbors in the +/-Z directions. +While the algorithm runs, the *Mask* array is updated continuously. When a cell's mask flips, its neighbors are re-evaluated -- they may now have enough valid neighbors to qualify themselves. **This can cascade into a flood fill**, especially if the user sets *Required Number of Neighbors* very low. Always inspect the output to confirm the filter is not overshooting. -### Warning - Data Modification +### Required Number of Neighbors -Only the *Mask* value defining the cell as *good* or *bad* is changed. No other cell level array is modified. +The *Required Number of Neighbors* parameter is the **count of agreeing face-neighbors needed to flip the mask** and ranges from **1 to 6**: -### Memory Considerations +- **6** -- only rescue cells where all 6 face-neighbors agree. Very conservative. +- **4-5** -- rescues most over-thresholded cells while leaving genuinely uncertain cells alone. +- **2-3** -- aggressive; risks cascading. +- **1** -- one matching neighbor is enough; effectively a flood fill. -The filter allocates a temporary `int32` neighbor-count array sized to the total voxel count -(4 bytes per voxel). For a 1-billion-voxel dataset, that is approximately 4 GB of additional -working memory during execution. This memory is released when the filter finishes. +### 2D vs 3D -## Example Data +In 2D data (Z dimension = 1), no cell can have 6 face-neighbors because there are no neighbors in the +Z and -Z directions. The maximum count for 2D is therefore 4. + +### Warning -- Data Modification + +Only the *Mask* array is modified. Every other cell-level array (orientations, phases, etc.) is left unchanged. To replace orientation data on cells whose orientations are wrong, run [Neighbor Orientation Correlation](NeighborOrientationCorrelationFilter.md) afterward. + +### Example Data | Example Input Image | Example Output Image | |---------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------| | ![](Images/BadDataNeighborOrientationCheckFilter_1.png) | ![](Images/BadDataNeighborOrientationCheckFilter_2.png) | -| The Small IN100 data just after initial alignment filters have completed. | The Small IN100 data just after running this filter with a *Misorientation Tolerance* of 5 degrees and a *Required Number of Neighbors* of 4. | +| The Small IN100 data just after initial alignment filters have completed. | The Small IN100 data after running this filter with *Misorientation Tolerance* = 5° and *Required Number of Neighbors* = 4. | + +The cells that flipped from false (black) to true (IPF-colored) had Confidence Index just below the original mask threshold (CI > 0.1, IQ > 120) but had enough valid neighbors with consistent orientations to be rescued. + +### Required Input Sources -From the above before and after images you can see that this filter can help modify a mask that was generated through a simple threshold filter. This filter essentially uses neighbors to determine if a cell point should have had a mask value of false. The majority of cells that were changed from *false* or the black voxels, into valid IPF colored voxels, had a confidence index that fell just below the initial threshold applied (Confidence Index > 0.1 and Image Quality > 120). This filter determines that enough of that cell's neighbors had a mask value of true, the misorientation was < 5 degrees and the cell had enough valid neighbors that the cell's *mask* value was changed from **false** to **true**. +- **Mask Array** -- a boolean cell-level array, typically produced by [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) applied to EBSD confidence/quality scalars. +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/CAxisSegmentFeaturesFilter.md b/src/Plugins/OrientationAnalysis/docs/CAxisSegmentFeaturesFilter.md index 6983636597..a83a205477 100644 --- a/src/Plugins/OrientationAnalysis/docs/CAxisSegmentFeaturesFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/CAxisSegmentFeaturesFilter.md @@ -6,17 +6,35 @@ Reconstruction (Segmentation) ## Description -This **Filter** segments the **Features** by grouping neighboring **Cells** that satisfy the *C-axis misalignment tolerance*, i.e., have misalignment angle less than the value set by the user. The *C-axis misalignment* refers to the angle between the <001> directions (C-axis in the hexagonal system) that is present between neighboring **Cells**. The process by which the **Features** are identified is given below and is a standard *burn algorithm*. +This **Filter** groups neighboring **Cells** (voxels) whose crystal C-axes are nearly aligned into **Features** (grains), producing a *FeatureIds* array that labels every cell in the input **Image Geometry** with a grain number. -1. Randomly select a **Cell**, add it to an empty list and set its *Feature Id* to the current **Feature** -2. Compare the **Cell** to each of its six (6) face-sharing neighbors (i.e., calculate the c-axis misalignment with each neighbor) -3. Add each neighbor **Cell** that has a C-axis misalignment below the user defined tolerance to the list created in 1. and set the *Feature Id* of the neighbor **Cell** to the current **Feature** -4. Remove the current **Cell** from the list and move to the next **Cell** and repeat 2. and 3.; continue until no **Cells** are left in the list -5. Increment the current **Feature** counter and repeat steps 1. through 4.; continue until no **Cells** remain unassigned in the dataset +This filter is **only valid for hexagonal phases**. For general EBSD grain segmentation (cubic, orthorhombic, or any other symmetry), use [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md) instead; for scalar-based segmentation, use [Segment Features (Scalar)](../SimplnxCore/ScalarSegmentFeaturesFilter.md). -The user has the option to *Use Mask Array*, which allows the user to set a boolean array for the **Cells** that remove **Cells** with a value of *false* from consideration in the above algorithm. This option is useful if the user has an array that either specifies the domain of the "sample" in the "image" or specifies if the orientation on the **Cell** is trusted/correct. +### When to Use This Filter -After all the **Features** have been identified, a **Feature Attribute Matrix** is created for the **Features** and each **Feature** is flagged as *Active* in a boolean array in the matrix. +In hexagonal materials (titanium, magnesium, zinc, zirconium, etc.), the [C-axis](ComputeAvgCAxesFilter.md) is the unique, mechanically significant crystal direction. For many studies -- especially those focused on basal-plane slip, texture, or deformation -- it is more informative to group cells by how closely their C-axes point in the same direction than by their full orientation. Two cells may have very different full orientations (rotated differently about their own C-axis) but still belong to the same grain if their C-axes point the same way. + +If you need full misorientation-based grain segmentation (accounting for rotations about the C-axis), use [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md) instead. + +### How This Filter Works + +The filter uses a standard *burn algorithm* to grow each feature outward from a seed cell: + +1. Randomly pick an unassigned **Cell** and give it a new *Feature Id*. +2. Compute the angle between the C-axis of the seed cell and the C-axis of each neighbor (see **Neighbor Scheme** below). +3. Any neighbor whose C-axis misalignment angle is less than the user-specified *Misalignment Tolerance* (in **degrees**) is added to the current feature and gets the same *Feature Id*. +4. Repeat step 2-3 from each newly added cell, growing the feature outward until no more neighbors qualify. +5. Increment the feature counter and pick a new unassigned seed cell. Continue until every eligible cell has been assigned. + +The C-axis direction for each cell is computed on-the-fly from the cell's orientation quaternion. See [Compute Average C-Axis Orientations](ComputeAvgCAxesFilter.md) for a full explanation of the C-axis concept and why it only makes physical sense for hexagonal symmetries. + +### Tolerance and Units + +The *Misalignment Tolerance* is in **degrees**. Typical values: + +- **1-3 degrees** -- very tight; splits grains with even slight C-axis variation (subgrains). +- **5 degrees** -- the common default for grain segmentation. +- **10+ degrees** -- loose; merges adjacent grains whose C-axes are within a cone. ### Neighbor Scheme @@ -25,11 +43,7 @@ The *Neighbor Scheme* parameter provides the following choices: - **Face Neighbors [0]**: Only the 6 face-sharing neighbors of a voxel are considered during segmentation. - **All Connected Neighbors [1]**: All 26 neighbors connected by a face, edge, or vertex are considered during segmentation. -## Note on Neighbor Scheme - -Historically DREAM.3D version 6.x has used *only* the 6 face neighbors of a voxel. This release introduces the option -of using all 26 neighboring voxels that are connected by a face, edge or vertex. The default for the filter -is to still use the 6 face neighbors ("Face Only") in order to stay consistent with the output from DREAM.3D version 6.x. +DREAM.3D version 6.x only used face neighbors. The default here is still *Face Only* for backward compatibility. | Neighbor Scheme = "Face Only" | Neighbor Scheme = "All Connected" | |:--:|:--:| @@ -47,6 +61,17 @@ is to still use the 6 face neighbors ("Face Only") in order to stay consistent w |:--:|:--:| | ![Shared Edges & Points With Disconnected Region - "Face Only"](Images/SegmentFeatures/combination_face_only.png) | ![Shared Edges & Points With Disconnected Region - "All Connected"](Images/SegmentFeatures/combination_all_connected.png) | +### Mask Array + +If *Use Mask Array* is enabled, cells flagged *false* in the mask are excluded from segmentation and left with a Feature Id of 0. Masks are commonly used to restrict segmentation to the sample region or to cells with reliable orientation data (for example, a threshold on an EBSD confidence index). + +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md); can also be produced from Euler angles by [Convert Orientations](ConvertOrientationsFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). Phases that are not hexagonal will produce invalid segmentation for those cells. +- **Mask Array** (optional) -- a boolean array marking valid cells, typically produced by [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeAvgCAxesFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeAvgCAxesFilter.md index 7fafb63ad4..bbfe22e446 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeAvgCAxesFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeAvgCAxesFilter.md @@ -26,9 +26,9 @@ Each **Cell** (voxel) in a grain has its own measured orientation. This filter d This filter only produces valid results for hexagonal phases (6/mmm or 6/m symmetry). In hexagonal materials, the C-axis is unique -- there is only one [001] direction, so crystal symmetry does not create ambiguity. -In cubic materials, the [001], [010], and [100] directions are all crystallographically equivalent. Applying symmetry operators would move the [001] direction to different positions in the sample frame, making a simple average meaningless. For this reason, the filter **silently skips non-hexagonal cells** during accumulation. A **Feature** whose contributing cells are *all* non-hexagonal (or which has no cells assigned to it at all) will have its output set to **NaN**. +In cubic materials, the [001], [010], and [100] directions are all crystallographically equivalent. Applying symmetry operators would move the [001] direction to different positions in the sample frame, making a simple average meaningless. For this reason, **non-hexagonal phases will have their output values set to NaN**. -The filter will produce an error if no hexagonal phases are present in the data (`-76402`: "No phases that have a crystal symmetry of Hexagonal (6/mmm or 6/m) were found."). +The filter will produce an error if no hexagonal phases are present in the data. ### Required Input Sources diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeAvgOrientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeAvgOrientationsFilter.md index 0af418d45c..01643d23c2 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeAvgOrientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeAvgOrientationsFilter.md @@ -6,7 +6,11 @@ Statistics (Crystallography) ## Description -This **Filter** computes the average orientation of each **Feature** using one or more of three available averaging methods. Each method can be independently enabled, and their results are stored in separate output arrays. +This **Filter** computes the average crystal orientation for each **Feature** (grain). Since each grain is made up of many **Cells** (voxels) that each have their own measured orientation, this filter combines those individual measurements into a single representative orientation per grain. + +The average orientation is used by many downstream filters (e.g., misorientation calculations, Schmid factor, GBCD) and is one of the fundamental statistics computed during microstructure characterization. + +Three averaging methods are available, and each can be independently enabled. Their results are stored in separate output arrays. ### Method 1: Rodrigues Average (Original) @@ -71,6 +75,13 @@ These values may be exposed as user-configurable parameters in a future release. - **Multi-phase features:** The vMF/Watson methods use a single crystal structure per feature, taken from the phase of the feature's highest-index element; the Rodrigues method uses each element's own phase. Features are normally single-phase, so this distinction rarely matters. - **No method enabled:** If none of the three averaging methods is enabled the filter fails in preflight with error -54673. +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md); can also be produced from Euler angles by [Convert Orientations](ConvertOrientationsFilter.md). +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeBoundaryStrengthsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeBoundaryStrengthsFilter.md index 3504791f0f..4b12758f8a 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeBoundaryStrengthsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeBoundaryStrengthsFilter.md @@ -6,39 +6,52 @@ Statistics (Crystallography) ## Description -**THIS FILTER ONLY WORKS ON Cubic m-3m LAUE CLASSES** +This **Filter** computes slip transmission metrics for each **Face** (triangle) on a grain boundary mesh. These metrics quantify how easily plastic deformation can transfer across a grain boundary, based on the geometric alignment of slip systems in the two grains on either side. -This **Filter** calculates the same metrics as in the Find Neighbor Slip Transmission Metrics **Filter**. However, this **Filter** stores the values in the **Face Attribute Matrix** of a **Triangle Geometry**. The algorithm the **Filter** uses is as follows: +This filter computes the same metrics as the [Compute Neighbor Slip Transmission Metrics](ComputeSlipTransmissionMetricsFilter.md) filter, but stores results per boundary **Face** rather than per **Feature**. This makes it suitable for visualization and analysis on a **Triangle Geometry** surface mesh. -1. Find the two **Features** that are separated by a **Face** in the **Triangle Geometry** -2. Get the average orientation of both of the **Features** -3. Calculate the transmission metrics from both directions (i.e. **Feature** 1 to **Feature** 2 and **Feature** 2 to **Feature** 1) -4. Store the metrics in the **Face** map -5. Repeat for all **Faces** +For a detailed explanation of the slip transmission concept and the individual metrics, see the [Compute Neighbor Slip Transmission Metrics](ComputeSlipTransmissionMetricsFilter.md) documentation. -*Note:* Each metric is calculated twice for the two different directions slip could approach the boundary. The values are stored on each **Face** in the **Face** map in a way that notes the direction (i.e., when **Feature** 1 has neighbor **Feature** 2 and when **Feature** 2 has neighbor **Feature** 1) because the direction across the boundary between the **Features** affects the value of the metric. +### Cubic Materials Only -## Luster-Morris Parameter (M' Values) +This filter only works on **cubic m-3m Laue classes**. -The values are calculated as presented in [1]. +### How This Filter Works -## Fracture Initiation Parameter (fip) +1. For each **Face** in the **Triangle Geometry**, the filter identifies the two **Features** on either side +2. The average orientation of both **Features** is retrieved +3. Transmission metrics are calculated in both directions (Feature 1 → Feature 2 and Feature 2 → Feature 1), since the direction of slip approaching the boundary affects the result +4. Both directional values are stored on the **Face** -Three (3) *fip* values are computed as outputs to this filter. These are best explained in [2], see page 021012-4 +### Luster-Morris Parameter (M') + +The Luster-Morris parameter measures geometric compatibility between slip systems across a boundary. Calculated as presented in [1]. + +### Fracture Initiation Parameters (F1, F1spt, F7) + +Three fracture initiation parameter values are computed per **Face**, as defined in [2] (see page 021012-4): ![Fracture Initiation Parameter F1](Images/ComputeNeighborSlipTransmission_F1.png) ![Fracture Initiation Parameter F1spt](Images/ComputeNeighborSlipTransmission_F1spt.png) -![Fracture Initiation Parameter F7.png](Images/ComputeNeighborSlipTransmission_F7.png) - +![Fracture Initiation Parameter F7](Images/ComputeNeighborSlipTransmission_F7.png) -## Citations +## References [1] [Luster, J., Morris, M.A., 1995. *Compatibility Of Deformation In Two-Phase Ti-Al Alloys: Dependence On Microstructure And Orientation Relationships*. **Metallurgical and Materials Transactions A 26, 1745**](https://link.springer.com/article/10.1007/BF02670762) [2] [D. Kumar, T. R. Bieler, P. Eisenlohr, D. E. Mason, M. A. Crimp, F. Roters, and D. Raabe. On Predicting Nucleation of Microcracks Due to Slip Twin Interactions at Grain Boundaries in Duplex Near γ-TiAl. Journal of Engineering Materials and Technology, 130(2):021012–12, 2008. doi:10.1115/1.2841620.](https://doi.org/10.1115/1.2841620) +### Required Input Sources + +This filter operates on a grain-boundary surface mesh and requires the following upstream steps: + +- **Triangle Geometry** and **Face Labels** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md). +- **Average Quaternions** -- the per-feature average orientation produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeCAxisLocationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeCAxisLocationsFilter.md index 9183413de0..b7bba6a59f 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeCAxisLocationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeCAxisLocationsFilter.md @@ -6,15 +6,41 @@ Statistics (Crystallography) ## Description -This **Filter** determines the direction of the C-axis for each **Element** by applying the quaternion of the **Element** to the <001> direction, which is the C-axis for *Hexagonal* materials. This will tell where the C-axis of the **Element** sits in the *sample reference frame*. +This **Filter** computes the C-axis direction for each individual **Cell** (voxel) in hexagonal materials. The result is a unit vector per **Cell** that indicates where that cell's C-axis points in the sample reference frame. -*Note:* This **Filter** will only work properly for *Hexagonal* materials. The **Filter** does not apply any symmetry operators because there is only one c-axis (<001>) in *Hexagonal* materials and thus all symmetry operators will leave the c-axis in the same position in the sample *reference frame*. However, in *Cubic* materials, for example, the {100} family of directions are all equivalent and the <001> direction will change location in the *sample reference frame* when symmetry operators are applied. +### What is the C-Axis? + +In hexagonal crystal structures (such as titanium, magnesium, and zinc), the *C-axis* is the unique crystallographic direction that runs along the long axis of the hexagonal unit cell (the [001] direction). This axis is important because many mechanical and physical properties of hexagonal materials vary depending on whether they are measured along or perpendicular to the C-axis. + +![Fig. 1: The C-axis in a hexagonal unit cell.](Images/ComputeAvgCAxes_HexagonalCAxis.png) + +### How This Filter Works + +Each **Cell** has a measured crystal orientation stored as a quaternion. This filter uses that orientation to rotate the crystal [001] direction into the physical sample coordinate system, producing a 3D unit vector that describes where the C-axis points. + +The output vectors are normalized to unit length and constrained to the upper hemisphere (positive Z component) to provide a unique, unambiguous representation. + +### Hexagonal Materials Only + +This filter only produces valid results for hexagonal phases (6/mmm or 6/m symmetry). In hexagonal materials, the C-axis is unique -- there is only one [001] direction, so crystal symmetry does not create ambiguity. + +In cubic materials, the [001], [010], and [100] directions are all crystallographically equivalent. Applying symmetry operators would move the [001] direction to different positions in the sample frame, making this computation ambiguous. For this reason, **non-hexagonal phases will have their output values set to NaN**. + +### Comparison with Compute Average C-Axis Orientations + +This filter computes the C-axis direction for each individual **Cell**. If you need the average C-axis direction for each **Feature** (grain) instead, use the [Compute Average C-Axis Orientations](ComputeAvgCAxesFilter.md) filter. + +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md); can also be produced from Euler angles by [Convert Orientations](ConvertOrientationsFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -EBSD_Hexagonal_Data_Analysis ++ `EBSD_Hexagonal_Data_Analysis` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborCAxisMisalignmentsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborCAxisMisalignmentsFilter.md index 2119f12cfa..bc7d2006c7 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborCAxisMisalignmentsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborCAxisMisalignmentsFilter.md @@ -6,25 +6,39 @@ Statistics (Crystallography) ## Description -For each feature, the C-Axis misalignments are determined for each neighbor of the feature. The neighbor list is a variable that is passed in by the user. This "NeighborList" could have been generated from any other appropriate filter. This means that a neighbor list could represent all neighbors that are physically connected to the current feature (Find Feature Neighbors), within a certain radius of the feature (Compute Feature Neighborhoods) or any other custom filter. +This **Filter** computes the C-axis misalignment angle between each **Feature** (grain) and its neighbors in hexagonal materials. The C-axis misalignment is the angular difference between the C-axis directions of two neighboring grains -- it measures how closely their unique crystallographic axes are aligned. -There are 2 outputs from this filter: -- The list of misalignments -- Optionally the average of all misalignments. +This is distinct from a full misorientation, which considers the complete rotational difference between two crystal orientations. C-axis misalignment only considers the alignment of the [001] direction, which is often the most mechanically significant axis in hexagonal materials. -**The misalignment values are stored as Degrees.** +### Flexible Neighbor Definition -### Notes +The neighbor list is supplied by the user and can come from any filter that produces neighbor relationships. For example: +- [Compute Feature Neighbors](../SimplnxCore/ComputeFeatureNeighborsFilter.md) -- neighbors that physically share a boundary +- [Compute Feature Neighborhoods](../SimplnxCore/ComputeNeighborhoodsFilter.md) -- neighbors within a specified radius +- Any other custom filter that generates a neighbor list -**NOTE:** Only features with identical phase values and a crystal structure of **Hexagonal_High** (6/mmm) or **Hexagonal_Low** (6/m) will be calculated. If two features have different phase values, or if the shared phase has a crystal structure that is not one of the two hexagonal Laue classes, then a value of NaN is set for the misalignment. +The filter also optionally computes the average misalignment across all of a feature's neighbors. -Results from this filter can differ from its original version in DREAM.3D 6.5.171 by around 0.0001 degrees. This version uses double precision and Eigen for matrix operations which account for the differences in output. +### Hexagonal Materials Only + +Only **Features** with identical phase values and a crystal structure of **Hexagonal_High** (6/mmm) or **Hexagonal_Low** (Hexagonal 6/m (C6h)) are compared. If two **Features** have different phases or a non-hexagonal crystal structure, a value of NaN is stored for the misalignment. See the [Compute Average C-Axis Orientations](ComputeAvgCAxesFilter.md) documentation for an explanation of why C-axis calculations are restricted to hexagonal materials. + +### Note + +Results from this filter may differ from the original DREAM.3D 6.5 version by approximately 0.0001 degrees due to the use of double precision and Eigen for matrix operations. + +### Required Input Sources + +- **Neighbor List** -- produced by [Compute Feature Neighbors](../SimplnxCore/ComputeFeatureNeighborsFilter.md) or [Compute Feature Neighborhoods](../SimplnxCore/ComputeNeighborhoodsFilter.md). +- **Average Quaternions** -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -EBSD_Hexagonal_Data_Analysis ++ `EBSD_Hexagonal_Data_Analysis` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborMisorientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborMisorientationsFilter.md index e8f05cbef5..5e8ec709ba 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborMisorientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureNeighborMisorientationsFilter.md @@ -6,19 +6,30 @@ Statistics (Crystallography) ## Description -This **Filter** determines, for each **Feature**, the misorientations with each of the **Features** that are in contact with it. The misorientations are stored as a list (for each **Feature**) of angles (in degrees). The axis of the misorientation is not stored by this **Filter**. +This **Filter** computes the misorientation angle between each **Feature** (grain) and its neighboring **Features**. Misorientation is the angular difference between the crystal orientations of two grains -- it describes how much one grain's crystal lattice is rotated relative to another's. -The user can also calculate the average misorientation between the feature and all contacting features. +![Fig. 1: The misorientation between two grains is the rotation relating their crystal orientations; its angle is the misorientation angle. Because a crystal has symmetry-equivalent orientations, the smallest equivalent angle — the disorientation — is what the filter reports.](Images/Misorientation_Concept.png) -### Notes +For each **Feature**, the filter produces a list of misorientation angles (in degrees), one for each neighboring **Feature** it shares a boundary with. The axis of the misorientation is not stored, only the angle. -**NOTE:** Only features with identical crystal structures will be calculated. If two features have different crystal structures then a value of NaN is set for the misorientation. +Optionally, the filter can also compute the average misorientation between a **Feature** and all of its neighbors. This average value provides a quick summary of how differently oriented a grain is compared to its surroundings. + +### Note + +Only **Features** with identical crystal structures are compared. If two neighboring **Features** have different crystal structures, a value of NaN is stored for their misorientation, since misorientation between different crystal systems is not physically meaningful. + +### Required Input Sources + +- **Neighbor List** -- produced by [Compute Feature Neighbors](../SimplnxCore/ComputeFeatureNeighborsFilter.md) or [Compute Feature Neighborhoods](../SimplnxCore/ComputeNeighborhoodsFilter.md). +- **Average Quaternions** -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -+ (04) Small IN100 Crystallographic Statistics ++ `(05) SmallIN100 Crystallographic Statistics` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceCAxisMisorientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceCAxisMisorientationsFilter.md index 197a9b68cf..96759db1c3 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceCAxisMisorientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceCAxisMisorientationsFilter.md @@ -6,17 +6,40 @@ Statistics (Crystallography) ## Description -This **Filter** calculates the misorientation angle between the C-axis of each **Cell** within a **Feature** and the average C-axis for that **Feature** and stores that value for each **Cell**. The average and standard deviation of those values for all **Cells** belonging to the same **Feature** is also stored for each **Feature**. +This **Filter** measures how much the C-axis orientation varies within each **Feature** (grain) in hexagonal materials. It does this by comparing the C-axis direction of each individual **Cell** (voxel) to the average C-axis direction for the grain it belongs to. -This filter requires at least one Hexagonal crystal structure phase (Hexagonal-Low 6/m or Hexagonal-High 6/mmm). Although it is not recommended, you can give input data with mixed phase types and all non hexagonal phases will be skipped in the calculations. +This metric is useful for characterizing intragranular orientation gradients -- regions within a grain where the crystal lattice has rotated relative to the grain's average orientation, which can indicate deformation, subgrain boundaries, or measurement noise. -Results from this filter can differ from its original version in DREAM3D 6.6 by around 0.0001. This version uses double precision in part of its calculation to improve agreement and accuracy between platforms (notably ARM). +### What This Filter Computes + +For each **Cell**, the filter calculates the angle (in degrees) between that cell's C-axis and the average C-axis of its parent **Feature**. The filter then computes summary statistics per **Feature**: + +- **Average misalignment** -- the mean C-axis deviation across all cells in the grain +- **Standard deviation** -- how much the deviation varies within the grain + +A low average misalignment indicates a grain with a uniform C-axis orientation. A high value suggests significant internal orientation variation. + +### Hexagonal Materials Only + +This filter requires at least one hexagonal crystal structure phase (6/m or 6/mmm). Non-hexagonal phases are skipped. See the [Compute Average C-Axis Orientations](ComputeAvgCAxesFilter.md) documentation for an explanation of why C-axis calculations are restricted to hexagonal materials. + +### Note + +Results may differ from the DREAM3D 6.6 version by approximately 0.0001 degrees due to improved double-precision calculations for cross-platform accuracy. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md) or [Segment Features (C-Axis Misalignment)](CAxisSegmentFeaturesFilter.md). +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Average C-Axes** -- produced by [Compute Average C-Axis Orientations](ComputeAvgCAxesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -EBSD_Hexagonal_Data_Analysis ++ `EBSD_Hexagonal_Data_Analysis` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceMisorientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceMisorientationsFilter.md index 4332b76d13..50bd9b9d53 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceMisorientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeFeatureReferenceMisorientationsFilter.md @@ -6,16 +6,16 @@ Statistics (Crystallography) ## Description -This **Filter** calculates the misorientation angle between each **Cell** within a **Feature** and a -*reference orientation* for that **Feature**. The user can choose the *reference orientation* to -be used for the **Features** from a drop-down menu. The options for the *reference orientation* are -the average orientation of the **Feature** or the orientation of the **Cell** that is furthest from -the *boundary* of the **Feature**. +This **Filter** measures how much crystal orientation varies within each **Feature** (grain) by computing the misorientation angle between each **Cell** (voxel) and a chosen *reference orientation* for that **Feature**. -Note: the average orientation of the **Feature** is a typical choice, but if the **Feature** has -undergone plastic deformation and the amount of lattice rotation developed is of interest, then -it may be more reasonable to use the orientation *near the center* of the **Feature** as it may -not have rotated and thus serve as a better *reference orientation*. +This is useful for detecting intragranular orientation gradients caused by plastic deformation, subgrain formation, or other processes that cause the crystal lattice to rotate within a grain. + +### Choosing a Reference Orientation + +The user selects the reference orientation from two options. The choice depends on the physical question being asked: + +- **Average Feature Orientation** -- Uses the average orientation of all cells in the grain. This is the typical choice for characterizing overall orientation spread within a grain. +- **Orientation Farthest from Feature Boundary** -- Uses the orientation of the cell nearest to the Euclidean center of the grain (farthest from any boundary). If the grain has undergone plastic deformation, boundary regions tend to rotate more than the interior. Using the center cell as the reference provides a more stable baseline that better reveals the pattern of lattice rotation from the interior outward. ### Reference Orientation @@ -53,6 +53,15 @@ feature boundary, and use that voxel's orientation as the **reference orientatio ![ComputeFeatureReferenceMisorientations_1.png](Images/ComputeFeatureReferenceMisorientations_1.png) +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md). +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Average Quaternions** (for Average Feature Orientation mode) -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Boundary Euclidean Distances** (for Orientation Farthest from Feature Boundary mode) -- produced by [Compute Euclidean Distance Map](../SimplnxCore/ComputeEuclideanDistMapFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeGBCDFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeGBCDFilter.md index 5bb54a2536..8c5f756a67 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeGBCDFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeGBCDFilter.md @@ -6,13 +6,55 @@ Statistics (Crystallography) ## Description -This **Filter** computes the 5D grain boundary character distribution (GBCD) for a **Triangle Geometry**, which is the relative area of grain boundary for a given misorientation and normal. The GBCD can be visualized by using either the **Write GBCD Pole Figure (GMT)** or the **Write GBCD Pole Figure (VTK)** **Filters**. +This **Filter** computes the Grain Boundary Character Distribution (GBCD) for a **Triangle Geometry**. The GBCD is a statistical description of the types of grain boundaries present in a polycrystalline material. It answers the question: *"What fraction of the total grain boundary area has a given misorientation and boundary plane orientation?"* + +### What is the GBCD? + +In a polycrystalline material, grains meet at boundaries. Each boundary can be described by five parameters: + +- **3 parameters** for the *misorientation* -- the rotational difference between the crystal orientations of the two grains on either side of the boundary +- **2 parameters** for the *boundary plane normal* -- the direction the boundary surface faces, expressed in the crystal reference frame + +The GBCD is a histogram over this 5-dimensional space. It records how much grain boundary area exists for each combination of misorientation and boundary plane orientation, normalized so that a random distribution would give a value of 1.0. Results are reported in *multiples of a random distribution* (MRD), so a value of 2.0 means there is twice as much boundary of that type as would be expected in a random polycrystal. + +### How This Filter Works + +1. For each triangular face on the grain boundary mesh, the filter identifies the two grains on either side. +2. It computes the misorientation between the two grains and determines the boundary plane normal in the crystal reference frame. +3. Crystal symmetry is applied to map each boundary into a unique representation. +4. The boundary is placed into the appropriate bin of the 5D histogram, weighted by its area. +5. The result is normalized by the total boundary area. + +The **GBCD Resolution** parameter controls the bin size of the histogram. Smaller values give finer resolution but require more boundary data for statistical reliability. + +### Note + +Only boundaries between grains of the same phase are included in the calculation. The GBCD can be visualized by using the [Write GBCD Pole Figure (GMT)](WriteGBCDGMTFileFilter.md) or [Compute GBCD Pole Figure](ComputeGBCDPoleFigureFilter.md) filters. + +For an alternative approach to computing the GBCD using continuous metrics instead of binning, see the [Compute GBCD (Metric-Based Approach)](ComputeGBCDMetricBasedFilter.md) filter. + +### Required Input Sources + +This filter operates on a grain-boundary surface mesh and requires the following upstream steps: + +- **Triangle Geometry** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md), optionally followed by [Laplacian Smoothing](../SimplnxCore/LaplacianSmoothingFilter.md). +- **Face Labels** -- produced alongside the mesh by [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md). +- **Face Normals** -- produced by [Compute Triangle Normals](../SimplnxCore/TriangleNormalFilter.md). +- **Face Areas** -- produced by [Compute Triangle Areas](../SimplnxCore/ComputeTriangleAreasFilter.md). +- **Feature Euler Angles / Feature Phases** -- the feature-level average Euler angles and phases. Averages are produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md); phases by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + +## References + +[1] G. S. Rohrer, "Grain boundary energy anisotropy: a review," *Journal of Materials Science*, vol. 46, pp. 5881-5895, 2011. DOI: [10.1007/s10853-011-5677-3](https://doi.org/10.1007/s10853-011-5677-3) + +[2] G. S. Rohrer, "Measuring and Interpreting the Structure of Grain-Boundary Networks," *Journal of the American Ceramic Society*, vol. 94, no. 3, pp. 633-646, 2011. DOI: [10.1111/j.1551-2916.2011.04384.x](https://doi.org/10.1111/j.1551-2916.2011.04384.x) % Auto generated parameter table will be inserted here ## Example Pipelines -+ (08) Small IN100 GBCD ++ `(08) Small IN100 GBCD` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeGBCDMetricBasedFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeGBCDMetricBasedFilter.md index 092dc86566..5ab6dffb45 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeGBCDMetricBasedFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeGBCDMetricBasedFilter.md @@ -6,11 +6,18 @@ Statistics (Crystallography) ## Description -This **Filter** computes a section through the five-dimensional grain boundary distirbution for a fixed misorientation. An example of such a section is shown in Fig. 1. Differently than **Compute GBCD Filter**, which uses a method based on partition of the boundary space into bins, this **Filter** implements an alternative metric-based approach described by K. Glowinski and A. Morawiec in [Analysis of experimental grain boundary distributions based on boundary-space metrics, Metall. Mater. Trans. A 45, 3189-3194 (2014)](https://link.springer.com/article/10.1007/s11661-014-2325-y) +This **Filter** computes a section through the five-dimensional grain boundary character distribution (GBCD) for a fixed misorientation, using a metric-based approach rather than binning. An example of such a section is shown in Fig. 1. + +Unlike the [Compute GBCD](ComputeGBCDFilter.md) filter, which partitions the boundary space into discrete bins, this filter uses a continuous metric-based approach described by K. Glowinski and A. Morawiec in [Analysis of experimental grain boundary distributions based on boundary-space metrics, Metall. Mater. Trans. A 45, 3189-3194 (2014)](https://link.springer.com/article/10.1007/s11661-014-2325-y). The metric-based approach avoids discretization artifacts and can produce smoother distributions, especially with limited data. ![Fig. 1: Section for the 17.9 deg./[111] misorientation through the grain boundary distribution obtained using this Filter for the small IN100 data set. Units are multiples of random distribution (MRDs).](Images/ComputeGBCDMetricBased_dist.png) -Metrics in the boundary space can be defined in a number of ways, but it is essential that two boundaries are close (distant) if they have similar (different) geometric features, and that symmetrically equivalent representations of boundaries are taken into consideration. Formally, the boundary space is a Cartesian product of the misorientation and boundary-normal subspaces. For computational reasons and because of considerably different resolutions in determinination of grain misorientation and boundary-plane parameters, it is convenient to use a separate metric in each subspace. With separate metrics, the procedure for computing distribution values for a selected misorientation has two stages. First, boundary segments with misorientations located not farther from the fixed misorientation than a limiting distance ρm are selected. In the second stage, the distribution is probed at evenly distributed normal directions (see Fig. 2), and areas of boundaries whose normals deviate from a given direction by less than ρp are summed. (The radii ρm and ρp should be tailored to resolution, amount, and quality of data and set.) Eventually, the obtained distribution is normalized in order to express it in the conventional units, i.e., multiples of the random distribution. +The metric-based approach defines distance measures in the boundary space so that boundaries with similar geometry are considered "close" and boundaries with different geometry are considered "distant," taking crystal symmetry into account. The procedure has two stages: + +1. **Misorientation selection:** Boundary segments whose misorientation is within a limiting angular distance ρm of the user-specified fixed misorientation are selected. +2. **Normal probing:** The distribution is sampled at evenly distributed normal directions (see Fig. 2). For each sampling direction, the areas of boundaries whose normals fall within ρp of that direction are summed. + +The limiting distances ρm and ρp should be chosen based on the resolution, amount, and quality of the data. The result is normalized and expressed in multiples of a random distribution (MRD). | Image | |-------| @@ -55,6 +62,14 @@ The *Limiting Distances* parameter selects the maximum angular deviations used w - **7 deg. Misorientations; 7 deg. Plane Inclinations [5]**: Use a 7-degree radius for both misorientations and plane inclinations. - **8 deg. Misorientations; 8 deg. Plane Inclinations [6]**: Use an 8-degree radius for both misorientations and plane inclinations. +### Required Input Sources + +This filter operates on a grain-boundary surface mesh and requires the following upstream steps: + +- **Triangle Geometry** with **Face Labels**, **Face Normals**, **Face Areas**, and **Node Types** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md), followed by [Compute Triangle Normals](../SimplnxCore/TriangleNormalFilter.md) and [Compute Triangle Areas](../SimplnxCore/ComputeTriangleAreasFilter.md). +- **Feature Euler Angles / Feature Phases** -- feature-level averages produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md) and [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + % Auto generated parameter table will be inserted here ## References diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeGBPDMetricBasedFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeGBPDMetricBasedFilter.md index 6591151393..265e2664fd 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeGBPDMetricBasedFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeGBPDMetricBasedFilter.md @@ -6,7 +6,17 @@ Statistics (Crystallography) ## Description -This **Filter** computes the grain boundary plane distribution (GBPD) like that shown in Fig. 1. It should be noted that most GBPDs presented so far in literature were obtained using a method based on partition of the grain boundary space into bins, similar to that implemented in the *Compute GBCD* **Filter**. This **Filter** calculates the GBPD using an alternative approach adapted from the one included in the *Compute GBCD (Metric-based Approach)* **Filter** and described by K. Glowinski and A. Morawiec in [Analysis of experimental grain boundary distributions based on boundary-space metrics, Metall. Mater. Trans. A 45, 3189-3194 (2014)](http://link.springer.com/article/10.1007%2Fs11661-014-2325-y). Briefly, the GBPD is probed at evenly distributed sampling directions (similarly to *Compute GBCD (Metric-based Approach)* **Filter**) and areas of mesh segments with their normal vectors deviated by less than a limiting angle ρp from a given direction are summed. If *n*S is the number of crystal symmetry transformations, each boundary plane segment is represented by up to 4 × *n*S equivalent vectors, and all of them are processed. It is enough to sample the distribution at directions corresponding to the standard stereographic triangle (or, in general, to a fundamental region corresponding to a considered crystallographic point group); values at remaining points are obtained based on crystal symmetries. After summing the boundary areas, the distribution is normalized. First, the values at sampling vectors are divided by the total area of all segments. Then, in order to express the distribution in the conventional units, i.e., multiples of random distribution (MRDs), the obtained fractional values are divided by the volume *v* = (*A* nS) / (4π), where *A* is the area of a spherical cap determined by ρp. +This **Filter** computes the Grain Boundary Plane Distribution (GBPD), which describes the relative frequency of grain boundary plane orientations in a polycrystalline material, regardless of the misorientation across the boundary. While the GBCD (see [Compute GBCD](ComputeGBCDFilter.md)) describes boundaries in the full 5D space of misorientation + plane normal, the GBPD considers only the 2D distribution of boundary plane normals. + +An example GBPD is shown in Fig. 1. + +### Metric-Based Approach + +This filter uses a metric-based approach adapted from the [Compute GBCD (Metric-Based Approach)](ComputeGBCDMetricBasedFilter.md) filter, as described by K. Glowinski and A. Morawiec in [Analysis of experimental grain boundary distributions based on boundary-space metrics, Metall. Mater. Trans. A 45, 3189-3194 (2014)](http://link.springer.com/article/10.1007%2Fs11661-014-2325-y). + +The distribution is sampled at evenly distributed directions. For each sampling direction, the areas of mesh segments whose normals fall within a limiting angle ρp of that direction are summed. Crystal symmetry is applied so that each boundary segment is represented by up to 4 × *n*S equivalent vectors (where *n*S is the number of symmetry transformations). Only directions within the standard stereographic triangle need to be sampled; values at other points are obtained from symmetry. + +After summing boundary areas, the distribution is normalized to multiples of a random distribution (MRD). A value of 1.0 means that plane orientation is as frequent as in a random polycrystal; values above 1.0 indicate preferred boundary plane orientations. ![Fig. 1: GBPD obtained for Small IN100 with the limiting distance set to 7° and with triangles adjacent to triple lines removed. Units are MRDs.](Images/ComputeGBPDMetricBased_example.png) @@ -16,7 +26,7 @@ This **Filter** also calculates statistical errors of the distributions using th is the relative error of the distribution function at a given point, *f* is the value of the function at that point, and *n* stands for the number of grain boundaries (**not** the number of mesh triangles) in the considered network. The errors can be calculated either as their absolute values, i.e., ε × *f* or as relative errors, i.e., 100% × ε. The latter are computed in a way that if the relative error exceeds 100%, it is rounded down to 100%. -See also the documentation for {ref}`Compute GBCD (Metric-based Approach) Filter ` for additional information. +See also the documentation for [Compute GBCD (Metric-Based Approach)](ComputeGBCDMetricBasedFilter.md) for additional information. ## Format of Output Files @@ -32,6 +42,15 @@ Then, the directions are given as [ sin θ × cos φ , sin θ ## Feedback In the case of any questions, suggestions, bugs, etc., please feel free to email the author of this **Filter** at kglowinski *at* ymail.com + +### Required Input Sources + +This filter operates on a grain-boundary surface mesh and requires the following upstream steps: + +- **Triangle Geometry** with **Face Labels**, **Face Normals**, **Face Areas**, and **Node Types** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md), followed by [Compute Triangle Normals](../SimplnxCore/TriangleNormalFilter.md) and [Compute Triangle Areas](../SimplnxCore/ComputeTriangleAreasFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). + % Auto generated parameter table will be inserted here ## References diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeKernelAvgMisorientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeKernelAvgMisorientationsFilter.md index 29d6fd447c..375dd08423 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeKernelAvgMisorientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeKernelAvgMisorientationsFilter.md @@ -6,22 +6,64 @@ Statistics (Crystallography) ## Description -This **Filter** determines the Kernel Average Misorientation (KAM) for each **Cell**. The user can select the size of the kernel to be used in the calculation. The kernel size entered by the user is the *radius* of the kernel (i.e., entering values of *1*, *2*, *3* will result in a kernel that is *3*, *5*, and *7* **Cells** in size in the X, Y and Z directions, respectively). The algorithm for determination of KAM is as follows: +This **Filter** determines the Kernel Average Misorientation (KAM) for each **Cell**. The user can select the size of the kernel (in voxels) to be used in the calculation. The algorithm for the determination of KAM is as follows: -1. Calculate the misorientation angle between each **Cell** in a kernel and the central **Cell** of the kernel +1. Calculate the misorientation angle between each **Cell** in a kernel and the central **Cell** of the kernel **only** if the kernel cell belongs to the same `FeatureId`. 2. Average all of the misorientations for the kernel and store at the central **Cell** -The calculation will **not** consider cells that belong to different 'feature Ids', i.e., different grains. +Only **Cells** that belong to the same **Feature** (i.e., have the same Feature Id) as the central **Cell** are included in the average. -*Note:* All **Cells** in the kernel are weighted equally during the averaging, though they are not equidistant from the central **Cell**. +### Note + +All **Cells** in the kernel are weighted equally during the averaging, though they are not equidistant from the central **Cell**. + +### Understanding the Kernel Radius + +The *Kernel Radius* parameter has three components (X, Y, Z), and each value specifies how many **Cells** to extend outward from the center **Cell** along that axis. The resulting kernel size along each axis is: + +![Fig. 1: The kernel radius to kernel size formula.](Images/ComputeKernelAvgMisorientations_Formula.png) + +The kernel extends the specified radius in *both* directions (e.g., left and right) along each axis, plus includes the center **Cell** itself -- hence the formula. The radius can be set independently for each axis. For example, a Kernel Radius of *(1, 2, 3)* produces a kernel that is 3 × 5 × 7 **Cells** in the X, Y, and Z directions, respectively. + +#### 1D Examples + +Consider a single row of **Cells**. With a radius of 1, the kernel extends 1 **Cell** in each direction from the center, giving a kernel of size 3: + +![Fig. 2: 1D kernel with radius 1 produces a kernel size of 3.](Images/ComputeKernelAvgMisorientations_1D_Radius1.png) + +Increasing the radius to 2 extends 2 **Cells** in each direction, giving a kernel of size 5: + +![Fig. 3: 1D kernel with radius 2 produces a kernel size of 5.](Images/ComputeKernelAvgMisorientations_1D_Radius2.png) + +#### 2D Examples + +In 2D, the kernel forms a rectangular region around the center **Cell**. With a symmetric radius of (1, 1), the kernel is a 3 × 3 square: + +![Fig. 4: 2D kernel with radius (1, 1, 0) produces a 3x3 kernel of 9 cells.](Images/ComputeKernelAvgMisorientations_2D_Radius110.png) + +When different radii are used per axis, the kernel becomes non-square. With X Radius = 1 and Y Radius = 2, the kernel is 3 **Cells** wide and 5 **Cells** tall: + +![Fig. 5: 2D kernel with radius (1, 2, 0) produces a 3x5 kernel of 15 cells.](Images/ComputeKernelAvgMisorientations_2D_Radius120.png) + +In 3D, the Z Radius works the same way, extending into adjacent slices above and below the center **Cell**. + +#### Quick Reference + +![Fig. 6: Common radius values and their resulting kernel sizes.](Images/ComputeKernelAvgMisorientations_Table.png) + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md). +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -+ (04) Small IN100 Crystallographic Statistics -+ EBSD_File_Processing/aptr12_Analysis -+ EBSD_File_Processing/avtr12_Analysis ++ `MassifPipeline` ++ `(05) SmallIN100 Crystallographic Statistics` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeSchmidsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeSchmidsFilter.md index fea1712097..dee10769d3 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeSchmidsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeSchmidsFilter.md @@ -6,19 +6,47 @@ Statistics (Crystallography) ## Description -This **Filter** calculates the Schmid factor of each **Feature** given its average orientation and a user defined loading axis. The Schmid Factor is the combination of the component of the axial force *F* that lies parallel to the slip direction and the component that lies perpendicular to the slip plane. The equation for the Schmid Factor is given as: +This **Filter** calculates the Schmid factor for each **Feature** (grain), which measures how favorably oriented that grain is for plastic deformation under a given loading direction. A higher Schmid factor means the grain is more likely to deform (slip) under the applied load. -Schmid Factor = (cos φ cos λ) +### What is the Schmid Factor? -*The angle φ is the angle between the tensile axis and the slip plane normal, and λ is the angle between the tensile axis and the slip direction in the slip plane.* +When a force is applied to a polycrystalline material, each grain responds differently depending on how its internal crystal planes are oriented relative to the loading direction. Deformation occurs by *slip* -- atoms sliding along specific crystal planes in specific directions. Each combination of a slip plane and a slip direction is called a *slip system*. -The **Filter** determines the Schmid factor for each **Feature** by using the above equation for all possible slip systems (given the **Feature's** crystal structure). The largest Schmid factor from all of the slip systems is stored for the **Feature**. Only the Schmid factor is used in determining which slip system's Schmid factor to report. The critical resolved shear stress for the different slip systems is not considered. +The Schmid factor quantifies how much of the applied force is resolved onto a given slip system: + +**Schmid Factor = cos(φ) × cos(λ)** + +where: + +- **φ** is the angle between the loading axis and the *slip plane normal* (the direction perpendicular to the slip plane) +- **λ** is the angle between the loading axis and the *slip direction* (the direction atoms slide along within the slip plane) + +The Schmid factor ranges from 0 to 0.5. A value of 0.5 means the slip system is optimally aligned with the applied load. A value near 0 means the slip system is poorly oriented for deformation. + +![Fig. 1: The geometric relationship between the tensile axis, slip plane, and slip direction that defines the Schmid factor.](Images/ComputeSchmids_SchmidFactor.png) + +### How This Filter Works + +1. The user specifies a **Loading Direction** as a unit vector in the sample reference frame (e.g., [0, 0, 1] for loading along the Z-axis). This is a dimensionless direction, not a magnitude. +2. For each **Feature**, the filter rotates the loading direction from the sample frame into the grain's crystal frame using the grain's average orientation. +3. The filter evaluates the Schmid factor for every slip system available for that grain's crystal structure. +4. By default, the slip system with the **largest** Schmid factor is reported. Alternatively, the user can specify a particular slip plane and slip direction to evaluate. + +### Note + +Only the geometric Schmid factor is considered. The critical resolved shear stress (CRSS), which varies between slip systems in real materials, is not taken into account. This means the reported "most favorable" slip system is based purely on geometric alignment, not on the actual stress required to activate slip. + +### Required Input Sources + +- **Average Quaternions** -- the per-feature average orientation produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -+ (05) SmallIN100 Crystallographic Statistics ++ `(05) SmallIN100 Crystallographic Statistics` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeShapesFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeShapesFilter.md index afc6050c09..b0e5c862ad 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeShapesFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeShapesFilter.md @@ -6,33 +6,48 @@ Statistics (Morphological) ## Description -This **Filter** calculates the second-order moments of each **Feature** in order to determine the *principal axis lengths, principal axis directions, aspect ratios and moment invariant Omega3s*. The *principal axis lengths* are those of a "best-fit" ellipsoid. The algorithm for determining the moments and these values is as follows: +This **Filter** characterizes the 3D shape of each **Feature** (grain or particle) by fitting a best-fit ellipsoid to its voxels. The result is a set of shape descriptors including axis lengths, aspect ratios, axis orientations, and a shape invariant (Omega3). -1. For each **Cell**, determine the x, y and z distance to the centroid of the **Feature** that owns the **Cell** -2. For each **Cell**, calculate Ixx, Iyy, Izz, Ixy, Ixz and Iyz using the x, y and z distances determined in step 1. -3. Sum the individual Ixx, Iyy, Izz, Ixy, Ixz and Iyz values for all **Cells** belonging to the same **Feature** -4. Find the *eigenvalues* and *eigenvectors* of the *3x3* symmetric matrix defined by the *6* values calculated in step 3 for each **Feature** -5. Use the relationship of *principal moments* to the *principal axis lengths* for an ellipsoid, which can be found in [4], to determine the *Semi-Axis Lengths* -6. Calculate the *Aspect Ratios* from the *Semi-Axis Lengths* found in step 5. -7. Determine the Euler angles required to represent the *principal axis directions* in the *sample reference frame* and store them as the **Feature**'s *Axis Euler Angles*. -8. Calculate the moment variant Omega3 as definied in [2] and is discussed further in [1] and [3] +### What This Filter Produces + +- **Semi-Axis Lengths** -- The half-lengths of the three principal axes of the best-fit ellipsoid (a ≥ b ≥ c). These describe the size and elongation of the grain. +- **Aspect Ratios** -- The ratios b/a and c/a, which describe the grain's shape independent of its size. An equiaxed (roughly spherical) grain has aspect ratios near 1.0; an elongated grain has lower values. +- **Axis Euler Angles** -- The orientation of the ellipsoid's principal axes in the sample reference frame, stored as Euler angles. These describe which direction the grain is elongated. +- **Omega3** -- A dimensionless shape invariant derived from the second-order moments [2]. Omega3 is 1.0 for a perfect sphere and decreases for shapes that deviate from spherical. It provides a single-number summary of how "round" a grain is, independent of its size or orientation. + +### How This Filter Works + +1. For each **Cell**, compute the x, y, and z distances from the cell center to the centroid of its parent **Feature** +2. Accumulate the second-order moment terms (Ixx, Iyy, Izz, Ixy, Ixz, Iyz) for all **Cells** in each **Feature** +3. Solve for the eigenvalues and eigenvectors of the resulting 3x3 moment tensor for each **Feature** +4. Convert eigenvalues to ellipsoid semi-axis lengths using the relationship between principal moments and axis lengths [4] +5. Compute aspect ratios, axis orientation angles, and the Omega3 shape invariant + +### Note + +For shape analysis on triangle geometry meshes rather than voxelized image geometry, see the [Compute Feature Shapes (Triangle Geometry)](ComputeShapesTriangleGeomFilter.md) filter. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](../SimplnxCore/ScalarSegmentFeaturesFilter.md). +- **Feature Centroids** -- produced by [Compute Feature Centroids](../SimplnxCore/ComputeFeatureCentroidsFilter.md). % Auto generated parameter table will be inserted here -## References ## +## References [1] Representation and Reconstruction of Three-dimensional Microstructures in Ni-based Superalloys, AFOSR FA9550-07-1-0179 Final Report, 20 Dec 2010. -[2] On the use of moment invariants for the automated classifcation of 3-D particle shapes, J. MacSleyne, J.P. Simmons and M. De Graef, Modeling and Simulations in Materials Science and Engineering, 16, 045008 (2008). +[2] J. MacSleyne, J.P. Simmons, and M. De Graef. On the use of moment invariants for the automated classification of 3-D particle shapes. *Modeling and Simulations in Materials Science and Engineering*, 16, 045008 (2008). -[3] n-Dimensional Moment Invariants and Conceptual Mathematical Theory of Recognition n-Dimensional Solids, Alexander G. Mamistvalov, IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE, VOL. 20, NO. 8, AUGUST 1998, p. 819-831. +[3] A.G. Mamistvalov. n-Dimensional Moment Invariants and Conceptual Mathematical Theory of Recognition n-Dimensional Solids. *IEEE Transactions on Pattern Analysis and Machine Intelligence*, 20(8), 819-831 (1998). -[4] M. Groeber, M. Uchic, D. Dimiduk, and S. Ghosh. A Framework for Automated Analysis and Simulation of 3D Polycrystalline Microstructures, Part 1: Statistical Characterization Acta Materialia, 56 (2008), 1257-1273. +[4] M. Groeber, M. Uchic, D. Dimiduk, and S. Ghosh. A Framework for Automated Analysis and Simulation of 3D Polycrystalline Microstructures, Part 1: Statistical Characterization. *Acta Materialia*, 56, 1257-1273 (2008). ## Example Pipelines -+ (03) Small IN100 Morphological Statistics -+ (06) SmallIN100 Synthetic ++ `(03) Small IN100 Morphological Statistics` ++ `(06) SmallIN100 Synthetic` ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeShapesTriangleGeomFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeShapesTriangleGeomFilter.md index b87ee1bb6e..35344f98e7 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeShapesTriangleGeomFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeShapesTriangleGeomFilter.md @@ -4,23 +4,22 @@ Statistics (Morphological) -## Caveats +## Description -This filter has two caveats. +This **Filter** characterizes the 3D shape of each enclosed **Feature** in a **Triangle Geometry** surface mesh by fitting a best-fit ellipsoid. It produces the same types of shape descriptors as the [Compute Feature Shapes (Image Geometry)](ComputeShapesFilter.md) filter -- axis lengths, aspect ratios, axis orientations, and the Omega3 shape invariant -- but operates on triangle meshes rather than voxelized data. -Firstly, the axial lengths of this filter will be different than those produced by the voxelized version of this filter. This is for two reasons: +For a description of what each output represents (semi-axis lengths, aspect ratios, Omega3, etc.), see the [Compute Feature Shapes (Image Geometry)](ComputeShapesFilter.md) documentation. -- The sampling rate and density for the grid that was used to voxelize the mesh. See *Sample Triangle Geometry on Regular Grid* (RegularGridSampleSurfaceMesh). -- This filter determines axial lengths via distance from feature centroid to mesh intersection points along each of the principle axes. This means they are relative to the mesh itself rather than the grid it exists in. +### Differences from the Image Geometry Version -Secondly, shapes that exhibit rotational symmetry (e.g. cube, sphere, regular octahedron, etc.) may have different Euler Angles than those of the voxelized implementation, but they are functionally identical. This is more prevalent in meshes with less traingles, but this is seemly due to the fact the tested shapes are more uniform in low-poly. It is presumed that fiducial markers will stabilize ouputs for these specific shapes. +- **Axis lengths will differ** from the voxelized version because this filter measures distances from the feature centroid to mesh intersection points along the principal axes, rather than using voxel-based moment calculations. The voxelized result also depends on the sampling resolution used to create the grid. +- **Euler angles for symmetric shapes** (cube, sphere, octahedron, etc.) may differ numerically from the voxelized version but represent equivalent orientations. This is more apparent in low-polygon meshes. -## Description +### Mesh Quality Requirements -This **Filter** calculates the second-order moments of each enclosed **Feature** in a **Triangle Geometry**. The -second-order moments allow for the determination of the *principal axis lengths, principal axis directions, aspect -ratios and moment invariant Omega3s*. The *principal axis lengths* are those of a "best-fit" ellipsoid. The algorithm -for determining the moments and these values is as follows: +Accurate results require the mesh to be **watertight** (fully enclosed with no holes or gaps). The filter computes the Euler characteristic of each mesh region, which can indicate whether a mesh is watertight. See [Euler characteristic](https://en.wikipedia.org/wiki/Euler_characteristic) for more information. If a region is not watertight, the computed shape values may be inaccurate. + +### How This Filter Works 1. For each **Triangle** on the bounding surface of a **Feature**, construct a tetrahedron whose fourth vertex is the centroid of the **Feature**, ensuring normals are consistent (this **Filter** uses the convention where normals point @@ -41,14 +40,10 @@ for determining the moments and these values is as follows: represented, resulting in inaccurate Omega3 values. This problem is especially apparent for perfect rectangular prisms, but any shape with clear sharp corners may be affected. -This filter also computes the Euler Characteristic value which **can** be an indication of the __watertightness__ of the mesh(s). See -more information at [https://en.wikipedia.org/wiki/Euler_characteristic](https://en.wikipedia.org/wiki/Euler_characteristic) - -## WARNING +### Required Input Sources -Accurate computations depend on the mesh being water tight. If a triangle mesh has multiple regions -then these values will be computed for each region. If a region is not watertight then the computed -values are probably not correct. +- **Triangle Geometry** with **Face Labels** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md). +- **Feature Centroids** -- produced by [Compute Feature Centroids](../SimplnxCore/ComputeFeatureCentroidsFilter.md), typically on the voxelized feature data before meshing. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeSlipTransmissionMetricsFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeSlipTransmissionMetricsFilter.md index 4b2fa465ce..6ce3b6e6f2 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeSlipTransmissionMetricsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeSlipTransmissionMetricsFilter.md @@ -6,35 +6,51 @@ Statistics (Crystallography) ## Description -**THIS FILTER ONLY WORKS ON Cubic m-3m LAUE CLASSES** +This **Filter** calculates a suite of *slip transmission metrics* for each pair of neighboring **Features** (grains). These metrics quantify how easily plastic deformation (slip) can transfer across a grain boundary from one grain to another, based on the geometric alignment of their slip systems. -This **Filter** calculates a suite of *slip transmission metrics* that are related to the alignment of slip directions and planes across **Feature** boundaries. The algorithm for calculation of these metrics is as follows: +When a material deforms, slip occurs along specific crystallographic planes and directions within each grain. At grain boundaries, slip in one grain must either transmit into the neighboring grain, be blocked, or nucleate new slip. The degree of geometric compatibility between the slip systems on each side of a boundary is a key factor in determining whether transmission occurs or whether stress concentrations develop that can lead to crack initiation. -1. Get the average orientation of the **Feature** -2. Get the **Feature**'s list of neighboring **Features** -3. Get the average orientation of each neighboring **Feature** -4. Calculate metrics given by equations in *slip transmission metrics* -5. Store metrics in lists for the **Feature** -6. Repeat for all **Features** +### Cubic Materials Only -*Note:* The transmission metrics are calculated using the average orientations for neighboring **Features** and not the local orientation near the boundary. Also, the metrics are calculated twice (i.e., when **Feature** 1 has neighbor **Feature** 2 and when **Feature** 2 has neighbor **Feature** 1) because the direction across the boundary between the **Features** affects the value of the metric. +This filter only works on **cubic m-3m Laue classes**. -## Luster-Morris Parameter (M' Values) +### How This Filter Works -The values are calculated as presented in [1]. +1. For each **Feature**, the filter retrieves its average orientation and list of neighboring **Features** +2. For each neighbor pair, the filter evaluates all possible combinations of slip systems across the boundary +3. The transmission metrics are computed in both directions (Feature 1 → Feature 2 and Feature 2 → Feature 1) because the directionality affects the result +4. Results are stored as lists per **Feature**, one value per neighbor -## Fracture Initiation Parameter (fip) +### Note -Three (3) *fip* values are computed as outputs to this filter. These are best explained in [2], see page 021012-4 +The metrics are calculated using the **average orientations** of neighboring grains, not the local orientations near the boundary. + +### Luster-Morris Parameter (M') + +The Luster-Morris parameter (M') measures the geometric compatibility between two slip systems across a boundary. A value of 1.0 indicates perfect alignment; lower values indicate poorer compatibility. Calculated as presented in [1]. + +### Fracture Initiation Parameters (F1, F1spt, F7) + +Three fracture initiation parameter (fip) values are computed, which relate to the likelihood of crack nucleation at grain boundaries due to slip incompatibility. These are defined in [2] (see page 021012-4): ![Fracture Initiation Parameter F1](Images/ComputeNeighborSlipTransmission_F1.png) ![Fracture Initiation Parameter F1spt](Images/ComputeNeighborSlipTransmission_F1spt.png) -![Fracture Initiation Parameter F7.png](Images/ComputeNeighborSlipTransmission_F7.png) +![Fracture Initiation Parameter F7](Images/ComputeNeighborSlipTransmission_F7.png) + +### Comparison with Compute Feature Boundary Strength Metrics + +This filter stores results per **Feature** (in neighbor lists). The [Compute Feature Boundary Strength Metrics](ComputeBoundaryStrengthsFilter.md) filter computes the same metrics but stores results per **Face** on a **Triangle Geometry**, which is useful for visualization on the boundary mesh. + +### Required Input Sources +- **Neighbor List** -- produced by [Compute Feature Neighbors](../SimplnxCore/ComputeFeatureNeighborsFilter.md) or [Compute Feature Neighborhoods](../SimplnxCore/ComputeNeighborhoodsFilter.md). +- **Average Quaternions** -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). -## Citations +## References [1] [Luster, J., Morris, M.A., 1995. *Compatibility Of Deformation In Two-Phase Ti-Al Alloys: Dependence On Microstructure And Orientation Relationships*. **Metallurgical and Materials Transactions A 26, 1745**](https://link.springer.com/article/10.1007/BF02670762) diff --git a/src/Plugins/OrientationAnalysis/docs/ComputeTwinBoundariesFilter.md b/src/Plugins/OrientationAnalysis/docs/ComputeTwinBoundariesFilter.md index 5712cbb442..08ea5bcffc 100644 --- a/src/Plugins/OrientationAnalysis/docs/ComputeTwinBoundariesFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ComputeTwinBoundariesFilter.md @@ -6,14 +6,36 @@ Statistics (Crystallography) ## Description -This **Filter** identifies all **Triangles** between neighboring **Features** that have a σ = 3 twin relationship. The **Filter** uses the average orientation of the **Features** on either side of the **Triangle** to determine the *misorientation* between the **Features**. If the *axis-angle* that describes the *misorientation* is within both the axis and angle user-defined tolerance, then the **Triangle** is flagged as being a twin. After the **Triangle** is flagged as a twin, the crystal direction parallel to the **Face** normal is determined and compared with the *misorientation axis* if *Compute Coherence* is selected. The misalignment of these two crystal directions is stored as the incoherence value for the **Triangle** (in degrees). Note that this **Filter** will only extract twin boundaries if the twin **Feature** is the same phase as the parent **Feature**. +This **Filter** identifies twin boundaries on a **Triangle Geometry** surface mesh. A twin boundary is a special type of grain boundary where two grains share a specific crystallographic relationship -- their crystal lattices are mirror images of each other across the boundary plane. + +### What is a Twin Boundary? + +Twins are grains that share a highly symmetric orientation relationship. The most common type is the Σ3 twin, where the two grains are related by a 60-degree rotation about the <111> crystal direction. Twin boundaries are significant because they tend to have very low energy and distinct mechanical properties compared to general grain boundaries. They are particularly common in FCC metals such as copper, nickel, and austenitic stainless steel. + +### How This Filter Works + +1. For each **Triangle** on the grain boundary mesh, the filter computes the misorientation between the two **Features** on either side using their average orientations. +2. If the misorientation axis and angle match the Σ3 twin relationship within the user-defined tolerances, the **Triangle** is flagged as a twin boundary. +3. If **Compute Coherence** is enabled, the filter additionally measures the *incoherence* -- the angle (in degrees) between the boundary plane normal and the misorientation axis, both expressed in the crystal reference frame. A perfectly coherent twin has an incoherence of 0 degrees, meaning the boundary plane is exactly the twin plane. Higher incoherence values indicate a boundary that has the correct misorientation but is not on the ideal twin plane. + +### Note + +Only boundaries between **Features** of the same phase are evaluated. ### Output Type for Twin Boundaries Array -The *Output Type for Twin Boundaries Array* parameter controls the data type used to store the twin boundary identification result: +- **boolean [0]**: Stores the result as true/false +- **uint8 [1]**: Stores the result as 1/0 + +### Required Input Sources + +This filter operates on a grain-boundary surface mesh and requires the following upstream steps: -- **boolean [0]**: Stores the twin boundary flag as a boolean array (true if the **Triangle** is a twin boundary, false otherwise). -- **uint8 [1]**: Stores the twin boundary flag as an unsigned 8-bit integer array (1 if the **Triangle** is a twin boundary, 0 otherwise). +- **Face Labels** -- produced by a surface meshing filter such as [Quick Surface Mesh](../SimplnxCore/QuickSurfaceMeshFilter.md). +- **Face Normals** (only when *Find Coherence* is enabled) -- produced by [Compute Triangle Normals](../SimplnxCore/TriangleNormalFilter.md). +- **Average Quaternions** -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/ConvertOrientationsFilter.md b/src/Plugins/OrientationAnalysis/docs/ConvertOrientationsFilter.md index 856cd5c596..11a375a510 100644 --- a/src/Plugins/OrientationAnalysis/docs/ConvertOrientationsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ConvertOrientationsFilter.md @@ -12,6 +12,8 @@ The following table lists the various orientation representations that are suppo is capable of converting between any representation with some caveats. The Input and Output Orientation Type are represented as a zero based index into the combo box widget. +![Fig. 1: The eight orientation representations Convert Orientation Representation maps between, with their zero-based indices and component counts. All describe the same 3D crystal rotation.](Images/ConvertOrientations_Representations.png) + ### Input Orientation Type The *Input Orientation Type* parameter provides the following choices: @@ -75,12 +77,12 @@ The valid range for Euler angles is (Degrees): + Phi : 0 to 180 + phi-2: 0 to 360 -Rodrigues Vector: Length must be positive and the vector must be normalized. -Homochoric Vector: Sum of Squares must = 1.0 -Quaternion: Scalar part must be positive and have unit norm -Axis Angle: Angle must be in the range of 0-Pi. -Stereographic Vector: Must be unit norm -Orientation Matrix: Determinant must be +1.0 +- Rodrigues Vector: Length must be positive and the vector must be normalized. +- Homochoric Vector: Sum of Squares must = 1.0 +- Quaternion: Scalar part must be positive and have unit norm +- Axis Angle: Angle must be in the range of 0-Pi. +- Stereographic Vector: Must be unit norm +- Orientation Matrix: Determinant must be +1.0 ### Data Conversion Notes diff --git a/src/Plugins/OrientationAnalysis/docs/EBSDSegmentFeaturesFilter.md b/src/Plugins/OrientationAnalysis/docs/EBSDSegmentFeaturesFilter.md index 73e65dbedb..efd83821af 100644 --- a/src/Plugins/OrientationAnalysis/docs/EBSDSegmentFeaturesFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/EBSDSegmentFeaturesFilter.md @@ -6,19 +6,49 @@ Reconstruction (Segmentation) ## Description -This **Filter** segments the **Features** by grouping neighboring **Cells** that satisfy the *misorientation tolerance*, i.e., have misorientation angle less than the value set by the user. The process by which the **Features** are identified is given below and is a standard *burn algorithm*. +This **Filter** groups neighboring **Cells** (voxels) that have similar crystal orientations into **Features** (grains), producing a *FeatureIds* array that labels every cell in the input **Image Geometry** with a grain number. This is the primary grain-segmentation filter for EBSD data and is usually the first feature-generating step in a reconstruction pipeline. -1. Randomly select a **Cell**, add it to an empty list and set its *Feature Id* to the current **Feature** -2. Compare the **Cell** to each of its six (6) face-sharing neighbors (i.e., calculate the misorientation with each neighbor) -3. Add each neighbor **Cell** that has a misorientation below the user defined tolerance to the list created in 1. and set the *Feature Id* of the neighbor **Cell** to the current **Feature** -4. Remove the current **Cell** from the list and move to the next **Cell** and repeat 2. and 3.; continue until no **Cells** are left in the list -5. Increment the current **Feature** counter and repeat steps 1. through 4.; continue until no **Cells** remain unassigned in the dataset +For segmentation based only on C-axis alignment in hexagonal materials, see [Segment Features (C-Axis Misalignment)](CAxisSegmentFeaturesFilter.md). For segmentation based on a scalar value rather than orientation, see [Segment Features (Scalar)](../SimplnxCore/ScalarSegmentFeaturesFilter.md). -The user has the option to *Use Mask Array*, which allows the user to set a boolean array for the **Cells** that remove **Cells** with a value of *false* from consideration in the above algorithm. This option is useful if the user has an array that either specifies the domain of the "sample" in the "image" or specifies if the orientation on the **Cell** is trusted/correct. +### What is Misorientation-Based Segmentation? -After all the **Features** have been identified, a **Feature Attribute Matrix** is created for the **Features** and each **Feature** is flagged as *Active* in a boolean array in the matrix. +A **grain** in a polycrystalline material is a region of crystal with a nearly-uniform lattice orientation. At grain boundaries the lattice rotates abruptly -- typically by many degrees -- from one grain to the next. Within a grain, orientation changes are small (sub-degree to a few degrees), due to noise, elastic strain, or mild plastic deformation. -If the data is specified as **Periodic**, the segmentation will check if features wrap around geometry bounds in a tileable fashion. If any such features are detected, the filter will throw a warning that centroid data may be incorrect. +*Misorientation* is the angular rotation that maps one crystal orientation onto another. By walking cell-to-cell and merging neighbors whose misorientation is below a threshold, this filter carves the cell-level orientation map into discrete grains. + +### How This Filter Works + +The filter uses a standard *burn algorithm* to grow each grain outward from a seed cell: + +1. Randomly pick an unassigned **Cell** and give it a new *Feature Id*. +2. Compute the misorientation angle between the seed cell and each neighbor (see **Neighbor Scheme** below). Crystal symmetry is applied so that the smallest symmetry-equivalent angle is used. +3. Any neighbor whose misorientation angle is less than the user-specified *Misorientation Tolerance* (in **degrees**) is added to the current feature and gets the same *Feature Id*. +4. Repeat step 2-3 from each newly added cell, growing the feature outward until no more neighbors qualify. +5. Increment the feature counter and pick a new unassigned seed cell. Continue until every eligible cell has been assigned. + +### Example: Before and After + +The single EBSD slice below is shown first as an IPF (inverse pole figure) color map of the +raw cell orientations, then after misorientation-based segmentation, where each grain has been +assigned a distinct *Feature Id* and colored categorically. + +| IPF Color Map (input orientations) | Segmented Grains (Feature Ids) | +|:--:|:--:| +| ![EBSD IPF color map of the input slice](Images/EBSDSegmentFeatures_before_ipf.png) | ![Grains after misorientation segmentation](Images/EBSDSegmentFeatures_after_grains.png) | + +### Typical Tolerance Values + +The *Misorientation Tolerance* is in **degrees**. The right value depends on what you are trying to resolve: + +- **5 degrees** -- the industry-standard default for general grain segmentation. Works well across most materials. +- **2-3 degrees** -- tighter; useful when the data is very clean and you want to resolve subgrains or low-angle boundaries. +- **10-15 degrees** -- the classical "high-angle grain boundary" threshold. Useful if you want to ignore subgrain structure entirely and segment only the high-angle grains. + +Smaller tolerances produce more, smaller features and will pick up noise and subgrain boundaries as feature splits. Larger tolerances produce fewer, larger features at the cost of possibly merging neighboring grains that have a low-angle boundary between them. + +### Phase Handling + +Only cells belonging to the same phase are ever merged. Cells of different phases are always considered different features regardless of their orientation, because misorientation between different crystal systems is not physically meaningful. Cells with *phase = 0* (the "Unknown" phase) are treated as unsegmentable and receive Feature Id 0. ### Neighbor Scheme @@ -27,11 +57,7 @@ The *Neighbor Scheme* parameter provides the following choices: - **Face Neighbors [0]**: Only the 6 face-sharing neighbors of a voxel are considered during segmentation. - **All Connected Neighbors [1]**: All 26 neighbors connected by a face, edge, or vertex are considered during segmentation. -## Note on Neighbor Scheme - -Historically DREAM.3D version 6.x has used *only* the 6 face neighbors of a voxel. This release introduces the option -of using all 26 neighboring voxels that are connected by a face, edge or vertex. The default for the filter -is to still use the 6 face neighbors ("Face Only") in order to stay consistent with the output from DREAM.3D version 6.x. +DREAM.3D version 6.x only used face neighbors. The default here is still *Face Only* for backward compatibility; switch to *All Connected* when diagonal connectivity should merge a grain that would otherwise be split into two features. | Neighbor Scheme = "Face Only" | Neighbor Scheme = "All Connected" | |:--:|:--:| @@ -49,6 +75,21 @@ is to still use the 6 face neighbors ("Face Only") in order to stay consistent w |:--:|:--:| | ![Shared Edges & Points With Disconnected Region - "Face Only"](Images/SegmentFeatures/combination_face_only.png) | ![Shared Edges & Points With Disconnected Region - "All Connected"](Images/SegmentFeatures/combination_all_connected.png) | +### Mask Array + +If *Use Mask Array* is enabled, cells flagged *false* in the mask are excluded from segmentation and left with a Feature Id of 0. This is essential for EBSD data where low-confidence cells should not be merged into grains -- typically use a threshold on the confidence index or image quality to build the mask via [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + +### Periodic Option + +If the input data represents a **periodic** volume (e.g., a synthetic microstructure that tiles across opposite faces), enable *Is Periodic*. The filter will detect features that wrap across the geometry bounds and emit a warning that centroid and other spatial statistics may be incorrect for those features. + +### Required Input Sources + +- **Cell Quaternions** -- typically read from EBSD data via [Read H5EBSD](ReadH5EbsdFilter.md), [Read CTF Data](ReadCtfDataFilter.md), or [Read ANG Data](ReadAngDataFilter.md); can also be produced from Euler angles by [Convert Orientations](ConvertOrientationsFilter.md). +- **Cell Phases** -- typically read from EBSD data alongside the quaternions. +- **Crystal Structures** -- ensemble-level array read from EBSD data or created by [Create Ensemble Info](CreateEnsembleInfoFilter.md). +- **Mask Array** (optional) -- a boolean array marking valid cells, typically produced by [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius1.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e816e9f22fc7740786e772a6cc007a5497f076f GIT binary patch literal 41131 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 + + + + + + + + + + + 1D Example: Radius = 1 → Kernel Size = 3 + + + + + + ... + + + + + -1 + + + + Center + + + + +1 + + + + + ... + + + + + + R = 1 + + + + + R = 1 + + + + + + Kernel Size = 3 cells + + + + + + Center cell + + Kernel neighbor + + Outside kernel + + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5406e9490bca9e5fc3590c4891ecc254c704ee GIT binary patch literal 42811 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%0APhuE7SbXM9Iu-E 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 i$p~vbrjyLdHp%%&TtP&ewfI#k(LQ&?nNB>A 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 NSyAOt-UH)z{|CAOv_1d; literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.svg b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.svg new file mode 100644 index 0000000000..41a066aaaa --- /dev/null +++ b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_1D_Radius2.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + 1D Example: Radius = 2 → Kernel Size = 5 + + + + + + ... + + + + -2 + + + + -1 + + + + Center + + + + +1 + + + + +2 + + + + ... + + + + + + R = 2 + + + + + R = 2 + + + + + + Kernel Size = 5 cells + + + + + + Center cell + + Kernel neighbor + + Outside kernel + + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.png new file mode 100644 index 0000000000000000000000000000000000000000..73ea9abf3a86a1efa5ae64ef4c9f50b7c0085f79 GIT binary patch literal 58365 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 UZM3=lek+2aoT_a3qo=R_4=~^ekpKVy literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.svg b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.svg new file mode 100644 index 0000000000..02684fce6b --- /dev/null +++ b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius110.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + 2D View: Radius (1, 1, 0) + 3 × 3 kernel = 9 cells examined per voxel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X (R=1) + Y (R=1) + + + + + + Center (C) + + Kernel neighbor + + Outside kernel + + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius120.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_2D_Radius120.png new file mode 100644 index 0000000000000000000000000000000000000000..52955640256ba4e524ecab04f10c8c6c6e0e9a3c GIT binary patch literal 62805 zcmdSBg;&(k);~Nn(%p^HjdY5XASEr`NQZQ{w1{+xlr$sV9n#Vz4I>TG{X5*}-v8l! zmy6|cl;Jz)?6dc$j*+U$a+qjjXb=bl^NqapI|u~934H0JB7;|`LY30NZ^)*Ka?+5; zr(fS%ixMFa8ps>zR~nv~`+qz<)u+i(jvc=owqE8Ju-h|-z5BM08HM)a+qYo4D4(Oq z4H!{RQ1DMgf_a}5F@@ZaL$RG@5s`KYDJh3TrHtg{cb*bs-KQ^MahWx58ji${ys)ti zK7Y>S{nDS|4TOm|@RRw>5B%>J38D{pE#$=+?tf8WMM+ZsP=d}<=< zCY+(>nao1Q78;UcIj+i`gS@=Fy&PTU+m=}V5{z{a}uAF_%+7TV!EKj)| z0zSdh`!te2lQGqpp31GreTEh$K>SoyQbup`LqDw+Yhx&BM}R>rmd}QX6%yTqh`Bb!v{>eQCLBWRGB;@KL|Z;ygF$s z8Ihz3EXv?5V;gC%oc-U^6WiL^ymJ14l+Tma6pM1l$=2}LFG{77+bUrNN%@?9pJaJ# z>0pWGh)qmFM&fj!{NH8IkAD7+87+Efe1buv{v_}b6YbfRypNF<#DkA-j}WO!>U?f+ zf?}DfV)gXL_vin&RiS5yjru`dUwB^f*IL)G7|tjcnM+$}tMm3Vb%+G*xh{hzTiaMe zqe620@6%1>5uhQVRd5FjGJi|`raKo}d9(J;yQvkvCBRwCQ@v2>-LdR{AE+KazCWbC znRWQBl7V-{vLxjzjxA1A!G(jWp_GkB z;$QCFfe;wFnVBHkc9*#ett=wf%y|BP&+*xCVs0wWKkRXRsz2*Bt=gh*FV1fTt1SSb7Y1hocyL%n1URK{@F7@eEYsW=aO8Wn< zP1m-yW8OnrQ3sniL>lX zeI!c9oP6W^K%PL}?*$0|-Gxo}0U1FVn!4}k%de5dQ~;ekf;(e`GR+I^E%x_-Gsj4mtq%rMI6T0 zCGFGkjB!+P^+vwCT5d@=F67@Jai5#z{mk%Z?3N?Jzxh_v@&!6F)q_Y+-wicByeGjU z8uq&TCMUVRt}O39H$9*OTvc{Kb($*?pn=pY4n_EV_rZaM5+^`qwW66ZArw- zE~4LRo51*lJm=?vw(m8SwCS_u>pMBwTSb+z{x3+bO-m~xng)LK*K`T6JrlHp&?*b za5%sT+0MSqK{x09`^75%A%}elcd}UpR+7asHg+x!8>VEoOms(V?Y=s0`f%f&OV;00 zOYo4nmJP`EXy)ibJdO+OJAs1KA)b}ly3>jor}2IApR!d<$U>-;bWUt%SBgZ>#F4fX zTf)bo(?N3{eWj5el~MuI-6gA&qtOrp@s#L91Z1qgV>a>PK5r^F;&U1YY54qs9$j=n!%{I@oV*Mb-g`>4t5eg+Fb ztnF<2+VYCHY}bb7{Fu`Jv*FmIsb&6biNB5)7XrLn#zH?Yq98eiE+LH?MD>?a`-Oz} zS+-uRKp#n#ukA=TU1a)2JfzfJ(c9jiFpA%76Ax_tsSZg=H~y%9bd80b$TZf+dWPbuaG_iJZfY`)f= znESlt&pwRh z;_E=Y)l=fKhH*P;>z+BUDVR3*6B4D+F}8o27I*8ChXjVSV#-QmnBJZKH9Ph3&PWWQ z6kW>HeFUw+jVducE#%-f{!f>oJ9Ypy=gjSva^@ogUL;hH6_TDS*Yq#4I_3EHZ2Or; z{n<~y6*cJ`is>)qp6)pv9)OGM@fU%d0IK1sOVUdJ>PIr z(|Fnw3DJ-qE+=z-RFrGiH#Q5Ksmcf5K=ms+0(`J8b#k83))S{A$PG{)=1`)LJf0v7 zey21FI3o+kpn!x)1$~X7@P+PU=UZ)YU);J*Vu=cx@py_}gvCV_gb6*ozaY&kZ-YM5 zGxCgoJ|?8eq%lw<()%%APQ)hS#iQ(Rg7&arK2 z8EK|xToyOx=AKM+-LFNaiM!73C+fM(S0SVJn6V>sHGb4uj!S)H^M8D<5VuF#U|Juc zi=y{)A)Yr-6rW~tvBRr0l9&A4a)Z$iqD^#uHS2Xmw(YtTsLeSy)XU@I{cI` z;3?Cu51W2ijrrwy--uKN{TZst)K%vv2VEaiiow0xUGUx)b)rD0PMbftk5W;#iai!u zSX{q65`Xor9UEeCvq_%gKXygQ&(CLe(B6C;Cky?;O-~1~X0E^QRgX~1?Z3&dYLWv6 zfwHTpjUk}&_UFbZWHwH(uMRS>r->Itsjv}H&id20a=Mpi!l90DbdgGV^7s*gAe}+} zF#(`Sa=YFj`kpK+3RZc&=!=ip+$Wz!N)|7Si8Zaw5)UBdNqY<9)<0e8lfevwLe)}k zI%J+7W_yKr(Al!0w=`H&QDt(6)v~j*R;n}C@}yzBD?V&@v-&uzKejxhe$;AKl$Jy8 zs3LG>t+9a^=qIOa(sxIEJa>AuK6&K7cMiIavQf)$lQSXTN1Wug`(SVBxt<;pmElI} zqxPSvZg-KcP_c?5(ibojfrxGIF;AH!}*IF9EN0-^CbtI za3r^!lbYgxAzj2%=W*iW!w->y7jYYXVhf01hBd%GYp{ka<_vLDtfQ^t2(H z93KDt8yG0h{c(k@3_)*_zL-zr^YJyq`ujq@crZ@JZ!O=^=%9#1+m^>pZhf21YN>ul z(t<)&ieDdF-8lb6rw(z8eq134MZT`S5F_x5JNMBOyo8&Pc?khig3S5-);)D5H!0XT zIWXCHexB;|ONU2D(O3sue>x<@jVxA)jg6Y# z3ZzjV&XrevPDhXSTaG|qEJYM)V!wMs=2P)q-1j>%-LU;UjT&bl=vo>kSj&9{p6+=o z>+?fllGywjHrYim;a1l-A(CDp>!;L@#&#a=HT|yWFqiB~-lKLfn)l}dFrd$vnV3r@ z?F|rm@V0!$esyB`i)W{bx+4}Uk+`V`=q2a`qo<@5|1w*=7F|-VcwYE(VO!#52ye#f z@-MUFdF*!Hl0_FnqDEb`u;8SLo%PMY$h`S91i&9sxh>f04u!rul-gQL>%U`>m1e3Y zg1>87+qaI7Dj{DvL5a)iJd4b0Zao5R68))7b~Z57s!;Ii!yc#{ILi2Q1O!FD1_r?|HaH{dRn@1jO_WZ^)D`3#%t@F z9bRyMmL{S&Q!2YaZ`Os`JA9ClRTk%Q`3F5*G4R|AV>~&&S0}v%Y^n^#!_B{rvHCFY z1&L%Pjp66?&=&2*?I?eA6xeVa-8ebEON@u8BBPGA-wW-fqNDJ4PIP5XFRM3X5B2n< z@_MqeSN8ZAaaiR?ez5sq|60+OTw##K>7OqfXg_h($!)#5#RQOv>VL;G6V$32@A`zt zuICUlqtI_dY?}6SH60sAo5J5qcNxLAp2VCTpoI4#vK$o>QPv%BWkZ#TE}Q3ZSCgEG}HI zwn7F5(CIB><|2Cp9$Smb8)`E7>K&weXtMTNW2yKtN0HU%Fs(E(Z}gtEbWZbk%_K{6NlrbA)i)p1`zO$**w>%EZ8?yl}4 z=+4K(896TE?S<;Z92?C>v%B}1^%IA$e_tKW)_Q9n46`%!t*2>!jrneAPb`3#3JHmLX_~o;Ll@!o9B{NSh!6@A?6nJ z+tS)P5GPJ8x8jm9l`maGNB_Io(S;I~2z-FU!l<=+fr3q(`Sc7Qz~5PJcVC_9b?qq= zewlmP?qHXB1-aMFe8RvEi-h8$MJXm^X7@5pJ&hPttTT0DyOYcF;QAtRv}ncY+f5>Z zyq`_s2`*lIe2J%~Vzfe(JZUirRK%_?A_-MpkfK_Pm6&=)5%vcQvEOEN*xZ6|j!8g* z{9PF%R}mM+7tcQYJhUaRFw}Ll_h?4&>jOYy7p-zoX|sGqhQzgyN-ZajJX|6Qh>;^U zY8ah3 zrW-%2BsGAUW&CnJdRez33)PNo);Zl{5tOP%N+X+Z6B(aMG7v2P_RcoEN?eV+y-Onn zwcjavY0Y`4TKC6M#a%Qbl?(aki!4V!Ow_+99@c%ec4JS!`*N4 z+uSLIJJa=eVL>0t1|7kv*SWi4-0i|c3xi*|yCZflH_BB`Nq=dHIP=g=k=E>a&0@LC zt9E}isCgkuC7H&OlAP2pPdJrbiU`4%TUmf`@X@1~a{Gw2Ei@q$Bz-koT+S;KN;5pH zcJt*L`9uq`}e!^FfiwzLVJsU!bTwxCOR z?>h(QW@E`g)f8{Q_6cx`|1dFqgV*%SkN+5FvRuFbYN^|dbnxR~RYcdykfxKd&G=k< zp(f`kO2rUM8rNQbXi*~v2nXw!sQbpr2lt!JxgWWdM9t%cs!UZ{tb`MwSyQ(@u-RfM zdRpUT`|s1rCXKXo**0W;4qn4Gfqcy~TYy^%V;zQY9I{l?L>3N3GVel^b5*%y4Io=t zUL#VB;qY*P}y;bb>8*vv>zUEPZ}d<_~TT4imHjaTWkQ~s-MB7)Z}Nu3?5eez{4%Nu!Rru=jX z4U?VPAG`=RoPGAL&t(8#0jI#$fT^oBHz0{X>+GAjZL8T>>aeFB~Az|(K;v)hiCN`>L?ng!`5i_2m4$|AlDl~+ha*hSCWxbq;^r*|k;DVe zsD6yuh&?wS_s%=!j}@k5a?06Ou^+8@cwU;9@h0c01xgA93t~JT3gb^PtoTY{?L0(N& zKiJlSkcop?&VP;XdA>PK{kQvI%xjrh9ozgctiLM`UiU!=4Y0@yh5#eZC-k>nK$w!e zQA!v9524t%!y&@^G;pjML&cx!TKvq9@8!=B2zs1xZsnU_1D#JWVOT;l5(B$e#i(tu z{KH0i!|3Ag8$Y~qH?&&0(vi1H9k5dpSBJ(2_y1Lv#RQM*$zjTnnraUR6%W&M93#Ig zmX;+0pUp<}N+@T#L!km)PUYLYDU4u<1=-emKlOTC&gZ=9neu7xdw;2)O7a; zSJ!4Rlyrc|@z#$$DPzTzi_1-V3Y4H@~(M70Kd$`N?O5!%vBd zxEC$>9j~jJsz$IY1>tdF+>!738_6_xx9S>BiU=&Uu-YV~JYmzfOPZp5jzsG((NYEH z=AX`NH+@%?#bxZQw-7DTt9w6P*DZz^s+n@v#WOx|fG|h}C1DqY0S;Y88SY#Q>xq+q zXM}u~v?T0)0xGSX$*x5Hs-Sv12L_yG)(6rF(A?3|p=!6ToiQ;E_W`kJH8~0>5Fp3R zK`$67V#Grp-Kk|2WckfDW%MkS;S8^jZChHdxJ7S!y0dn%wP_|PbApyt)wSd6lOH-7 z8$1BpZ1a62M7+Me@RXnsoG`9++_f$#wl%)@Ykc>ifM@$sK_!+3Ps)KB$ek|4pN9yq z*85kWevjNUbr1<^-^*X*nOi@a)xF)R@ZQaR_!NSI{AbFGzAMWHco4g?avghDE9GuT935GcH8C4N>&E&T&o8KiiXEaA6`qhVp1Q+u06D)W z4Hy{Vm{>?TW7=cUjhU&zL7n%yu1O4k)^`(cyg@ApdjEsBWv~0on?eGoul9y?`C(sf zW~CCq%)*#xslXg;U(r9~V~hBje6ej#G_F ziJ)!(>Ip zN5Al&XqK;t0GJ7jAMRm|rk-pR*Y`l*yt;QSa4Fd&s!FLI7mv_jG4oRfs*85r^Ux*I zCn&;kd>$ns6jJY1ebkx3DcZ{vw1N+mM)CVYftlU{U<&<*O2LRw5mULmNo@U~I&teS z%w#ck-rYQhczRW#H#Ia1Z>-%Gx$pS0B=%ugAv)0|kYv;ySs_{^guI4hD)kIUyrC5m zBM)>DYv3hL+Y{5((>1pCywo1w!$L-ek0BQ#Ag@0#tAP=7tHVDo`lY(5343h6^u1cZ zJH8%HkU1dWwO`J5i1|hg`B_UOIy*y2$mAtjwaqYHi=VIQod4Ior*9BXy+2+fo<&<@ zdbQ((SLgnczi*%bXgtNIDI&xjy1Ie=8{Fd62eIMHaf2)+Radbpx-#iNz&t+acl^Ea6eRvMz+9 zsW8Nw(o)ru7&3nFN$Y`hy6uWh_2a<{aGG-&BLKA)FDWhdML1Z#@ZLXZOQiGr?XS!| zt>Z^;fA`g{x_Z5Em3~`27d<$6N^Oqh2vMDSRb}B|85QWiJTTDcJPK3?{Wou?N&ixb zxn)O3)`kqk^9 za$DcC5zZL~!tI{*QAq_z0Pc-8 zTnW29@R+Vwm`WqwDnInHYM(5p43VBLYdto6t<3?|E{loYf5Iy;0pT->01L8V>gp*? z@~~86aIfQ|VZKgs7);1aD&+ZaFs6GzjAa*WArk$}LqIO>JKxCr%2!Ny(2L(&pa3Zk zdCdlOWFaV!ock*g{`(8ey;i?%QwrtG=KRak`u^#8T%l`$iB(|TJ&hpZZ11nomHAY` z(QDmwfG%d<2Yg6tMBQf6G8=>znrfp}U)_51lvEnBma1xtA23(?-C>$3GeLZ>ZmK;$ z&WL3RkFDXua4I!vwP~u#X=YPnjGcHrK zp9NZJClOE2cusDi^V1m1(A&Fh^uS(BbbCXy22=p+D|LbK~QX4LKRp$KR8} zm!u+e!LB1doXP|l9mM6m$H!`X8Cf+|gj@^x46+V=V(v!2<(-|UA;y*LE}_XF{Q)V|X9 zim&bAFQ0Vyif23kAI9_40o8G^reEU;$Ky1z5JmvSG~QvYWawnCYW-H8MEV-^8(08& zmqN-^WM^>y%K{v}@7ML*w2Yw=Cjn}x{Lrvw{T30yMrV;>cf*fdE^cnwrRkUETSQ!O zygV;^65~frvs7;Hk(gFIz=0wEkM1L(d%Q7G-|Uyw_{&VLhP=bA_9nj& z2+u8T=5S^SRsc6EEnb>UUfc`E^Kx_d^*f3eRr72%B)m2;rZLtmM*NEO_9gJtOb0sP zGHu&qV=#{XQMBvzM$!{jh(0oEsNeGnOpx!XN!i z)%S+Qr}}_dr}A(_aeJ!++fAm@9|Q2`20@{3b!`a=KTCP|S%O{jE9ikJs%zhf)LZWd z0j5o$Ml58z% zOg@;5qD^Upe~9gXGakuPPxH*s%9%2^wCN)AN*dZ4_|>kaV-DOh60yvz!-WL~>Gzf# z6V<0vor~kgI5SLdlqj2{Hivick0&NiMf44W`Zw01FAXPd&ubWM{?aUoe0UpiJHNQF z+N`qt*QuRz*@qM;;<^XGQjk|3+s0T%4ntfo#WtL*>@G74(P^*TZ@ED4Si<`G4^6Pt zd6@(G>?k6q{YLUAgFSkCq;E1_Y@m@{v6Lphy%J_0fFFV5a{3?1VWtE6>7?A$)D#1V z3K&!*p|BiZ#Kl>*{y|5HU5%5#Q7(S|388-bVW&Tx2HK+BF#mm>W{SlAxWEKj4{ zb^Ir_c>jGnd|tR)=8WKnVN|V*jA;BNgDl+xHHsZ4_#klHWp{tyE)(Z!R>46oDB9Gj zo<406=Snvy+=*)sSD@i$jB)nlNci`?SFCFJneO`1_E)fw&Utr{aEkx&N7v55Bk{JK z!5`@lmz||g?FF{CdV2jN>DHC&A`>%S!2ews9(j9m>p{ISbZK~4^*ui#gLm2M1MW=4 z)%QO_We3hx)t$!WZubqc{*D4}=dG8mMU}t1krd+-=s|(N(&}*Kono?CnQ0HJP@;UT>69V06;1{Qqt_)$1=`&!Wu5MbR06W^V z37XRSH!2GyZUeX#>Jr|Shp9dfPi&u{H;)ZNd zv_0In`0QVwY3dq8&x+p=mD>-l^Ya#|s1pC#!30xiw4Z@%VS7oUHpTljYU4C0eGsVl zq^w9ZY%)A4>?NLDZLHvt+I*#S?kf*8A>RjwOMQGt-BO0Mi;uI@P9!IX+{+RV$qjoQNTy!=-;M9@!o6%Q3uFYQ)Gsg ze~AAwmDoSgEZUS`(~7=tDJAg8{qNC|iMCs3sT<)l>Un1y^}y(P2}}Omj5-qZ^nmis zz%P#$lT$8%bsYc)1ONg8(1HHkh(6g+Pwv@j5Q0OAypjhGKYv&0m}uOyyok=R{_6VX z5MFL=RnPLb_nwlE{;2}D*@pYLw3}LaEdN=^9aWIR=rN7Ff#$Wcg9+gcmGdaN>0{_K zJqIpFt1z8BYNOi^v=>iFlCzmfLe5Bk;L4hqSs1J3AwV=I1$VA%X$6lFpV z5Y_+Ryd3(<(IfElqFRP(=y0ag)QmtN=W6%#Zy>}Sa&a}>i}RG*OTDbGt8I>lCeW6# zv!4m)=&*Gjb{9b)m&#;FAfAzNV45>Y?2iJRfFH%>C=ky^5SW|wlc)feADJj;R+PdZE`ACIktUNza)>hSznhVv? z(M>nI2~BAIlZ91azDdW_gRsb%y9a6``;xzQ z9@rD$O1H|58n2vG<3zuRu}|K%Om!Rcd`l|QlH%QOfApJIki@U;j~`uk$jQI&a^T}g zv-Cb}z#x!~?{p4Bs|7{pVJn>hK5=Vr--<$3;~iHb(uyNT{jhUdKKb>Jx_ge+4oL(B zNsin5?JK{qNZM`xb@c<)4Z=vIICX&K&QH*B{%w5%ZC}D4>yRVPk1lX%khKfEKMoa{ zB%D6A`~L6?5MHAJrXMI6eL0X)BI7?2jmaxAgFrxY>>OJ}04ttvzWu$f0*<_%Iuzh9 zKlQ#d7Zpb)j&cYDeB6$?flsc~j3~`|^Did4Xd<%yWdeFS&I}?p1R!J7I;|OQJB!fZVWf{L zLSAZkh`I9&v^l2Al2>oMUYO#)OVHMtDBeJiN`lJ_$-><5D~}DxC{+2f_!{gW{Jo#U zqS||qKh%4YXWU?>__?Y~%jZ@FKT>&A+)vt z3I4u?+r^qBCI+MVGUX#V^OStf+4;x4i&O3CskN@8=bJ=^uhrFA!QZbPu7g#9Lw&Yi zbSel+H}or8&x-=!{}6$2Ax9h*2`)Dd!p-eRy+<(jOxF{iRvR-s^S!>3s%} ze&;;YcBj`~3fFY~OG36mU|}+mj^6u@v3>;bm)zU*3I*>dMDWqm^s&fU(POBHMuk(P zayw3{p*WE*oNDSjk2`Z?4%{$f8whfMHmdo<(GDIv5ac&*ZoTPjtV!O+q!mv(zu93b zEqgTw2>{2NMywgaeew&O_K4ivCl!{9gGI_uU&|1eL;sDGrV=HHP_C|<$8&dg=@!rS z77#Y1Cu4%tYfLoRcZYWHQ%V-RF-S>J1+3%%HK66EB?KgF75(bi#kI5H2Q7G}>Fe7v zTkD?dp*I8U4aiVwcw0qu42sqGf#X$oxx0T+3OM*F!T(BZ2DZ=|goTW+R&f9Y+!ZYp zV^VM%l58q7}KE4ta6qz%bTU9+fTD=4FOpw}#urX|wh9DBO z^T=@;2@G^>pyf4bX+`!-u?fyEn$E4_fNXCML;kvrHx|W#{qcA!zMFXbZu9T1C4!AS zx{rq*3=D9wBkZXAurM%pNfrlLZJn6Kk-}bBfIzSD2L~((YV4R#s1}6n?^;nHG|#_L z`?k)lFemZ3eNvJ~f?!}hGxj@Tl}Kck9~yl9TAi0|1f*BDqM+R6al<{i_{3bU z3xdOKR-$)cy3{>%=Tu713x^q5f z7zAixHx$~FKb_A$Vi1kx{PGH-$oL%P_IU6*TB~;SG^NsX1zPQSkmhxO9MF1j5^>a- ziNa7yosz6=GG8*{O<79XaqZdkDp&Pe*-tX5ToN#QfvbJ!(vBsY(|>`$NRy;MdayHp zE$GirL<@I+ysqx5Lu>(3Kv!M|0Ry9~6T%e`Mo#@#(sK~e+bg@&^raRugA)EbT-xCbmy3j^)EbNwcv7Epd@-16tBct02gF-K2*i$cf^cjJ5bUjr{~b$u7)?_+(YXH`xh zuxQarBzc`h$oCQ>8a877rv*MRk+@hb)Dd}LMU+=r52iJCU(zRLGp zVxZ|^e%!y(+LjOv>UP9^>?s-=f!NVE_@!0_sK7J#_1GX+l+)6t^QQvH$Sc`qf-bvs z<}N}Tsi{}y`+`pJr_`B!s2Bzm2T&FVMgRiVjIBaASNyV_yQLTsO}1|A2Uyu&fns}` zgVQVM=qNAW=9W*mA5<2 z#WieVoXdPJuO*a~314etHd`oH{lN*gKj(2FIRA_S;E#=R7*#}k-={box=w-iGC2@( z2k?*E_C^pi!EXghpIo7lPfhbrgi2@694f#=y}|*y7JOi!W2C)B=JX);Y!Kq*P=H%? zF(rFyTDU}^39nH)XZp~RH2LQIHeZ5{QDw3Rhk=D@KCBX>IN0I1R}apC@!xN7BqFA$ zY{Mg}`tRd_=JS-7SSi0F&uPD>*t>QhULgK1l`DT_rg^%8fe8OqOJfbjr$<7p0x**2 z-{nXWe!+ZoKVcF-Do}Jt5U^p0*FIoaA;l`O%gg@?1(VZ8iz>PN0foA)2{m|chyqoH z&iDLO_^YNCf-2G6vwxT2ft-@QF34o*>9{Fh<19+wpDYill*I3`f#msC>7yEoE>(px z>c304`2N?*uegDS4V0j&5B;iNK?WrUs85E!-lK8Bh! zmtuMY?&J-rp!+snlp^bK?>{~!7G^onD5PaDLV**6R+(f1>rAw^$2Yy7xxZRV)INX6 zq89SPz3wd_5o4oBSnI5+;Q~7^1o%!^Q#iw2qnALk--YmoBbgsRQGlZe1egj?kmBw6 ztV%*oPFuf9c0nN&`~8cH@8hkk@5M}Y%-IOv<6$p2uaJ&`ToV#*a~d|bVO8+J8&+n{ zH>P(=vD?6i{9aItX?VzyDo%^Wp^Rni;2`tXmxrV8#m0Kla}c!Fa$8X+-l%dI5{GpB zHCg)3H^{kS)_9O$4)O-p~G z;zN-iG6m?@6M1P8f35CYqk#G3c6(EP>-_JI5Yn+aE(y>9mWUoJ*rtuYJBmz99K8zx zm+*nYpLk!s?1)ww?POf3lmgD+!@OJS$?~GxUxI&VicgsX;+*tu60xT(t8cdt)M0xC zM#o!nY9wH!YiLXxKc2XPancdhUbmVzn;jlsWZPVs@wu52fV#h*wKalSBR~8oca%1@ zAp&_hkO%CsjfT0|l(QLe3WOqE%7Hrc*RLgYWJ??SK~#*k47L&^MO6ib{wniM6e{E{ zc^yB`f5*IUS7vPE7+ta}JjM6Y6#UEvUp`FgmY;tMgYk3aW41~K=mBy8Al(xdhO`^4 zo&<;j(C6SsvKDbWg=HMgM+N^P#j-9hvjiaD;a;CXy5l-UbtyiUN8Oafgh2{r=3G$r|c|AT> z#Q8+wi{btD1eh)W6t+M&xn*(isK^2VzyqDyAI#6!ph~-5f6X%oC~~gm9tUFlI}h9V zZh)L#`=KqHL|l+SF+e{ys^mQg{U@J@Awz_aX2-$Xp%ljT4u9AD_igsG-TV8Nr1ox52(R_u3G*Kb#&qTe?UKI% zU0#O^X86>LMthzc14){MhYKgIF>Eg2jsiGZ0EG3*r)laxKHx^bcxq$OurZAQs#`DC zSvUQYSt5OoaX5^muj#2k#d<@oe^3lGcwIAiUXN<|NpqQ4(*`~*sKi%H!u2hUzL>c{1VAg^|7 z6PwIW%$|S|WPJ6R+_k)pTCh{T-fj$_w$Fp+kig=Na9(ha0RYiHF?>gT4MwX?h-zDk zvXMrG0c>}(19chF(Y1szCMr%Iyk{?`Y+#O*dGkfVVmC)`F?9E#1VrKC4ZUqRp1v4r z)zj3~_1_@_htU|&4WUaFOFu2(A)K7ur9lD#;m|NLvZjQ9i+v~i8`Yf~CpZ8=M?3$T z`+3WxFj%^3?igJJz?xW2aU{1C{H@6_*CF4qXvG*iUQ~~8y=!aTD#W5{aN~sQHv5EP z(QjI!-hG{SZEd#)by>q#)WF22b>N--ee4+Q#5DzQaa@Ykp|l%2Tl+|_>LNG@@ZG-q zbN*O<4M6DbOIsxnNk@kbHxv&ei08!1#EW+bJvvPMm3JfRi*!wyJ^%ze2t<{DghB7A z4z2syVTQeo01@<}jZ3PV1BL#(yX)lGFHzXd%<8P_733>@UCCH;lnZI5D8L~xF%kM&A!# z=>@w8wakkxa8a#q1N%>RLmE7jdTdU%1U}H#g|2(O1Bh{5>c8U(N_|9q_BTQx$A7V*tSd!vK`j!U2&-HLRTmEKKrO>~K#Xfb-F4dIWx$mmezNEZO>*S}3gD`#g2H&< z)Bl|s$kw5IIidzMkU(qsmI@Q!jNWd}9r8i<8c5QIXFU%9W!}~Kv!X=} zfq2i!_LqJgdMn6hJ=NeDep-Oevgk>{ikfuZC#XAN7N>co3fWVb-9iF#u%e-!K21N- zAU{$wm^o)&!Wv%`u_8nSA>8Q_W3b%&iA^)hrwN5ojtc$mogKoIQiH)udJwy-r5sL; z&y_v+fXi2ACwFPPm#ILPG4yr80y7Zs4Vsi8=Q}$#E1Fz(C9^m)4QUdXcw#?>y3yBC z_@4k`o$FV;qP-X5jLX`$UprU}Zt23Cn&Ml1uWOOA&3JR&(B07i0p}7dwI^)Ih|B%T zI27?LBtC@|$bZ6F{3U48D2P{G1D}1wOG^_G02Kw-!J=!*L}MtO%_`=;tv)x{^E%Grm1%Eg z;i&_t|EzFs7c%@Px0Q57zdaRV(z&$au#*e`<@1uS{%K+ZpfoVdj`-~@_0)OR2Y^37 zuXf{(9o>Z;jHY`OeUR>vG~Xhmr7yw(Myjv4(Y<$#qqQ{}=D(1@F*!h4p6;EFEoMRe zz;33w_xqgr{B&C@1dt7`pPTTn|8;6V>PtrVt5(_SYaX3BY%L`vmJkri>EFjdor0NFD{AlVL5grb-4Xh`|u3b^M zk;Ul`VD#R*V`K`%hYw-)Oq*UgtOB!7$8 zpJe$O4BhJj?fb_qgqnP1{Mcd~6N}B?*5B!>qeu#UaowEi#k%B#{Y`0Oh>e@_c@EP$ z0jIK=lf%v<=e98B6=+zHtve3CuiDck0q(BOt4ne;I8`$W8U@PmgTJGyQ}Bf12|vUz zC27xmWDcyZ;pz_-x-{($xTQ@T0)sjb@FJ7THFaQ79iM#c1@Q7M8D;UMe(|8q*6j{} zwXGAUF9TFqTn}?%Vlv@DbP^t7`G>cyy9*3)77(wBxciO=s7-E7OM3N>$hx?aQg@G= z3UMT7f(GvI@7?ZCua6GtuRJaju;MjaiES$5f7WYH<3Tbho3uKSASj33Qh z*a3MZkVgR30~ne#Uw=RcWwE1O*TBH5V;7IUew zMCC+%Rv9eSLif75XVdZc>eXCk|Exz%*{5sIpP1P@9v3*K$>Gd>dt9E?K-40e=UR(CNBDfM2 z&o;XHJQ}FL7hIsqq^dp((Y8ALjbZ?<1svZG#^OZw0zpy+sG7-@%P|7UqJ8o~`^qIL zbcs+-1`!^MeJ9a}&n}}Ni15)uvnAkiwe-@+9MNWGR#BUrjKp|r_Q;)?hL7*y0V%k= zob8GB`7p%wyypE_S@5x_q^$V$-nqyD2*PG|*21Hm_kIy4&I;tAtN?HY#MRGZM>3II z%z4s;$MI1Sfpll8@3aDZlIA2M&6-)kJvL%SA5k~IY%>cbN|)28p(+%B!7I0TKN=NzERUkLH5e-e(US=T?((AwPbUgf&Og+w78k2HXLhQ|QdimtR{~ zC-F*5%$30z)%4pV+2L^aek4J8C4w?W7G@SfAmTZk!AFQM!tHHuV;aMsi^}JAu=2HJ zLq}Z7sP?_ZVePc-(!Of!>Vl5$w-$v^0CKvfoU>HITGEarfkXvJ5{;M$HS}5W(|iDO zAx*M8mz@*pMzy1ZWl7ry^~zd;@VY*REq8QR_o}6-i4u;Osj)>$udo+$O-Cfb2)?>` z+cR2&W239%5Unj`DR~&sM^V2S3KBx7+8pU@;q(YcL|`{dGE-CFwzH%EpFm*5fR+>4 zPt}C-r1${(t5avgyR84uvq<)g-%cd(Z#5Jk=c+#+M}hDSfuP)u7Er?vcF~s@+nwC$ zUj1!e0e7`N0kYG%el75hS@T6sFWxh78`@2)ytJhFwS^lcxbp7!>kipSMZg?J2qH1} zQv;xv4Vb%Jc{aIwY8$1L`^39>w~d@d(vuRxH!pVnJ>8{4KebdcBOp>^W^YfJ`Mdpn zrA1lA!|J6u6X!mU3mOg~_vhNN$W!eq=i671L2|e!6QxDeA>TGhd;0I4L5lXw4;a3? zn_t`A_jhg!$u{DNiLLBU=MHFk04U?;aNgnr=M9L^V0V|+Zq&uID?TYI$a!hHHQ!pm zh+nfMcXUs`@moVO0j65HY476tq95);wlU#<@|Y) zA6Y06AplX8mUEt*e3StyfK^Fxls<>{*zCW{^FU|vE%W#YxZ z2F7tJl(Cq~e@MwH2Q^8trJUJW7&W$4&fZm%1KRZ$b`TeD=tH*h&;$oq&y%Mm?z5-c zH-b!!t(}Q1e8(}$%JNDt1GPf=!dqM7#ioO_CeyQ^pWf-a5)=5dima}YZT{SLR%Qhi zC56}rtM;9lq~O1CIPU6-;Qlxc$+se2?bpn3D=c<8X)`>gXJ<8n{aODSqpzXG%E_Qn zP|-X%J^#v}d>>eZUnYJ|FYfb|NY-86>Rqmg``#`h>&Gaz6}SDh1;Ptt@Fkx?dmbpn zCw0xY{@;-@C&ITk&y#_CI9D7{Qu96gyYBDPvtG~9uf4zooRW~!fAn*cc5SC;oR5YK zne)g_3u~%HK#Vxg;ZIL~rGYgu&1we0N9uq}6!B|+LI7LqCqGoPq*NBJ&AREG>@}5V z_KE{0L26sEb1GVLscz{2_K-#BvKTljk6LBDK%tRTS1fI61rFohgL(xv|LF}`B)%M` zjJ&Y~fZJsY4T;Vn@_gPs8z-yA{cWE$nFtIx#+{p0@5Rm5zmQfMs4K{FwB6eyXx*Jx z3XgpJOJmXD{DRrQs_JW&cIZ-91&UMcdF-d(Ct@!M{`?pel%_v-mrwl%Q+&o8W2%ro z@$>ZLz>)k(SYGvT-Mt%s)yc*Gt|C_(Xdb1-^FVL2DriAaMX|Tye6f4y@OEVI_2~Hv zmYR?jd>9A4xDbALII`!($voJxDxmj~kdx--m*G7gS{7b}M<54}!SVn?1ht$wHoL&k zqb*U{4L&(;^<6JLx@45A29M=xJhtSY&c zNzy#2U22@%<7qS?M^6IM2B4{4?NqYIz~e%mdZuQEJG^Q#($VnxMiWRWeZBeaG1Bfs zN^DS4^5uy~0|O;S2m_!`Amq~n#{pj4sFlf1g?xMk1ps?myy%mSk`bm-lBmFi9=`mjTGeD@4KAj)-FQ*rz2i|c)D2ncvemgg zGR$oEB@FxtzXV*fgDhqHGjNv`F0$o2-rdh_iT}smdq*|BZQ-I3H?kFhV*wNdEMTE3 zRl16ZG(mcg3P_WpbO^=06*eLuU_ff51w)lylb~#*2}q5U5Rje#p@otVa#wVpzR$hq z-ap0R6&GmiXoO1;rr|Xi*IYrrg*dly^V3wD^@5iRo>X42)`+`bs zK!b%s3D35t^==Crfp0+W3yojyo1qmKu4}NljlKU(&Hp3-@z?B)*&#D)hqMe@Cy11^ zzW@L#z;krp>zt<=2M&Pt?T3kB18$2b0L<^rP?tcG|IhPtd6Mg;AP~^{DZ|;t{nxns zv>>$VV2~y9{3m9axfFy0B9H4g0+r|8pQNMFmDLB!?vL&hwk=)EcRTrX6c4l!ug8_G zjNyj$?W@a5Jq&V*ny*lCbAtHJi<#}8{nDH7+&FrJlVy_grvpE$-wSt)aO64g_2lf< zR{_6={wHJiJ(O{J7$H8HdimAl&u7j&yVmCZ?Q5BRtKXyH1QE+*U)>P1C86>W*BYw= z57e0C0tKeB(PUa68AeC07gJ3_NY)zXa;PJCLf1v%`d}I*49f`5MY)jjFSOSBwaPy) z6g?hyVPmjChS8ulG>*ce=V zYf1M*HA?mUVbZ9?VjLhNyU-r7QGgF=C*#? zt~_5;JTM-S9Xh(lqi#`V!gl>`MMw##A+gvwf`~qv*JD;D+g3G%x}2izK09bL&Yy_NmsFXnrbqc1)^Q1Z(LxmvV_lcTKr z_l4~4Cs(S%WKaA&e@v)e14^ZNx;%p2XxKs*;c0f=UrR0?A81{M1&`p1ao9~)0oBJw z4V$M784G7Z=m?q7bNU%$geM`hx=~A3*lJA$n~*xeV4}aYz6?n(QZP=7+(753CY;>N z^2b`LhU_P*4CbpdI@D2lF3*Xs1+u_s%wrKI;ymV-+K)#b6?5&b9YpVTJl=t+(et;^ z67C-pyiA{mlHE)D6);=JRB0bW(XRcP^?t2+uC}Au5%qk&Tbl-GpWSu>ssw3uEb)kd zYN%0S{JWC+#iOe9U9}hkJ)#(6+a14(Oq&hiZhihcd23-x2$qil9E$j*_ZW2px*H>D zg*M`z$x~95&9=XwR^2T5owM3~QxLKdFziLlKr#-~FmJvLQvFm+j#Yd)J8{zXp%{72ffq5G{i9_vUa6)2k5h5*gc&n|=;?C4wjl0JnB8+;jo_ry0 zK2M|7rwDDV3st|(yZf{8o`(=E;R^PG?V8-q?SS$bWy@>RD zDJXvIT~F9-4s|?Cr3g5D(K%7dgh-()v_kN&)tFX3b7~Sn**A6vfl+vKew(;$Q z`9`sj%DbVeLKCQUu>s=)ZKD*-DyN_e@IK1}0@w&DU&uV(b7;m|p#WW|m4QbGtu`IO z`%TFO&Y0XTG?SkXgMnMyGYCb^ZK2bHTGM2GvnJ{@l8Kw6c4=2WeAX;9C$1xQ-eH0n z8Y5e4cLh=&YvpHQZjpm&B;VZPb7Ynhu-b%zw$dm}FBKvsq_50V^va*EQ2G2MKweov@rdf{eJOTqfS#Sur)WR~1U$=56FSODsY;~BC zOJ-~wSsD(zD$$&6XlM>CGX+P{aG>t@By5nmR0@t=XyE>Nn-af;k+7d%9k89LnP)Hx z!@kUatzF*R44bbA^Kx>H_|`-3W!spF6vCAvg6srrRZ%yd}oXrj8H?l=UHc9M;6;CES;lH;oZlBVIGCjBAwb-*fBlP%dTOE-0$B&=+%E4-Iv` zvcYkfxbfvTy?!J2TIo6eTE#Ph2JZ^<4eX~9MGvtK4j7WYE+Tlddsh!;%+E8|(T982 zz(7>n5iTRjRu2lOR}ii>m70o~f2Mxi^0rLM12-gh`D(UpIYQq*dQHIYH zhYHodl`SeJVK((*q!H?JFVZCy#qirzE9EmEP%;}}(QV(jseK$AeF#ZKhwl$(Z}HjJ zDtsRN37I(h{po*r0MFvMN)N?vk`a-HM7RuvKF9Hy_ab$ z#YKc)P%n$eUt@a z!FO>20ts9gQGd&}w`QrG&^pyC0ByJvlh$0}L0d@<&2NtL*GZ79N8a_M?%uHui*&RK zns#d#40~i@9(FHLc%g0T0wo$du1abis<1aJt|^B4@aE25J?H`cfA)B_R;M%g>HNUL{j-atq)1(?qnB92b(I!Pnbs zQ_Ap@gmgV_&ldP~{02(bogpBl3cEpXjo=nvbsM$D%?w~}ila7pgM1ltnFEY+1+wDAZGH%(lii~+Hhv>76u*|TRL}4>&`GK!1xF49*(QE0>=eN z+UxwDpj6hN#qas3eFl*{nG78*-XB*vw~=C+JSb*CH1`oN3E`?-AaZ$F88SzOU*qCF z2zxoPJjh+un^!#LGNsMjzq4E%y;~SNAW*PIePGLoEbVZ?(gal`wMC01jHZyoh~l(p zsd@e2P4@?0%TWgD-zfa`^Tb=)eHcVddwJ0>mHQ#@Wxd!qA@A?uLLH*-s1ORXy07>O zsTAigE579wa!!<$`_L|dsCzVY=GE{UZQTo*F# z+-a|8YSj}$eswm-SmQzs+BYM$W^lF=i?MHhp|8gcr4*Y6R$Wr!!L8aFYrd75Fzwu| zZ`_nIe(Y$-%^`w97^2YG?>DnM1`wmrd0Q`KFigBm8_yc3C(cTv zsapzjjit-U2aLipNgji3sMUeP$^AvSsQAo-OSIwDfrhz~AjYSG<9p{+j|EK^u45za zrDEIi6-Hr8*X1V%XVy*#S|an7_viCgNGmge5~F9>1H8w3oEgKH zcA~{9dQJ_OtX6@tCCaBHZSIpX zF7MnPeW2}!h(mz`3fH_cq=14lnxkDvcXms(Xo8RWMQV!MU7-Ck<~m02#c7u{O9`*k z-`Ji0bWU63m@zpgI<}>X7O7RaW-3?Ud@){DZcHY5^7USJi=xQ^-TXtfZMPro#q5K$ z{lWq!+AC=TxP;<)3!Azh)T5kG65PMp>vw z)mu;PQI_Y#_;okBu^2PA5}PyHFZ6{sR+2M&T&TO(R)5s-EnVJ!s9=DNz*X%vj02C}@oJN2NWRI0tPF{8WLZZAn(i6+9!~ zU}W6j?brM*`c#Y}gFcsvQMNQGTfv=#K$4`suXgeNzGi5U-D=waKCjr*t`J^Y5HAcL z8XLKGu%+nK77L!Iu}NGqO7OkH<_YR?RR^n7snY_X&{a51&P zW1DI`_D2&PKALQNe*a}*_%fIYHr7*+)1EyH+7aK3lr`)FP3=!&`|W&3`2?sG?ToR} zeBe1Fu^Wx!bOl`JN|)*{VY3YcY8*$Qi|*CZP1eqC9%!P5abo1N4i-iIf+x$umv&A# z^T#{h;W*>|)dD?1-}lFj*ilDsZ44-I=}83Srm3Sy7I=ni+!e{zrkoNS z@FpndX83!gdlNYL3uoAa;J=+8q;(jMyB|J|keEQ`lci9c3rGXI)Gf93UhnBeY?g~| zS0KG%A4Hcu@eKs>BuVd0(6%mCx9eRkCB|*AvDk0O9ZbD1g-t#$2|-`Zs{G}lyd5?R zsf#?6QF2m>(rt>Tf4m~|jZe%%?WD+QDLU&BXMN zJ>3tnc{60&|E_!lbx@s?KI`z*IuTp#WT3Bq?^}FzW2kRd+J1y;OPRcgeSS!AUpR(wdzsh_TvbFHn_nW3~i z_uz!wJ9zKtF$nmoZMqV5@cS=^fn_kC`04-f@mc8?j&PcAqBcidteb<6Uc9r->dhNS z7oK{{Ir#k(Yc$v)R=TK^n5m{^RHGd^doc~xj&qqNiLd$c>?lRUGG-hw7HTTNc1n*1 zab|9s?zLasKd^RJic`1_7u19qwmS|@cDK5nC@4f3>DTH+v?k)z+7y)k`fg23_gScu z#4XUq9SX<0e6lR-sl}+)W3Ht6J_lh@?L!Ax!0Bj*e%h5jT&mJp)L$m9`%oI?tWx4E zT;MEzUK>E+DrDZ>P^gDOO}m1?_a6OdGrqKfM;R(Eb=>Q{grLFvZR^NyQO{s@2vO0F z=`9*NzKC5%ToBi`@*5B^cGVC=rS8@EgNfwbHk{=@++EcxSlO-~ub19~Uldc4@~UGc zTaF!M-3@(SSU3-Jx&qg)+6~2mhGYGGI?Ia!)wM92uSzTap$#zttgP{F)BQX2{lBKZ zyg9Q@H8Hik6j#<5p)~!`KETA*@(co37}fq8^+3cd{qW9+*7p$sz5m`w5p1mm>>ZIs z3GKN-G&T`!Zf-{(jC{ahjhUI5gxvAHex36b>P7mPx^qyczrG2~jhW;Q%WC>%swDx#H1wJ>p6C2<6s$o zb1c9j{nl77PQ3c=6(h2o#gP{2h0cC053YdkKy-v?hfalu7G~$nKP}26JZ#^gs}3`i zAX9T=5p6y}!FZQcR*&B2J<|FyFJI~;5I+vC1ywLE-1@WS3{$?G4^*cY(KmF?C-R-* zOLCOXF_BMl0V=_J;KRW41svwxw3BO9|I*c+>FAjl7EW)#Ev@ilr?EZx0V*X=`||@Y z2J!%zdVf9}cUwU}?g)2k_&Ok7j~f z8mwf7z^kEz_3UEUoLkTHq@EjFGIYA?Ugvl^H8Mr9XHh6twXfpsre1^Ln&o_G_mWU1 zW9yt~$)SSHY@NX($(kxDDq-;|M$zpG@XS|io9@mw%g43m08ItNEo4=ckU%ui1a>eL z<+v4I&fGym4zaQTo4TuMx$uk7)$@dkwJwDt`mQ~3u|xm~WMQrsYW|yz^;3OM1MwR%W9Y99bgQRES!q#K^&&$ zNrm-&<8b|H;Nko0!mg<^2t6*9o=-l|M(SPYMWnF2u|onii}{9Q2?iy!y6JDeitdPL z*qsf@N*IrudSM#>EdF6_unm?zM;}?AvJYxT*k*m|@{W_wW&m`+68&p}P&f&oM*5-@ z!uItyj_}}?^G7R6gqAYCaH-L(1@^ky*T>F6EMS1g*!1vj5Gja;8xe7m92VW547AGk zBu^?(zVL?Smn0wPwvUF~TLp2Hri3qz#bydHSfL<2jaOJZ0+$28wrPNG9qeh#rNxKA zo6+?5LYv-`i>;u+z8c%yz3TfJurl>2ynTBu3K4ccc@OJ3CJsGKlL2Spp0VfAf#`PF zhc%d^OAjw3_1GW_;CTRSg|jH)uM|LGGl2lGWvn)k)PkZUgXf-8^e#d^N8)~lSR{PT z73r*;ru2m3ik+Nq#GSf|YK0PwXkTjYa2PmC%hSANbWQIz<#ThlSee=uxGBib&+3br zLMelk!cdys5>5ON)gHdzN6yHe! zV_`mXl`_5jeVaSS4^d6+%nDwV9}PrD%bbdYWwh6LIve?`)j|X=ou{Tfk zlB8UQoIFO6p9&HhH?L!c!Nxq>x#iRPZkfI!B@rwAlUVAq4s3LU0*&fZz;lElFz+=wms{;<%+d&z1v&mQLoDR@+y zsrHvrDMFcX>F~g-psb?SsrG<6@ts-FIXQC-V=sk3oF3oceNLd}C%a9>NF>aM&3y#6 z7#%N_#C7QEv@lRMi*s~AC`I_viJw8{g6LmXIxjb#yl`4K!_iVYQCoBBvF5qEn)X+; zjX;<{P9kQF_9RW{H(390d(BdvF;UISs>Sp=eCRl;R{9-a@6S8-OY0jWT{_Ce@w5Rk zYR9j^j#gt;@0(WwHZIiI7Hrv7nE{nN;(puZzQ~+}@B7Q}8h)!nK0`_NU0>>1c!Y-N zL0*@Z2vKfx)`hU156s?XNG0(ey84wT?t)Klu?9fNYNZAMj;+z?&pn1%MR?-e90G1e zIT(c^3`jWn(dB3D{-G5!v<9+ZuM9!yO*Ot-S%Fxv<@wqr6}Uty<%0*k*FUr4>W+Jn zD2}_h%L;eG%+aNc1v4WD6G^)5>ip=2mJ*G!8=pwzJEcuSPp;0FY}pi(6y(}Sly0kg zuRQ&xNkz|Rm5x zk83rxIo=0U_wHcFc-WG%0s+&iMOmzY-Wh#Z9}Z41C7w(laECGiN8ZaI?$7I+d-TD1 zYs4E0F~b%~d2@CiI0J<0+h@Lh&c-fnrEF@xg~X0%>CB$fP#V}4ccztN_Hb&kp4}Z6 zpyCGotfxHDE$LLY19B&$I_4<7JKfEH273KHFvk*m6>G30bE!PUZqVV7`6RI_`zcY* zm&_BSmcG{N2*L31wZLw{qo2+`##7pKE&ssUYhC8qj4swz1*e%rsU!ukzruld4FqlN zf_E2l)~i0)pAeNoqz)FlIp2%rUj)JbtNw7>&6K# ze*PK@Ti3vJm#3B9WTZ)fK`T#_x(2}ht!^K|EW`Ir5|0rJpFy0p!b1bIlO|PhfzvNv z0@^$B`MnJP;pUtS{?z^<)yK8U_R4ErTsul`C9qKtX^aXRMo_@t)5=D+AL zTktygJqqwAkLR!Ko6tEYkjO`R^SXB^$;upOl}Dv~zIpJpZRe)a&M!{TH9UT_^o5)V z>!Tx(={Oe7a50WWA=6O})ga3Zl&>;*?Djsk(;EFr?^COv8FvPA1swXy2eCL2VaNh5 z9Ik8F1P)~SlgGCnJwhy~=oY1mxU?I3EE=n7Da5s7Fm#{Tsz=)~OJrhQ&{sa-P#!!{+wX+ymA zKv99raWKVXFjyi?QRB}Z-~9elxLAyjo@*I1wjvOeEY#Vw5z^9%S5! zN7D-|jE$Oj_FdZp&D8ca?cJ?X9mq)@OtGq2?~VbpBQ5KGkSSSJHExCHhZpY)e}4aG z5#|N|v%J9+l)xZ__?LoVLM8>%*i6w`CSpX=p|7HlHZGjzP*s_`EVpsx=sTFV3RPqO|1qOi@cVips^XoZUbp%Tb*ky4z}6L@n5sNYmrjkTW3e?Zs1t$+J?oN7><|Bw@8Ldl zKv=uXqLJxuonfLCh8JJ?e)m8-B?Xe&)@mbi69H*SFYImUE}d>49Z!z_5GDN9GNSer z{Qq#TYl4>WWVmwxkkD?MXliP%he0lZ-x5shtP+^5L4}VFg2_Lxb(BvcHg^ceocxfy z68zV1WfZ6ES(|rnhagtc0rfyL0Y%ITF8gHP}&rs5IMA;~31u@~-sX z9ZU+YEQGB${TPVa{gFk0aZbw}1`w&`n~i3L7*F&ip6GUxoXK6YR9~<=^!Q-%xn3?T zG;k4nG2ybpbI?EEy(3CBVF3-b_8~zahXq3?rAdD)JaCI(jxUeS*v5>udQm=tpVap5~r~ zh5fCL3EnSUtb(W$kMZl#bFbfbXF9-tqEojycsr+3LcR*_jDY23tyzAS~1Keb-tx4zinh6q~LOSpg3EijWgc6y1nUR+0-Dx!2K`)vdOq z9;zd)&$?f22aR#`&y(RXCvFu;LK$x$UnU(Xfx!04Zdy8PtdiMsKzTc8T&`HkzWyT%!-Hs*@S zXFJPZ>z(J0Zsm@;$sOGytlgq{2Bg5;*3WvxyMwGqB=>I#4#*I6gruv0w`Rsx;kSif z-xhXAMPk-JKMtWx@*0zeK8ziX(+Y!;M1sh%a?*!2)DTkkN^WaiLf^%}xon0$bM-Q@ zbh0tX(OOXM5`X=^mAt-?Jt#J)aG9xSqS)N8v;foPEinVB52e2z+3A+R!Bhneh;ypS zW-gAVx5GA@=j0xD>xRac2+!l7jdW@J7pvr?$+|WLbpVO$*4zpB!c9EdWwho|sWI53 zsf0jaL_;^$Th?ywV;fZwi~|{A$4d&ntjxaw_=-EK1!Np1;rDj{NRySx&YJiwzVAfK5@j%6X*rm;rx+dWGVS)` zRx@a9l_X5F3u661qwBEUg{VFM^8n#JISUn62g+;;&h1@&xy>Ma=D9~l!c7dj!un4h z)Scw|vskr|&Rb|&s&CM@iA$=!xmp(t;tKsA86}p1hy*N@o3+uk;G&VeW|Uu1DK3Ve z&%}5(`Thyi=f&|eX9;>g7y&O82v1V)uY!G6T)Y3m6F`M7AGS;q0fswU{%Sm=MHEe1 zBy z^FP_M>G|?ZP|?dM4m*&yne{k>FZ0W^bXq3*;za+87Y~XHBnPYb`F+-r@PbltyVoI! zQaegr?chQj0r3hTYII&sMX4md_ljorRGmd!$7scX%+63NFDzmf6 zp-(K)+9I(v#7c9}6p_gLp8raO7pG|(Xg12{8ct;KXyDu}TgqOH3u!(~5u*sMSGJ*# zZA)X}tOkPr-qY)pO)k;8&q`xE0UR2>a;60b&D-176}f+~;Z7a>?R%CdiF+T z8h;KH6uAy^D_ifN9~x_X5)YI4p|g9>C`0#YG13G8aQ+_c08TS8KqU(V6aY_4$h~*^ zt>MLY*P5i7S0o!ENfMn2DSD!OabkQ?qI}WX2`_G3FLrTxO-LS{cUaS}`2y4L2P_gK z&upntUSQTH>{32YI7I``VBpbULPoo~yDDui_{ZymoddXr@)>1w=EY;D(tgB504*aN z{VevUVUb^eOt?mciEi$g*qG#6sFcJ{9sylcdQznE2dh=+e=zN4nG_oGK6oe*93%3? zws)k+H|D-+5|7w~wOzCMgQ(nyPv?DdE1*3>il~wg@dISN&OY9-&0oySjxSL4hY?qV z35$R&M#lr6MbHC|78u)u9T4lEb+AgZb0K|k5H1KOlooX81iqZ{t@bDnk_#(P~NI=O({W;i16TWneYg`z-qQ|1S4{3ZpF&!N12GGg3k=Dcm- z3*#K@-L`1tpCar*;m1mrWfN2;KDk#2}Z`OBG`B zrf%g9zwF@-{Ef}}PyEAPaP*xrz-&?V1uwe&If1I6`QdGL@4M`>+QZF; z+K+qF5oe&Z?yjxv(qPJGRW{$n6k`-3f%q!5W(dd=^ub?)DGyqQkI5rizeL*k=Sf=j zH$8oP04!8^72L`cTFe{g*FG?S&$ReB;4GYl^Kkuq;v0xEfoWZwwYD=aLP|_lBHk(7 zV7MLog9GQ6MQMXv)Q&e{#^UBcLqgMkO~`%mLRtyRuM&~9w)RBZ$dlnBk~l0hbe=HQ z_1PcxK$_&2A8~$T3h(Yh8n5+E9Fo7>cRJ0N<38Tck@^y*K7vP%XMIj@SMUe^#bymY zAGXevMCzv5flgI8+4~rf-w)UB4aZsbXr7)h2NH0fELf~be?X6+Q;A9{LGQ)f3n;)` zmcD*@qLw=6sw`=jM}1K~@T9MDWBx<;%cbw$TfE^r)&2(9UBizU*0kQ-kwdIZ={}|V zk%Ny42@q54j&$(1d;TM9KsPz8T=C(u%1B+7qC5UrWP{8fcxiD~td}AA(+{S~3@w4s zX5Rq!nd$QZvoGw0`8t`ZzSPwoZv52#1#?N9ob<-$5?_5emrnQnIe*7^;9hxu0Sjkw zn*FlDB_`c{s4nw2x+|*igYHK7FMpO%yh91_ltc6Sx{UrqP}w8A9_U@LMZ;M1%K zV1p|dIy#6O%*1U1w3@dL<=vq2S! z(2WG5$l|Afwdn%3Z^ zVVs?rlPgmZGiut`_N7vUX~zR=6S;4(#%hkO?KisQ6u} z*u6r?X|TaUAosLMW9n~hw*>B3J8g3;)U(L_4B-j?FB<-TSUwmZc;fGg6&-qg{JkdR zl{!!%N@U-MnYeRN<{f>JLraa`=U7jL9|ri_b>!$B39{esXhc*(_k7&QYCPABff;mO5X^=s}eE8Um^GQ{WlH&Uo&E^hrg>% zOoRK!zyGHyR2u+eDacEm<YU6&8;?S69|1XhZ z;M(BH`WZKG{%bT9@cdHz*H_hzfcEP3KWVh}a7s9+ zzJ|BCod9(uFIwteJTw>QF&5`Z1V}o&NS5RWfT{A%cr8lXZfen+*Y?+QLCc1;9oK9( z)!_MOK@nQUop#MRY4UQ8kA6gEhr9e!Tc?1Ud4#z~bn)H`mndHgLNhZ}{K?@Fky^(~ zN)kS3RC$-{8J|06eBm#?ldgg2;q|l3O%td54fiziPA(l&QliJAUjwSC}|aPmW$ z%+|!(vcQ*Pa(&nVcXdSWEkZT;vOC_oru43U;H(Tl*g#btg6&i@z2qCUBYM3$*aV#~ zj1eZM2HR?Y`sS(u3{#nVJ5L0p{;*441HdOH*5D#fv=~oZ;l&dVZlT1*`v(@X?u#5f z$j$qFV9Y|n(`?#}P`ASgYWlF~U~H_awgKIWiVt^iTvSJSm4C*%^_s z#^7lNr0M8|V?0G;R)w?0RRGGK!D{gin$Gh|`MOdU&KM_g`fj=~R*e%}L{F@=lPMAn zVi{!tM)Y%2Bf*urTk3TNJwmFNjGYi=(kg=VK>>4TWBccgcAmGMUdMO?g;_$D;Ie_; zWNHVPodL_B%yNf&NvH8*s;!X9pB_I$%h9j3N4)7EBk zbb}-{9-89eT&&x<@;8RoqsdTK0N~Zi8Do(NM51(&L}Y|ktE{wA$!&3D0F0=!`sBfh zh}}@cji=$DMg)jO_0G+2+HiJ1L$6-`Yc2rB8~+r9g+Ry(R9aE`d9~-$u!==wvJz6* zxIF)giXeI~0ZyIPPcyY8GKr{ADK70wdL+!7siepe>c0FfzLt#T! zli-`!jHxTCk5^u2D)r?g=C=+i%cI&Y%C9kAe7txlV9?}l?xz<=mn@*A{0g$~kdKJJ zGw+{He$?|9FdE8<+9-vDk9`jm%ZIQyr6LbEzjCw$q{dZ} zeF1M?)Yl;C881sw`6%larS2r_9nigjaN?9p+mQ)5s)EC`F_XwZB+YMG=t~KWGk>Xv ze+57kFA=aW>)xqOoXQLRrNMAGvsH=ryD|o{rXXI*%zqxe;LXfsiB6>pxTFbajHd3X%~>?%5EE!#1(!S6l`&y;JW_-DM*bdATgN93T)D z7hz#@sa1aGsnA%@JKoYz@sP$_5JedYU6AcY1eokeif`@uDqjRpTTG6XB*f2oi-Pox zk{zogc8S(YbZ&8GAAWXz(m`uiLz-m+|nsu=GCeQvo&jNgEtOb12h3}Fo$7HHs zpHMCSdacIcA!k@4eQ=b5Lj<%I?X1zOT9>!{tChW!$NkG(OC<6bRZjtdTWja-?B5W$ zYIiPN5hSOAnnQRGDQ7(+vULS0aUhs)4$_w>9EZD@DO6H87@0b#yKn(3s3BB8qXQz) zFZNG?Ghein_}m*~?`=oIWqq{-NTC{)wpxM#w2 ze5rWRH>6p+P{;OCn99yCoHdBl8E;tFQpX%k+5Lg^Kd|<{N3P|rT-Ve*nNi9i*lZXW zSSO77r^q#}gFRz})^9(uRZ%@)&=ZgPbsUv-kRIS~J>o?8Pt?8rr8{HtL#qs;T^c58 zS7x@xmi`E-ytChU_{2hUHV|jUt>knZ$ z8Mg1h@Yz4*`{F$PKuawU>vY0{ptekg=V&zAHF(}@gzPt7cNYL8%KV3tO4Ja4VMmp{ zM(2)40co)|0G=6GXRF$rlaQP1ve5f$Mi8M;A=iCtd%5`}g5w$g#qrs1To(`2ah~{h5XTHjgN&I(;paC#{7B&AKPk||r23wi z&zV=hW>mv8-DH}(A6-5i=jY*k$9n7c$>o{KUsl(@K*S-eV`rH~UCjE44_c#+=lcoq z(^piOr7+?d)Tr1NWA&kwtxNicHLHN$K0={4kF2D^gD7OryMd}bYD`}C=ElC7+nlO? zM%ZoA94J>1(ati$4%y=0A$30%px+tE6?QsqOCv%qA47urhXHSg+n`9q7lg<_wSdyb zS8aiia_dsM)M({SlIa``!PG(~SZ;zggJKVhf>gdiN8gdnq3BBDno^+CrLWzN+lRsM znBb{8wrdfC%*riHp;mCHj|r&p8Sr*~^*wJnT=-C}X2k;y_&9|^8mtYxPbRIhHrCIl z-m>-4pBni6LViH}IdG-$OUJ#Ub176fO8vqy?T z*Q>}2iNdz4B|`($PhFF&yw949OoxsdO$`nnGB?c~8ms|lertl(x^u#<9YAbiV_j;o z&zXF4gt}7j1iuZfMlB?yzU)aK!bB@^OwVmTm&&g) z-* ziI*V5avmtNsU%l-!kFD6Q;xEcR|)Yw$bmgN#I;ArcjESx!P54G)Qh`A=AyqygBL(L z_Ys;TvYaq}CZMD;p_0<=>x!*2jp)g#V53rYx$MlOJ&2RovC^&39S&C;bKB`5pdvxM z_%Tnd&zkl14ezHXx%aGESk3mcCm`=;17zvvn%#OT;uY z7uu-8JoxyA-VbCs+pUHm5=cT~e2GM`DSYTVf0@zVplY#uGx* zE7u|O<7JufmCMUEC6dY7#R>d@YCst1{QJ|bM1^9$Z1$@>bN`Z8aqt-3Z$4@66b1;yfCoijEyb4fcDr@O#|_n&wce(XQuY|YiP}d7I8sp_i0>AexWtu6PzZz z!0ZRrViMP& zhSlQtE4A?&bsMj}Mc(ejU9wof9+qGZ+WS*pTw_PYO4*45VXI0U85|@ybknWK$;h-aeb(&Gucp55@)3R6gV#V8JGMHKnW@_@2zOOu6tW z%d&LfywoO&HW6+{cJ3S9YXxC*1@+z9^9PVslwy)^XJj=`-E(kdNQsZ$gC{A%XSFpi z9MicesbX|m9&YF(o#pU3eGbli!K)k08bCi4K~%l?X|5i(0}yc;robxBE+OYg?Mf@{ zbx*UdLS`A+HJ|G*_pNlgsU9@Rt@?h;QS;c#0B~>o-xE(<*D6a1cwM*R=-bp-& zHq^rg;SbOk@VEl;SAkaRe1h)Q{cqjf_%<;7qm=kk`VFT8A2nS;B2Dyn`o&jcQutW6 zs@l^-%Fo!)0UJa=5VDE$b3B}UD&vLA*;GR}+vkn9h`et61sfCw^%j~=4lU|MS;Skh zLz=!ZvyN=s^h5IYHkL_!E!Kpum3tuTY+=E8&T-U8^Gj(Q+NDsfc8*Wm$lEtXZEx0{ zS|PMs{u{8Fx1fxM1>#jq81atj*tOF(QgK=oie7DK=yyxCPmCmQnFAX3B`g7HCJ?p1W!j4!UfGqngs6Hxm z74ymV6en#CIzHVXMtrc`<=dtGO37x=JH_6XtCv{WTLyg%WP4Jg29#N`{U;BfIP%g2P3jHM5zEZob zr~38FssenZjJ}?|<+t@*96FmS$}AA^c{l9UOvwo=*N%<6Ekdrr9>GcWh<@`b$LRq-u1 zP=}Qm`$HS-5;mxAW(%w8p$(y-jpp|KSKOUTdO=;awtB5{!evTctDWe>#JfM)vat>L zdYwkA{M+JB`XYr55v6a{55ledL!!SOF?QNQ;0A7+s59nxxzqGQL{Am1xD5^+fa8AR zF5qkvT0_W8ZYQ{Q><^-K`&Lv(pVz|&Gx~!Z1HMVu{H5hj z{fbAF1+sYjTysKhQmhi1#va@!bLZ3fWAzMwhQ?F~%ISD9y4up8z97je_6B@fFppT0 zEQLmZ>0rz4i`8Hxo~qJ!?b~R_QEJbz5bEx^NS`&8EzCa1SPYn!o1g3#Xyet5j_#kP zSbl+rx}&`_GWUo_wEOr&{gqqzA>wC7lR`Ik#i+gOrOu|d&xhp9fKPf`w(ur)^QGvi zDBgxB@Ch9U!ETfA()LZILy6Xbfuh^0(oG~86M~uV@CYj;59#ltgU&H-@c?^4?By5u z@R>H5)||12ndDiHzbFEC7yfaDgPADzSAW&ug*9eBwh!biI>s`y0{(q_e>ul={gC7d z{;O=KsCV;~xHg=M(gL4_pRC!akWxcXs%pZ%RmE0wFk1)9OK}1|N3GcF*0Ty)nCvdX z=6{b;z4}|S;`RZLsMmu(ZEqf~efbf8MBh)#!N+dS{#kG;6%Hfl?X#vgv`a9AkQ za4v_gRFb(-kKcL(oXlli($Ik_5BJ+rLP|=l`>ppiiJZ7mcasxFdX|YMzsXLF5*bFM z+{TO5koTr^%hj3pwA`xj9V(FO$mxCSgfPoA4^QJ(ezQVf-CtkNMZz>PK#js$I&(`m zK6lqWjCR0@?=W~@lkdfeq}#2TX6UuC@QCi0q~~k~%%8$?lwPql|6t$U!lX?r_~1|6 zMH`*GYwa)7Ug)1celpJGolMcw;2Md5k7D9$fQGK5jiX^{bLCz~!z0ZJ|6xAZ_ z$c%giVw-)bGlAa9y^I)|zIXFN=KN69h5Gdob4TNpl3?@5YOFi@uuzT-bAQb>Y?3$= zH`zO+jC1J}a2uqIh1*eAEzxV8p)L7|?3f|mjRIe{oN7>-UsCS^KP;tS0genfUeC$- zjx=#CDDa-M358#*Dm$<4w_@N{4Vx63z;P){z7kf!w$YC|hb9&tQv~?$2HdlXFMD$| zK6lqq4cwfm9j}S5R)(2JK{BqV#vRyZRc3Ru(n?eNOJ>|^^Em1{sIty%1|zHI5XQ#zxv*7 z6Jh(hGSS)zw{H*A6SZT%J%oL5zZ%M(OkUMxq^Wmq_sZg>VFAYyW@wnWj^Tv}07Uj~B8bhY=o{`w8 zn#*;9Sl%2)m(UzY&`$u_?KL;ECu_Tfge3fAl1%hXpEpLtQ;#nV8a#Xd9+ag8s7QiZ zFMU(Tp`|wP-s#}cS+l?xcESNlY(y2~CT<3VbC#4>Ur<}6VCz$ID)k}Wq@pE{P!y zq?4ece0GAoSL{m7yJCD3a#vU1i$_Nt;(1`5^l@^4^`^H5x^aAw(E_sC>t;u71p1Wy zin=VezF=~c@Cu6o{CJ`d`Muz{zqmafuZ$}!3))n@i4Dd{NUJ0tPOeNyT~^gNqL6%3 z1s(%e{1Ab=ypaX1a~YaFh280#+s?RqS1v;d?a{5*ZRD&Qcf_C6HZtdoiaaflIIX}o&t$=o*o`ygYgPZ9MrF{L>vO_?~* zXIBV9WpTF-jc zo8NY)d`Q_8-O5#yTcJ=vuz35hJ{py*WWVz%r@zCrev%{ojINf$Cs8sC=%P>!aA~W_ zDj>`BL|D87)tY6AZ?0&Q^Owsv%5cef>J+mTuUNfisL=S?ojzyG#HH`Yg{H@7hgb+kV)+cC%L4%KiO~Bfd4sgF$7Ja z%V!aGe5DYrOjCwSSt&h*JRT_{D~{<@T%?N=d?B7b8k!6O%z+2BUHj0c8~2I>nzRyETOEZ3n=?fp&Z@PBe=z$gsjB3TuQEEBZnZb_zKIt@zkPFJ4psQ9^`l8aq zq85QH1{tvy*#wM>S1|KK%Dvb?lfIdK5;MzeH6>9<6CL$#k7XfrnGsXs(E}x(484T) zk*o%ELME$AJ1aY8_Mx0~^RxuwjEKaKua2(uocb)!U7Z)ZC>Gv7vRW~`cpX(g_ckwn zZ7)Oqv<6ma*{S))`t%X)$h;HFUc;D;haEz3AzUx1sly`*p#&lyn3_DTT zSm@y-nx0wB=t_~Md1rZU=8M{KE&GYqNV9w?okLf_q(G5+-6C9S)ZEl!@5q@dRvf$GJR{AswyTpt@CED644pt`FBO z*3->?XFDOb!A&rU&(oOYW7)>?0Fdm4@FU89+EIGc0{ens_(0KS%Ckhu#38Y&a{ubw zRojB>JY_AVMD7Z%u4R-_j|)7I&x3<`cn1f|QsT<;*HOb4ebY`dzUODu75X|A zP!HjI*Al`u<{;I2Gb{-0*q#b7+gN)X(J-?O_<}>1(1rGGAL+^tEy#=%1GtoKj^K_9MOd~Wl$+KV@B=taZnKfiod=A2v5-n`` z?RL2IQAC1Xg6&jgKJ}3byL=Pd^~XsXU28F&XSr+~M!{ zC0k{LcJO`e7y8xMeX7eX&4(bA$P^!k;g=TV?}^V029HQ z4i-zyNjlu|8RjEGgwwh1kKM#y?S+`{<)c z34irHfNtpt;h&yLV3+OkgDSX!g!uK;s#N{Xyui@G_@a}NJyoc(iBl0(|4=$p(`6+e zSV#KI>Nq0VS-!&{8ksrjR4MA5nV_N%|DYe_O;-VjM4rM=&&@-vGPQRhE7`-aT7*em zVMf})w>3R?M}&J{U4Ea)H|$KiX9Ute4FK%&v>!3whmSzo`N;*29{E5MBhBH_pzrYe zQICdnBCFH`{9Rot<8NVY;c>-=)si$}{KI1fV(j#w%oi8O0LpxCdDi^z%hNohz-Kg# z1I`6z$YR=Mxfm#6logx<|Aoh{da|&`1xFc+huW~p+Ho*fjhTv<8Dkg0b|hju(s^KL zbfH{sA9tl%X?aK>?kG?SD9@uk=f&$iP@Q~~pJd=Dpm`t&+bTno4^CT=b&X>9KKrSn z%E1ek_b8zI4QG|=>-MUnpJ8L|g6-RyR8sZFT=i&JH8Wp)Cbc$Lsy!A}5L)sKs7XLh zVZUE9jN?)I3SQksM`XqVirK$oNs2vJ)*Iv;79r`^(L1$iy=)JK@K_-5M#>{6v*2T+ zu!6I;+PyS)36N*tLUM7B_J2@LrYx173fUdvsu_}%#)(97z?BUUS?ZM~pLI9Z=M-o4N}UkS}GqDD@F-kIAyYGIkw z3g8n#_`rN(xkBS(#z9UlHcke~+?z{EA*dGP*SW9HL4pTV3%els=`OTF>%3CU{(-dlHKsj zR?b$sOdx6g_yNlRfx7$KA;E9gz(0Xi0mdG}yWMb;36e0)?bAerET+j+L0yP2IORE-dy$xX1vbfLtsY{=>Z2P&$T|clu40A>eY(F-MHGl%XXR8~a|06|(fK z4lpfiN?aOjEQW!;+gc)!@=F3@3m&U;M>@5f3@uK-v$)XAOK3ed>W#yKT*J}u$z1@_wBr1#w*Y_WYWdYMz zQRs!e%Fp{nmx72y<*Zez;GHSU+dQnVY?mrrjWs^Od~E!LZgrr-HI)w~xrPWp{ zRUnTGYD#qR9Jp2-n8_<%g63MR_o&Mr6Hpcc^bz8qXQSn^iPz|#HSvOVL0e1B&Mz>y z7KgzUy+EkUUa?^j1%%41Xgu5;WA~Ssk?_70D*yZ9$#X!v40QPhyZU2#c**`rt1Xr~ z;(sPUFnn0S@^ObnZRjKeUUu|{e8X8U?sjwe<1d2qLB|adt z22*Gl%%lmPO2S%94{!8;&|;Ws2jGDITQBcr53hGEb=-Pz`_FZmBJ<5`C20ZBpV~eI zE7Jh|sr8dUzaFA$~ON*PmJ|OV~wBpE0{?uiyu-HhOP34 z{G*nrfKd7NFQM|kBYgg)P8U`63FQ~Gm|(F5-K4Hu97UmL4MazedNqG9+x=r{=A-jB z`%=CxDbA#B^+Mbu6No6>8-&Znu&ox*$*jk*^x9;rKU!$2RG#$ zyGn^V%kFlSR-nb4T5ICR)q2N+p*X*^cme$vOCcZ`u>Iw=#ic^9OXBl(r)mxdI{yJ@ z4*X@O3MdY_R3b4p2H(0DCU)aAr*=Bl98TzTpHw5e8Ygx9ErF<#&CSHM zVRfMs3eY18TJ0EiLUIe@7XL0l0HNRvS81?JJb0UTXAYnSlc;)oZoOX9Y_uV z#QZUOm<||^wpQ}qG zXA7@Fj9EyT#`ya=vYUZ@bX3NhM!JR(HQQwS)(4qB-<0_6Yt)dQ$4`WujuV)4s;YoQ z&3$uf#2l4N0LZ{N%;oB7aC3_jKqX?2nF3@?GKXY^P3yaEVS-LF`H7B!nvz2x(0yEyp5 zO=~;&1c{AEE zkmt^I4q55>2jKu+(SxqM&{t8Dc>n4Zt;u}>mW(uapdZw(%Ly(&blIH;aC}!OCz0&x znuth_6(uiqxZ5*!3^6ka(@d^%4_IY9TM5tu(qO>+FtN2?wpKw=iTG!%%RE_pv8+*- ztsvZbS4=ci0WSgD2o!P4oO4|rbrG`5)ms+N$KVNt%PuI?AYn4R;L2402~KmB;ny;|kY42S}KrsGIR<*Qsz?fbVkm z>D2sA_YsHPJwYUp#y$YjSbEfTEFKUai`NZnowYUzs{**xjO_}3rIEHhgjkaxGBlQc zZ%MdxFvP)X_rb_rn9Tpg;RZTD*Z^WKi(&vM2!j+sO6p>?+{1M*!NVq9O~*iqUqraz zl^@W@J_7n!*=n$3u13i+?q~Mo4J&HFX?|HJJw7@hqdsN(ZRk#XD^wNV$s=xVn&lW5zTvLs302{A1)pkm`ee z;Rp(hM^fmk+_GA=(04Ln4{V?|7;Gq{v;C!tA1l5wr zUG$bh&i0%8%pGK7bsJoa5bj?tJ&rQkoo)cpH)damI7+p5(dD%rur$pb@z3;mTX|jW z_y041ww6$>#+mqG2xx_etWnzW5wxAwnd+r&#&_;VfQ(a$aS z%+geuNCIgN(MM6yO|uH1qoW=4j=~Frdz~nNxYVfWD~J?tcRqpM(U&e`bw!VnlR9x$ zqFTVm&88mQYwUTBmd+D;2L*Js#GRFv&Dp&*cc4&(cHxb~Jf6_C1^~CD0?XXt@hI1N z=Nh#rMdZQv@F?0;$$A?U1F=u&4#_WLg%M~UImtjZp)b3x7E(9ok367Ayb0bfhS8S| zAG{|kD`Ch~M=uo#A}A3_B+c-Ua{tj%qXAKFVPO;v9&S)OXBiUMj$&dp%3#oS`;AF! zjow(j2B|7L=p4nI`%p;AZIpj9+a!k<_|h06eQEo%7`_#lvyx47jMT;eap7MLo`5IH zGy=|F5vMWx&|hXspbcuruLI*!st>ZF9fNver2*H6_KqN@62jA#9F@-blaQ70OMh`UCd^7ThG z?f@^PDN+u)&n~Nm$b3xU=`wlwuUTEt6PgU+doMgb7J1AO1+`#InY^{0BFma%leKj# z{8LP-K_%juLA9OpTLkxl7Vo8PlrC^!^86EFq9UmB#Mrq`V)Y{s4~M0joE=oFV{w;X zz`Z%@bTNrHKTqy=KOFQePN$(9pq}yyk44uHu}doTvh0vU)iUTMh=dF&*p*^ZP~Aj0~bLOVZoGMi4zBz<$*OPWSJ!MMg_4_ zk@Ua8#713}4(1>N>K@Xfe)KB=t2UgbU-|JrL7^BG)uqVl=0F#=Xj(2(J%@m~=cNS! z*26!e04Se0%zOwZUc+s8yg{!B`VH^>6MUeZ1FESiJczuMLfU#j)WLu%=PxTBvq{B* zR_5Vxcy;}#EU5cdS^T3b(od528#;-Jo0z!j*hwU6j>r1l|05HY*t2`Req|B<;qh>O z(bKno1}SaR!|hM}lp7;9`{^SaaFYk1B~wGQk~`bMT-5dGhl2b)Eo`iSe}Y1RN>Ov9 z=?akRy<)}34a)T}$WSfkBrH+EdQAjSI972!@Ywzp**H#p%ClbKU48%ZpScy~!oH|Z zsTcXw#O>8Y1&>qx&GicCy@2e?{AB6iEe{ak&6NHVV^S0#gVxlQ!Zf0;V1UrlISfG$A)e{v|AN%pBpuEZfA`r&kQkCdQcbe#Gl; zk`gKQ9Q$KN;`XKX&IeyU8`bYYt|sp~1uA$zRu+?Sx!$RjbdL~`kjm#GjM>@FimI{w5npEWv01IUFsC^ahK@!Ph|t|U%OT` zlvVs+iU!ck2^0-L0+{p^V0OBwS4NL+U&r{-dB=C~#8>Rc;{Ozy62KV8MRL@Of;JV> zT;qQW+cA3l)!d<%Vw@z5;7TU6WviY3e{S;YAaUe~!pEom3Xt4l+}}9>%*EnzZ@b`$mN;wgT!-&8UI(5N;7hkCB`&w~G9DT4?h}n|ieS(H?4L335sA zB}U0bqsM`;jLy;P5d9#?FALN7^5NI5-#B=5hcqNcd2G2Xo{-=Er{9;eqb#sqTqsH3C$XW1svbJbsNrek^`LeUb_QqY}A_f|y zov)AmW=r=iIfRAPz*79kz^|Ig?H_XnQh3&vN1qB+R zKqn=}xn)Zzk5%ws?qgrDs6S9BObftP+-nhCY`8~IxW=FcAf7HMbN5|J{FNihgx=AE zDCBhR+VtS_3%6SU8ECFT6*PN60^n)=>81-c53n6oE7B@xntcY+vvjNSm;RtJx;jM{ zoH2MkF%ZxJM@wrv&I2M1CFTXHBi?%}TSC!0)`s1x|ANK6?c0i%a~5?aq1=DMDQaJGQOgsM%)^hXwBk<$Ryh{sP`W zL6JrpE8HoXyC5GNbXVrV;<)lm^0KZ4h&t!3h*mc`f)MSeAFWPV<5hHlb=jwL^wmEh z(jCCVs&ngl)TqgOE`AoTp)0qwtDim^;pv!$h7Pam7rXglpA`3WK7?% zr@oqGIuMyHWx#PB)>O(=;UX9xo=%t#%)B_vn{Ep!%--wVVz{#AlyFDMFi7M~l zpt0a)1G?1XXd|4V2ydkle!fI?Aq^}iI7FY)17cmZ%2PAsbl78`oV-K5!B(l>vewDh zOp9@Vu)*%^Rp;TJQ?=)P=nh>Shi8Lx_E?Juq29GVl{ea&+FyX%5hQ0fks`qK&_W$3 zXLJw;*o|*(@X4@77>n@0;Y0l9?#PmRQx~&z<;Pq>X4-lMrQ>gon~(z2CC}kA>%{Oo zLeAoT>YGSIrjfI{gU!4J9PQD*ZtqR4mlim|6>w{}|IQW(| z19eO<3g2$E!7N_3z9kWSpxU;kRdEI(HHIkZk}C57xhNrq4%dW#RkJ$V+dtl+2qM!hH##&{CyiDkONLv9t`ZEtsB(h5fjn^x}(^{!!uhz*pqyYP|i=CJxt~6b_(Kj#I(OJh>@h{;hT zdPz%_RM|!6b&uLeu0F&;ZcF0A?FuNI@rANV;fLJ&L+-v`IymN$z%SF10{=hG-3T1x z$YFK@ydS$PIGejA6&MWKNGfVP&EALPEua_CW4|34W7?kob?OB|aXDb%o88QpGBK(g zrNk*In($p0cTi;wLyEXL7Apd?`2Su87yr-4UbFy8l|u=0%E^+^7!2GM;2(fWYWTID z#Ik^|GWR}kT?W_XpO}gsv`c8`;rY)d^$eVP5!|sRlT=1lO%y^wJCIi>U_qpWQX&m%@R+A0qIJ z6VKbuOO$x}km*aYL)R%~3vEPnv!H@k6I3HnJ8y^9; zw!i=IpSDb5?E7pQ%`qn*%G!IkGuh)itXVEm>92EJe*MCwB=c9%6p|xkXh+{|$Q?eb zeOcJ}k0V~dk77iqfW}*qY=Hiy1pqaq|Jm#G|38@nQ)ByoihSY-M73JD+ zcb)jb#oK>3Z5sPOM+YK-R0^oPZ@DTS^*xZg7 zMp#@T_Ls*hhR*o=()+V8HLOAqmi~@Y^%rR~97%vVtOHXa0~yg@3;oYpn~IXk<0Ad1 zKyZ{aqg1X9iW1-poWNn0%Wx^N_|GSBfLt7NGo5Suxz#0dVVuGgQAQdsE&C(;U`*c4 z55m%yd|ZLW%SFI{J97lHx+QKdfpa(iro;^(&L}NmmZmnC2lCaFx6O zMMeZq*e;Pu|{nJWnp1s!ELc z`s>v&NhMKggWK|Q^pE7*OY>iD^s(WB(_4XtKf5GFRk+9rT(By7*_)bfBP!Fi;GNl1 zN3EGJzRB*A=<{YLPGUd4(u>^EFXsma4Vkr$R(6ILf6%+Fw^*KaRH8v|p0(jcK1Nf**qmVGu3D*zct&I)~tF1b*-<-U|ZZ$x_R)nK=osFIW&Nr0>x7$;x^ z`Fc6K1Z#_UDl9e5;WQy_Un=tz7a6&qs#hw)AZy_lNGC3`B+ZXe*hEQzs}1gM4HjCi zsEU!FNfSkbK9TzYEYmdfGbpp>&Kpy9Cl26Sq(&11$xyds@yvvyD2m42D495L=5I8O zii&D>Ax!ndd(Zxscp7j@H#nnJ%kEGs4m{w(GOK^OV_UwwQW@yJA8G=Ir2e=^ zE5KmuLB4rtQL5&H&}{f|`(SWA{%fgC&*SvWx3@5_h!m!`IC@g2e==NSEE_J=1>n z`}fEr`ZBK~UHhIoI;;f)V?;+r)iUHU$JXqSO!Rxw*NwCOMjEhh55h|!wWG4tZ@+_* z6dmpI6m2Xg7av#RKDxyD#e;BMp(|K_NaZtRf_<}^-Q4?JxBUHO4O!= zmW?!`pu$Dm6;?mAtdMC=^=HhtZ=AMR8Y=*GBmUG0F(9qZiux`>0+9}m`#(vMN1+}& z>#V~fF(mw2k8ZDUY4Pv%)>@7vTGjELzZ*sQBT=hGu7aJaqp~6=>!Nz_EzMfuNbuw8hD)O6NM)V`p(YO%FUO#&kjyJ zE3zScBNIg;C#NE&Cy1cq(VL#&=tk(~)`dz|U(z5Fx)h#UP^f8rB0+H>e>OAQwjaOc zQfoO~Q8t6VUU}^r+enyfGA?{(t&gy>6+VEOX*E1SUwH&)syJIhW zWLgiYUHs_k3I2tQh{q|t`yuw$fP(;x$<*!qAQ@gbpT)ng=DB+U!kyNDJK+TK4CT)6 zx*I5bvJ#S4T>>BNi5-lzGfZ6&+S&6s>(D!^r=`sTZ4MO%UE(Ur5qap-_jf2gHCV|7 zGPX`n434udjQjbbu8(s|;Sz+l#9xJRYYbUzvwIauUy1Y;s{L?O^asI_IHvVeB z#R;htt?cly^4c-E7C55Y0amMalH{g<`6B{dusNI3I}K&%>?+SO@Uldr_}w?R8dAZL zNyyGM2anGbQAH)&pALkbUd=xk+e$vcToQG0=&1|_Z|h<;L`SVoa^U+y1m-999eR=B zRbN(KiMb^Uq?f+7Ryg6aoht`7B(x{0VBa?@@meqq-;NXd69wcy`Z8o5kgs3W11xakqge!C%V*q>jTRZxwP&ed__l}hsN%S3|5y1X}o zljbH$V#!mmj}PX&Ds`LtXBCPo+p~#iyLH8W_;Ku!3WhlZWGdu}?Oe@p;o=M&;#B#N zq|o4qhczkvh>3L$`5e*cN0lYl_hxS)x&K``l%tr^OBgzlzH{Ss^;^D2GAAEwjf8%~ z3wVR-b$=N#ky_%8zH&c2%%wnDYrX`0kTHw;2gRH>z4Fw~^TT&&gLvMz?wgl6Bh)P* zkWsgvycgPaSKrHDw}R#!7q5nFl(xQp7?)wr{mf*?EFqChgV#Nfb2=$h@rggjQhcBD zS_RAHgFW?=>SEPg`(|yb zfk#Um43TJt)%?%P?*qXD5#A*dv+ouHAG)pEr)F2z+uxKlJte>aIcL9$pUjq52d2~g zyF}lI*YvTJnbe}x1YqAf`t9}NM9^d}Qk1uCYomV)`TTadd2eIG!gM;juwy*9;eec$ ziz^6M*4Q47H{pc+V>5%cs+ym)NLogU_V?}I9;fI(jl9heg`OL}Q_$@}#JxEx`b>=w z+^yJKMRqOhg9ndn;`{a7?vU;DhxU5z*9~G+0cg$Hb#qCfF6V%z& zaq}-x)E-biW}><+phapnoc+Q#N>&z;OhZFkwmhQ%ZY))|U{$PT(%_^J`|AkD%-Qs( zshS?-@<-FxZPBGk8Dn9q&LeLdygq(elAWSF|ClwTJVp`*9mT16wTtPa!E@Yn&<5mKe z?2mL0NF3K5M@PVH?Y1?mBud;tc2g~H5c8o;YDH;^SxVI(d2|FSXjvYIhMTawE^@?U zh+;I4+DxoP-}()AZmD2mR9&mTv50mYb$w_%nM_wm7& zkheLQBT!USv~jS>H1!(iEL59Vcbg_DrUWmAA7&|TE5$J3L_Q<#OoPNdow?vgy*NFw zIJRTOpSz!}*Tyq)=Wd2#M~s#5{6Z`a8LzAVmmh4o$_)5|xrBS`0GWBk({0djz zQH<)ypd0<;W8ade_n`usr`cL$_I%mM`|)@ zX`EbTCW&ZAR$}y67i+z4U*Va=D>=!Q+I-&*O}9k3z9xe#-hFwtoE%f<2!`j&Fy^Pr zi>AAQ2A;|Dj`q0VjW!Lu=zurV@w&~jPt}%Z#L0VS<+cg2aLKlSOI4BGKQ5kR=mL{$ zZfP!IW518X6fB_1tsgd6u5|;Oegv8D`r7_VC!Vr-3Av=j+FNCQ0rH%Dn+>N<#zB!n^A zU~m2?84OI|^*t0DwaE?1}iBN&9Tc$^&E>2I)>U(oNO@K*o zj{{x@xRIE8>x{7^xd29I%Pb4svT&cVE!q%2SFDMp_pBz{6ZCvLD9urnw z{dId!aoqEm_l>{Lzbk7BLvoi`^g0_n!DS~Um^Wd0)7AS&c<9dzbDqJ>m(-bO+YWFN zTrh<>9BV{GMK-z?svB(Qy03?$8qQ&%EgWr%d9FtD&k9t#B9fzvEv4T}>P8h!ya4k* z_Su1!K?}puw0o-@I!hKMPK#Hy#$)x&aKX@WDwtc+YOIENZx!K}?0FUh_6;+{dmMfn zpANg|FPW~KE#@0biRJIKLyp2F;<)Ch(hPo1qj5H;J>S?ur^C1c$q)Fzs$k>uI9p=& zIcJM3*2*MpVbv+~yWs)vCKKpR7qu8a&4^&q4K#~n-0n~lA?ccVe1;6ak?{13&PfQ? zwlTU_z7AFu&j^;AzImgE!=ksM2pmTb*orS&YKty$9Q3IA@lab-LzM zNM&Fu>J=WO`(`6w%`$AqJYZ8dgLmi4^}4APPgwQ(`W`fN*?oz~-*XjuV8UuV6_t3X zy5Hov`fk2jz-f!aaLABF2al_IIeM`HWpp9D=XTOR4&T?p#)O|9(qT;YfLXCvL94^5 zza~HN>6tuRb88P9qBd}aRjX}}vfIXY>#!^PbtU0wM_#pQ0i>HTyMD}ph8Ov`?!(*aHbmIPYJh$_ z|2eqYw<3}NuHtT6!=*-0*Y(E0pr>ST8RgJ$cPzI0&GjyXWz%@4e@0oG5@JxO&Ajr) zx=ClB^wTXJpIJSqSb3G&Ph=AsF3P+w$H@pj51VJatUQIJ)RqB8loaM-1qJ* z)(hSOsl!3)@H#$!$EUFXA|B{#ctgPA8cYy(a+ll#KKwdoxLXevTp)lQ%k7yX`G;35 zj%ukRN{;04Xcr77COCsllEbQlBsf8^D<%gOdp^&@ml>H5)@jn*YPY=UKD~Ct;O^?s z(lZ=8!a#X5}K-ZUgQS_j>kX06CY6U%e5hTWD50Q zjyT|3APK>BFjt|b=Zl0~If-qsU~X>f`&MR8Z#I&B)lmG=x${q=xASu=<0V{M2hi)R zeFL99`EYoSX`Y|c#e8UPD>FMc48Je|xyt9AvRAUQY4Tf^$~ixS3S^r;!aiScJGkD6 zE;1@K=`$B=_3_{uBPmWsMHenI_9Tl#KS&iU z$vtyFx9z>I$5p$$<@xc*aUIvcnxEs?x5!kx=ut;bj>Qq<7qE4qjy@-kmP31$LZnvg z`8{Izlfej>YBzA(d60npPYQhec8~fus?@{n4T`#RDL0U;@wpsa9b95HSo%od9K|A; z#hrO2Y>8E;E60;%7bIba!}-RF$PRO%JM7qvxMb%K9zBYs&SQ?}{v&O;bh%N%L$}l? zB`vGiV+Xe^v~f8$|HFfqQdxudqQ3w)laBjGuC2Hi1cvW8yUBP0H+9ApQ)3v71SgLc z>XV=-7m=_qrNjNoAX;>KX3o#y0&1|+O1Ib=+1M9n$p(nG(kDc}V0ZhxI-DyPe(X?O zT-^BW+eg~{HIR0Y&kwbmqM}oV&0>Z0ujvTDGQp+>hW%*oY#KV&fDiaPCY`b|nvI#f zkt?I6wk()U++4?&CE-f1PB+tgcLw3OkB%45jqw$q@er0dSh*PK>p#!f)tw9up6#7F zIdb*6EAAS@?@0{S*%fv)(`3o=o8aiY;gxRf;;SHmkLo6o2oQI$v2pyK^^wQG*Ilks z4gz9(0=e6rm`OtC!)th}hovrKWH;)N@rWLhxCFJF0S$gPGFGmfkoW+Oqzvhu!OyJ4 z6&16#?RfJJAknm#Eb%2#VcfwiLl7;&hn$+J8uSM~J5=5_Hvi*yo^RBsv&i)H^b$h^ z?>MK`r}#V$ip?j)sC|XeItj4$ORbNIa*rdH=OWimE4IE!l7J`jlYjLVdzu zD)-y_n>IV|Dl{$f3wFs4;DHjxH;3v+Z^~D(yLoWs^@Fj`&u3E5d@8$ow=&J(v%Ji= zyuh1Q^$72`mMo)V;{#P55ctLJ1I*k`mc{P=Bdvd~VciKU^L(2C1kc9)CJI6mi5ds9 z=Ji|DKg=qO(Xxq^4}r5LtCIL&h7Jx$;b(MOy_%Bix=gmvOXptBss+e%Za&R57pZR5t#Pz8A>w*JEr~}fhhw)xCCB?$w+Vng95HRI;`%(*h$=TpFYQw z;nBiC$G%_~h~0|BB+UFeOE~e#i?k&+I|+hzA36!TjB2wq`qTv8n432zd9`)-?)Mts zetCVXyTAAZe=a%Z0HoM_cIWqp8PzZl!FUD%10 z(!cMsaSe@%fq!LH>)KyMs<%3Je68kUzNmv8?|5a0Mm! zS^BGJUgp?lnZe<`-s4S%NGWl5uHV}_q47(2Jyfk@qw4btx!1rle8(9}5SRGj`OkgV zY1e{)F;xfKFVdKsa49U zYsGHbnd<8|O$f1%tP*9)nk>)sH(YV%iFf!8b`sNJrsaLMu}JSl$|&y={JHL42g?bn ziGts!SNn-2Zo0{x*@b@kZisb2#(TRF0RMO$D~M5x?^fOUHb08pb(?N$smfB}b5@4S zXpBo-fgSE*pm>_gw@CRSWxuxon%FS1$GJ!&h>*nZmx5Mp4ci!64P$Q{R-vLrKL-V5 zDY~%64e{vRP$*J$C~H*Uv6@=itsouBQ%PJ^VThYT^^z8SRc08qYd>}GmUI=r0n$>b zKi=GBt+eVWf2J27Y2djbgxgqaRrl7h0c2Tm-1(x0%7Kz}q<@4&PZ()6u(wMKu>ja1 z+9s!j;5e}@Hg7{z@d}iR{4|8&O)p2vq&$4t**bok)SMB#xbH1=bL$I-%4ogXd%?Oz zbO1YA9rSs)hU#Wfvj~SSL@3X<$13K0&G$XhwY~k)IN66KdU~~O@W$uQHQ@&1SWa7Q z0JO4=y|42~BmqwSO z2JjiV?kak?Gr4>JUZhK*RLlBEopPaiFbJZhLd%h|!gz_Inu#tNFs^YV{!Sp1NX0oji?`mGfv1)iNWIvJBYrI^o7sfW%fEOt=?5lTN>xJb%B>05Hn@*b13sQAjJd`aOvD+}_mCE?Y3QvyN z;J__=53+n21aeXJ#zF;!6Sd&|0##|~3qTBLBqn{3%An}=}BDKElUD`;hE+VA` z1~@}XSZZQPU%s>~oZ1m4e?H6hLxd~^D){9Ou<$G_@+FmWehUd?Kj2+lD026WWi!9G zzc%z{^V3#fTLBXXY2-y~5O2#xG)Nsi61fnE!FcC~I&ukoeT!d61C#bR?C3m96p7ic zF-ywJ_wAg~udM{@L`kWxC|1i?z&Zy|@ef3gO-*yj+;qBJYYaj~AGX%DkK-iT>9Qjm zI3sT-3ZL|*l_qWS1@o`kyUxu$P+*8u*D^`YRAE_6%vc;$xn3%M(6gy+7U$2YvIJNf zm53m7!vPtd?uznqHu04Qa~jt6#cf?>oc9!*s;rMlg4SaD#yeK$7P~8~LW-VyM!7m| ziOnBZ+!}R?5p9!y0Og7Rut2@qgH$&uBbI+@jZ7eY-U*meK7?U>0b~X!qx7rmLo@_h z@Qh@|S@s{{qr2I;pK$dsg*iIDu>ADQ;)kyV()~S1F~IEPI6K+nOd5Gt{;q=m;cZ)) z!Rg*dZUS2KChYA6b$#YSy~V_p;_-Gu{cHotTru4!84~N%cCNj=j*PsNbz$pIEE}2& zt{WnRMPFhf0=JqeNYK7Y8LNk?Mmyb%xzf8nwG}~LK5t?Wxkb_|Z8_}20lxJg)sMhv< zY~=3I{ZEs0D`;9hk<8%FHAQ0T+bp8u=3R# zm`AuQZuxawTkku)xB4SDXQkS=k7<(@P#o(j+bqr7&nd66nKwy=@8f|y=c*y;6FhcC z3P7)vIhGymwVI>^7d<{(?@9nM7=zQlhMV9#Ia^1CojKW@EB=Q0IS>_s`?5FUi6P8v z@#aITd)iy>njfBz$+y&zlQ-|j&w_xa00=n{fQPab?>V^oJj1OzDq}|(9p3r$RK{w* zT^m&c8M(ru+rjtruAz8nkbkv=%N9HBi9az3!B~&>Est*;luk>hPs-5ay@)989#Tvy zS|=!t`km!Nyao)(mOZaU0CK4g4#L1SQ_ASjl-cc_LE1Jm)x5xrjO&0jdgG*%<%c}Mj0gPAbF;m^d8j`kmHwgcMpt_GsI4*Wudg@%+pD0IPo2Y+JH<1|{ErEf-M=A0zV z^Ttdw1H-Su9S#=Qk^XKMCkwLl&jIoa%TLU^Hz!E$wgaM;B#nD1I>Y-qF-cHI7sLS4 zl1Hv-!^(ZuGgRw0)Lo^a8j{Gi&p=-4|-4=zfD}6p)9jl;*=$XlY1OOSFXqk|zn4#zbXl(1< z_3H+#==nzl$6kPZj$eoDF*%qGl7V@K$>HCrf9l`^IFsX4tyurWa#DNukwy0J)$wL5$^YHjShUHFxXEEBQRVU8S5TOz9tBP)B|>cv!TIig24 zv%6fdE#Wt|GFgKhPCHgV?Okii%}pnZHhMMj`E5BP5Yyj>Y;HFy{iqDHI4u<2oqqkG5VZcT$D%#rINUtH0McF3-s4_`8Nu$lVVdJ2XC+6I- z8!k&f-^lx_%K8QR>q|!cHiosvebI7UP%CpaS1{<@-ECH>DZcA5kNU3qo>jBzZ-dLM z9EB@f7)C$y;`SX1p_hJdT>|bLbAqCrP)#{C$eIA_5a%ur=yUzWV~7~CJ~@lavkxcs z#S!b$8*^EI2J(7c6YU`l^}U+zq(@oMJ5HWL#gq!q(7eujR>yc0l7lxqhKiK1)lBH9 z(zY;YmnwC0W^TPbf2Ua%5e41Z5g-%V$7dX|nm^6BI}Upn7*s*9%<6mhuJbhjc!amm zjvs{eOwsqX?^HM4^pa2j;8*X?PcJ~G`|Np!%xCqLEmX=T)LVOlh4dDrr6NsgqZJoV z3w!0Dh^?Nh8B=?+OJO0t-@Us{l{nhmyV^wCtT)7Yi#*vraWj)BmBrz6b0a2k8+v-( zeL-@T{?UoJHRSNy!a0ZpcS#B50cfTXMBBAbw}vTK`0U{_BUHUlF4Cm>@}KgKFF|?` zgCqj$b}YJZIcGyoksi%<08p;7Elu?OYeoyeDcME;#aA*?vqkm3ptAH;D~tPR+GNLcbYg6`c_evf zW0ZK0nD-;7$z-EWlnB9xr@MF20^o_E z-3qlEBmuQEdd5a&_&gE>iFQA`F-rTe8xGKpAMZxpXPz#zdcUqwz6IWDpECsA3*oa~ zusR?YmJ7l6`H`_9?Hozp6S>9%3Jxy{QVJJ#m>S{Bc<&5b&|049)8-?zb@FY zrX+H)P5yTN{%Dl}J|*sXk}=*Xs2&i~(cRpf4tT=$lV-$f`rE+3$6HAJXE^Eog+>oP z$|cMK@_c2go&)3%)gBxPfFB(A8f*ni>&cLgoY_3P31vHUlX}G3N=R8RI;F|Aou?7x z$)cMw(iS^`1wdaQ0Bd6v7r%krGz&a(^$p0eWqVs4kM%Wko~?z|eYWumi;v#k*Pqk% z-nE~@1(2sY(dc-O2m8e4c+$w@e4j@yslHJcJxdn ziTngO6IsAAzTAGb+}Cu8)ingH2|GGy+cBh89cIh{stsH#Q>DelU+pFy;hvSVCTVuhMdjQy-`j`XYc2f^#(Aav27tPs|B^Mr+(jNbtXd@6?Vj?<-ev%%!;?v zkjL{$t*g{ocisZq0Ii2e%sKM3J$UM-sbUc~rtkvzT2Pq|r59lZ6Xeq~8F*ymlloex zw?BNhh$L)pi-LG#?PzO=_!yawtm$%|1nUM+3(^ght`9ZGH5@FaZ~;oqyeP#?9HI~b z{!!G}O{?7NzTdB2A@m>%HMm zHMtT0tEnrGhpPSJA`+9xQV0=aY{^n~GL|wJj8R#VH6tP_yNHNT3P}vZSVO`uOAPTQ z$;4=Ec@vSfv5nD?Wqyx0`t;vj&htF?-shb2ob&yjd++)Dl3q7Aj6WoQxeTMM4E}VW zCQ^WEc{swAAB=x3?@*r&!VL35guR^|sme1vmTNizq^Z^Gmm}(R06VZzdvY~7a41vIBTr|iqASpd%{c5UrR}!6e0H` zq6}#BQVCX?=>knbO6HduGBt#MI(sf8hR?Ld}q^?}=w%%LdAtiMx3DE4c=_RWCCNWBZsqE{^ zXrMyQD~c&M9OUxIGj;xR&_Gu)9C;RI^(ARGO>VNzX%%3~{?mgal+TN$N{v-Pw~52I zL>Yt@G(DimVm*t#7$R_lV z#E00Yp_0&|@9Ttzrsuu~&@OpjE0bBUfm+a|0mm;W63xu&=#J1!!HHYA!1kfY=+qN7 zV~nN&JV=-&X1RpQpHzv?*BdW|i4NDNudV;*qSp6!s4~K2J3Oy?f6;#FCpQQ~BR`G1 zTI$5T>*#uNycvS8TTWO}Ze&NH$QbYfxZ@n@K3L)ouLgsM5Gd(QD;{r}E_5juP?M_^FY8>>bMBjX3(q ztWWr!&?3Zc86aqPinW_re4hqR%-r>fnF%Lf5?`tAF4WVFGzUY5t!sB=hU3%n%X zZi0GI!1-(fw^0izGUXVQ;UeX5G-EAT5qQYiItu;^OnS@+zbf9pCz0?Y+(HAT zZPOLHAL%zl-%2e~wQ`hRj@ScxpA($4sfm_D9y*L-A=K8 zBf{BdC02y!Sa%4-(ID*^92z=;x2W;9%PG+d1ON00;Cy5QcTwiCQo?Y`gp|dg;?s*l zvkTQZmV70xVGLInUh9j$26%pAn_82KL-UJ?bj4sHu9|-IB20gst#55{Vp5s;u)b*RW;DojxUmJw0W~r>--Z z$dnj85#N>nY|V~pFMyeKtWeviFM8mc#*1LW!k2V#Ea%RdL6u|* z;{H4#32~W;rGN}B8h+H7??XtRoEZ5Bzv%%FU!%63C_(q!kWW*R4DCZw=r&r4O- z)Pxw@{u%BGjRx^)|I+z7CeygW5>jH1rz&a;r+cw*jZ)g=KJs%+*uCitN`c?WOyHGD zsCV)5vc@I;88-%yw2t1|e)~;qS&WURZ+)n(dJ)_?8-GAOa&&amMJQ&)jo`@Ov1QHy zq|)dtA?*OX2L#E`dG&H3U + + + + + + + + + + + 2D View: Radius (1, 2, 0) + 3 × 5 kernel = 15 cells examined per voxel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + X (R=1) + Y (R=2) + + + + + + Center (C) + + Kernel neighbor + + Outside kernel + + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.png new file mode 100644 index 0000000000000000000000000000000000000000..2cde8310d87a6bf120b0a8c875bc68cb2be4ba4a GIT binary patch literal 66249 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.svg b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.svg new file mode 100644 index 0000000000..26205b18bf --- /dev/null +++ b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Formula.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + How Kernel Radius Relates to Kernel Size + + + + Kernel Size = (2 × Radius) + 1 + + + The radius extends in both directions along each axis, plus the center cell itself. + Each axis (X, Y, Z) can have a different radius value. + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Table.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeKernelAvgMisorientations_Table.png new file mode 100644 index 0000000000000000000000000000000000000000..3b4134d670b7e878e78c6a6f32f5f89c2d0e8ce1 GIT binary patch literal 56174 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%0A`ZcA&U9ay1HU@iJ|mVFPN^tK!e^S-O^ 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 hvua + + + + + Quick Reference: Radius → Kernel Size + + + + Radius (X,Y,Z) + + Kernel Size + + Cells per Dim + + Total Cells + + + + (1, 1, 1) + + 3 × 3 × 3 + + 3 + + 27 + + + + (2, 2, 2) + + 5 × 5 × 5 + + 5 + + 125 + + + + (3, 3, 3) + + 7 × 7 × 7 + + 7 + + 343 + \ No newline at end of file diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ComputeSchmids_SchmidFactor.png b/src/Plugins/OrientationAnalysis/docs/Images/ComputeSchmids_SchmidFactor.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd47d2741b7e3b50c6dd695f4a06d6ac0c4c814 GIT binary patch literal 123154 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 + + + + + + + Schmid Factor — Geometric Relationship + + + Schmid Factor = cos(φ) × cos(λ),  range: 0 to 0.5 + + + + + + + + + + + Slip plane + + + + + + + F (tensile) + + + + + + F (tensile) + + + + Slip plane + + + normal + + + + Slip + + + direction + + + + φ + + + + + + λ + + + + + + φ + = angle between tensile axis and slip plane normal + + + + λ + = angle between tensile axis and slip direction + + + + Slip plane (amber) + + + Maximum Schmid factor + 0.5 (at φ = λ = 45°) + + + diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.png b/src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.png new file mode 100644 index 0000000000000000000000000000000000000000..ba94c128a18e70846eedc8e8dba3fa57b5c52659 GIT binary patch literal 159404 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.svg b/src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.svg new file mode 100644 index 0000000000..68dc0ba8df --- /dev/null +++ b/src/Plugins/OrientationAnalysis/docs/Images/ConvertOrientations_Representations.svg @@ -0,0 +1,81 @@ + + + Orientation representations + All eight forms describe the same 3D crystal rotation + + + + Convert Orientations: input [ i ] → output [ j ] + + + + + + 0 + Euler Angles + 3 components + 1, Φ, φ2) Bunge Z-X-Z + + + + + 1 + Orientation Matrix + 9 components + 3 × 3 rotation matrix + + + + + 2 + Quaternion + 4 components + (x, y, z), w + + + + + 3 + Axis-Angle + 4 components + axis (x, y, z), angle° + + + + + + + 4 + Rodrigues + 4 components + (x, y, z), w + + + + + 5 + Homochoric + 3 components + (x, y, z) + + + + + 6 + Cubochoric + 3 components + (x, y, z) + + + + + 7 + Stereographic + 3 components + (x, y, z) + + + + Euler Angles and Quaternions are the most commonly used; the filter converts between any pair (within numerical precision). + Choose the input and output representation from the list above. + diff --git a/src/Plugins/OrientationAnalysis/docs/Images/EBSDSegmentFeatures_after_grains.png b/src/Plugins/OrientationAnalysis/docs/Images/EBSDSegmentFeatures_after_grains.png new file mode 100644 index 0000000000000000000000000000000000000000..0504f955261dd3394c1da73602b6fed87a93a10b GIT binary patch literal 25442 zcmeFZXH=70+coNz?G{B*L_mRn1QeAfg0xT+0*F#96zKv=Z-Ee`1au41gQzs=ML|lC z8d^YUK`Eh^gn$qrp@fK(P{X->AD_Knb$nx-Ki`it#`(dx(E(&-t*gvy&bbnCOJDow zVcx_0_U${Wa~*nT-@g65z*j%(U%>zL{9$zjcpUP)ZtA^n9~C2L(8m|1TcTme(kd2!_O0<<_NSp#aG{pZWbW_-%1d8)eQ8 z`>Iq8BN6qBriC+GlKa*)&;C!iLeKK%$CY%;V?cWh(y^PVhqhjn72wUr2OVPOWgd&< z{}iym#yE$t0(&%g^*_J;e<#?jB?I>F+n0GNcFC^<6wFwp$18AVGJh=P`=dwu7V@t$ zjsF*GfPX*A%H>%>hf*@LFxYBJw`cfv#Q)Ada5oTq&QDnn7W{qVKbd<&_A!d2I?F)R zcjv|cJF>5u=DYV%0;g}imRmJk(;XFFznN#M3C-POsC79a@`W${l;bUm`{2>62frYO z{pAVEuQ}y!tVOHr!NWlryStp6)+wv$3YgU;5ioe+Si^hTrpT&{`qGMu%POAXs@S-A z*t*;fgu7%18urvwo}#*J<64w^Ft>hM^1QtJnDImWA6$Jz2qR>CyashKK;WwAl9k$) z*y0c27aowPx|Cf4Dz#k2uP5K++v{w+V%uxDvbilI zMJ$cD+R`crhk`Hc7FCCbF4Ux@$JQBpYhL=CogBRpMdtUD?tR|4_z0s? zHKpmIP=Z`R2Z6zT!Cg{b872u@G4nK&?>Y5jAAeLp7`v=c_iYb`2eNKuqre3Haui|} z{NPD~9ZTZ2`P4Q(z-bRfdB5_!}C@e;)BbLC09Q2 z!PwP)oX!@M<-*3r1{kH|g}rL6KdnI3Wvd>2gL3=8P+5^PMP=AMw-7G|YCv{unt0SV z&Lmk~9eHrexP0CsVUSWyv631rfu_v6gSbyQ*V?9<7!fXUImOLJdRrLrl0tud$7ixc z;=&7B6_j8*oCgWZAKn<~1X^>HhKo;JixyVXkT)Ad2`VqWNLaBJ>`^^8&?Tqn^bpd( z{Gyhq@bXdb6mDMf65LHE2({(m&#);bdgC;e^^c8w4p_xwTmqOPieo7G@!aJFy1bI) z^2+UFhCg+eaPLe5-hk03Zup5Rx0BY?x8Yjh&9-2E((&LPoFFJB3=L>hl1oPE#UN%!rdYvT&c;)ez&>$kM) zF7~hm`5uCd!(JX-+{m9mr)<<<)YJkTI9cq~e@abS^>i$NzsNz!D zcJyA*+J1FgzVnCU|94N$3?jF=8Lji*62fA=4XCuVh5Rzg?PrQS8*f3us~Cn^H={DB z7q45Lvv|R9s6-0cxOm~@LX_0vCA|=hn_i7BQD5Do5FzIS%soMr5r+ifo2fd5@j-G8 zix(cnY^>+G;RWlOJ{{;1>CC^4-Tj=dG5B-g$%Y)PeTK4|UM?~!vB06~6bUv#85F(q zz5@AgQS#g$SWN(J1L`7G8UETkv@6s+gZ(fSJo z6+=h4=E(vcu71oVZKlgH>)BUt16E6ud&6oP)VW#S78}+r5!dQ#QYpjA=rv};owV^_ zCJ_pKFxi^%9`~(4-x@QaSEGz^ZJap2#p6ikJLaK?j(vk%3J+typ$Hi`^wa*G*@EWi zq-{eTYTjRx=(n!zE=7GhIBq&pH=E+^-yvOo6mxwIe8%1#YqCQU*#5YJ{8Hj(ltC>} zTw0!I99kN9-cQ(z3nW17y!|{tQ~dT280ez{xuk9chDSf8J(~B!e#B4seq2ezS@y-#rw6y*?(5c;jJZOjBm>;@phG$f>5G|5Qebtk`hb;&wxz0E;3~s44 z$}6;ZvV?fsBnkdTaB`E>y=wA0Kq>%-I_Loj?kMHLpCXNR9IooyT!;kfd)?UUj+J++ zIiO#g&@C6Ek$GZXfp^i0tvct5LSXXU#Zqw$tFNZ?H-9whk)a~twvn9Iw@1Db;(@fy zH;~%BOs8#4a>t7aMj}!a=m`OiK2#7bN0?U?s?fv!^Vv`F=U2uu*V92JSL9%(_ydUg z`S_F(n5jyRn+ZxR=RDLh2W0BbA<%bB=_U;O#>0GpflyxWj?v6bst%hwDxvO+QtC^S zQ^F4U1bwYqa_NZl+gaqNLMOJ^Z1kn27g;BFVVsoPCO(DkM=~ZPx;Fy>fs>| z;%rR09C<8}2mzoJj<*_?I0P+)#GCPanVVm!UN}}x_7y~mEpI=!%Bz! ze}A{pa-Kj9GvIA>U0byu-&QI%OPTjRfxaO#=pd4%0Av`R`T_O7Z_Pz<@d581 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/OrientationAnalysis/docs/Images/EBSD_SampleVsCrystalReferenceFrame.png b/src/Plugins/OrientationAnalysis/docs/Images/EBSD_SampleVsCrystalReferenceFrame.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7963da267a62050304784cdcc501f17ee82081 GIT binary patch literal 84483 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
JP`rER{5xE*|<*No`uE&S(t&XI|cr}!8kKvlSo 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 + + + + + + + diff --git a/src/Plugins/OrientationAnalysis/docs/Images/Misorientation_Concept.png b/src/Plugins/OrientationAnalysis/docs/Images/Misorientation_Concept.png new file mode 100644 index 0000000000000000000000000000000000000000..14a9ed1d76ade185cd9a009f4d3300d89a70b82e GIT binary patch literal 79017 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�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 + + + + + + + diff --git a/src/Plugins/OrientationAnalysis/docs/MergeTwinsFilter.md b/src/Plugins/OrientationAnalysis/docs/MergeTwinsFilter.md index 2ce1719337..dddb01c786 100644 --- a/src/Plugins/OrientationAnalysis/docs/MergeTwinsFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/MergeTwinsFilter.md @@ -6,9 +6,60 @@ Reconstruction (Grouping) ## Description -*THIS FILTER ONLY WORKS ON CUBIC-HIGH (m3m) Laue Classes.* +This **Filter** groups neighboring **Features** (grains) that share a *twin relationship* into a single *parent* grain. Twins are sub-grains of a parent grain that share a highly specific crystallographic relationship, and for many downstream analyses -- morphology, size distributions, neighbor statistics -- it is useful to treat a grain and its twin variants as one entity rather than as separate grains. -This **Filter** groups neighboring **Features** that are in a twin relationship with each other (currently only FCC σ = 3 twins). The algorithm for grouping the **Features** is analogous to the algorithm for segmenting the **Features** - only the average orientation of the **Features** are used instead of the orientations of the individual **Elements**. The user can specify a tolerance on both the *axis* and the *angle* that defines the twin relationship (i.e., a tolerance of 1 degree for both tolerances would allow the neighboring **Features** to be grouped if their misorientation was between 59-61 degrees about an axis within 1 degree of <111>, since the Sigma 3 twin relationship is 60 degrees about <111>). +Only the FCC *Σ3* twin relationship is detected by this filter. + +### What is a Twin? + +A **twin** is a region within a grain whose crystal lattice is a mirror image of the surrounding parent grain across a specific plane, called the *twin plane*. Mechanically, the twinned region is still part of the same grain structure; crystallographically, it has a different -- but highly specific -- orientation. + +The most common twin in FCC metals (copper, nickel, aluminum, austenitic stainless steels, superalloys such as IN100 and Inconel) is the **Σ3 twin**. Two grains are in a Σ3 twin relationship when they are related by a 60° rotation about the `<111>` crystal direction. This is often called an *annealing twin* because it frequently forms during recrystallization. + +The "Σ3" notation comes from *Coincidence Site Lattice* (CSL) theory: Σ is the reciprocal density of lattice sites shared between the two crystals, and Σ3 means 1 out of every 3 atomic sites line up exactly across the boundary. + +### Why Merge Twins? + +After segmentation (for example with the *Segment Features (Misorientation)* filter), each twin variant is identified as its own separate **Feature** because it has a distinct average orientation from its parent. This is correct from a pure orientation standpoint, but can mislead morphological and statistical analyses: + +- A grain with three twin bands will be counted as four separate grains, inflating the apparent grain count. +- Grain-size distributions will be skewed smaller because twin variants are smaller than the parent. +- Neighbor statistics will count twin-to-parent boundaries as regular grain boundaries. + +Merging twin variants back into a single parent grain produces a *post-twin* grain structure that more closely reflects what a metallurgist would call a "grain" under an optical microscope, and is usually the correct input for morphological statistics. + +### How This Filter Works + +The filter uses a burn-style grouping algorithm operating on the **Feature** level (not the **Cell** level): + +1. A **Feature** that has not yet been assigned a parent is selected as the starting point and given a new *Parent Id*. +2. For each of its contiguous neighbors (provided by the input *Contiguous Neighbor List*), the filter computes the misorientation between the two features using their average quaternions. +3. If the misorientation axis is within the *Axis Tolerance* of `<111>` **and** the misorientation angle is within the *Angle Tolerance* of 60°, the neighbor is in a Σ3 twin relationship with the current feature and is assigned the same *Parent Id*. +4. The grouping then extends recursively through the newly added neighbor's own neighbors, so that a chain of twins-of-twins is absorbed into one parent. +5. When no more features can be added to the current parent group, a new unassigned feature is picked and the process repeats until every eligible feature has a *Parent Id*. + +### Parameter Guidance + +- **Axis Tolerance (degrees)**: How far the misorientation rotation axis can deviate from the ideal `<111>` direction and still be accepted as a twin. Default is 3°. Typical values range from 1° to 5°. Tighter tolerance = fewer false positives but may miss slightly distorted real twins. +- **Angle Tolerance (degrees)**: How far the misorientation rotation angle can deviate from the ideal 60° and still be accepted as a twin. Default is 2°. Typical values range from 1° to 3°. + +Both tolerances are in **degrees**. A tolerance of 3°/2° accepts a neighbor as a twin if its misorientation falls within roughly 58°-62° about an axis within 3° of `<111>`. + +### Required Input Sources + +This filter requires that several prior operations have already been run: + +- **Cell Feature Ids** -- produced by a segmentation filter (e.g., [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md)). +- **Contiguous Neighbor List** -- produced by [Compute Feature Neighbors](../SimplnxCore/ComputeFeatureNeighborsFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](../SimplnxCore/ComputeFeaturePhasesFilter.md). +- **Average Quaternions** -- produced by [Compute Average Orientations](ComputeAvgOrientationsFilter.md). +- **Crystal Structures** -- the ensemble-level array describing each phase's Laue class. + +### Limitations + +- **Cubic-High (m3m) only.** The filter only evaluates twin relationships for phases with the m3m Laue class (FCC and BCC cubic materials). Phases with other symmetries are skipped with a warning; their features remain ungrouped. Only FCC materials actually exhibit Σ3 annealing twins in practice. +- **Σ3 only.** Other CSL boundaries (Σ5, Σ7, Σ9, etc.) are not detected. +- **Requires well-computed average orientations.** The twin detection is only as accurate as the input *Average Quaternions*. If twin variants were segmented together with the parent (too-loose segmentation tolerance), the average orientation will be wrong and this filter will not reliably detect twins. % Auto generated parameter table will be inserted here @@ -16,7 +67,6 @@ This **Filter** groups neighboring **Features** that are in a twin relationship + (02) Small IN100 Full Reconstruction - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/OrientationAnalysis/docs/NeighborOrientationCorrelationFilter.md b/src/Plugins/OrientationAnalysis/docs/NeighborOrientationCorrelationFilter.md index 2b126da737..a122874006 100644 --- a/src/Plugins/OrientationAnalysis/docs/NeighborOrientationCorrelationFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/NeighborOrientationCorrelationFilter.md @@ -22,7 +22,7 @@ Neighbors are defined as the "nearest neighbors" which share a "face". For 3D st | 1 | (13.0, 0.0, 0.0) CI=0.2 | (0.0, 0.0, 0.0) CI=0.05 | (12.0, 0.0, 0.0) CI=0.2 | | 2 | | (15.0, 0.0, 0.0) CI=0.2 | | -Schematic layout of the neighboring cells. Only the In-Plane neighbors are shown. +Cell (1,1) has CI = 0.05, which is below a 0.1 minimum, so it is flagged. Its 4 in-plane neighbors all have orientations within 5 degrees of each other (Euler angles around (12-15, 0, 0)) but more than 5 degrees from (1,1)'s orientation (0, 0, 0). At *Cleanup Level* = 4, the four neighbors agree, so (1,1)'s attributes are replaced with one of them. In this example, cell (1,1) has a confidence index < 0.1. Its four neighbors are compared pairwise with each other: (13.0), (14.0), (12.0) and (15.0) are all within a few degrees of each other, so every neighbor participates in several similar pairs. The central cell (1,1) has all of its attributes replaced with those of the neighbor holding the highest similar-pair count. Note that the central cell's own orientation and phase play no role in choosing the replacement — only the mutual similarity of its neighbors matters. @@ -31,13 +31,13 @@ In this example, cell (1,1) has a confidence index < 0.1. Its four neighbors are | Example Input/Output Images | |--------------------------------| | ![](Images/BadDataNeighborOrientationCheckFilter_2.png) | -| The Small IN100 data just after some intial cleanup filters have been used. | +| The Small IN100 data just after some initial cleanup filters have been used. | | ![](Images/NeighborOrientationCorrelationFilter_1.png) | -| The Small IN100 data just after running this filter with a *Misorientation Tolerance* of 5 degrees, and a *Cleanup Level* of 2 and a minimum *Confidence Index* of 0.2 | +| The Small IN100 data after running this filter with *Misorientation Tolerance* = 5°, *Cleanup Level* = 2, and *Minimum Confidence Index* = 0.2. | -These before and after images show how this filter can be used to "fill in" data that was deemed non-indexed (in EBSD terms). The user should be careful with this filter as it is meant to clean up small sets of voxels and not flood fill an entire volume of voxels. +These before-and-after images show how this filter can fill in non-indexed EBSD cells. Use it for small isolated bad regions, not for flood-filling entire low-confidence areas. -### Warning - Cell Level Data Modification +### Warning - Cell-Level Data Modification This filter will copy all attribute data from neighboring cells into the target cell if the criteria is met. Arrays listed in *Attribute Arrays to Ignore* are excluded from the copy. diff --git a/src/Plugins/OrientationAnalysis/docs/ReadAngDataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadAngDataFilter.md index 4639bd6ea0..f52b7f90ce 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadAngDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadAngDataFilter.md @@ -25,14 +25,17 @@ The **Image Geometry** dimensions come from the `NCOLS_EVEN`/`NROWS` header valu The created **Image Geometry** is always marked as **micrometers**, matching standard EDAX SEM-based `.ang` files. Legacy DREAM.3D 6.5 detected certain retired TEM/ACOM `.ang` variants and marked them as nanometers; EDAX retired those file formats over a decade ago and this filter does not special-case them. If you are importing such an archival file, set the geometry units manually after import. + +![Fig. 1: An EBSD orientation is the rotation (Euler angles) between the sample reference frame (specimen axes) and the crystal reference frame (lattice axes). Import conventions may require realigning the sample frame with Rotate Sample Reference Frame and/or the crystal frame with Rotate Euler Reference Frame.](Images/EBSD_SampleVsCrystalReferenceFrame.png) + ### Default TSL Transformations -If the data has come from a TSL acquisition system and the settings of the acquisition software were in the default modes, the following reference frame transformations may need to be performed based on the version of the OIM Analysis software being used to collect the data: +If the data has come from a TSL acquisition system and the settings of the acquisition software were in the default modes, the following reference frame transformations may need to be performed based on the version of the OIM Analysis software being used to collect the data. These rotations can be applied with [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) and [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md): + Sample Reference Frame: 180o about the <010> Axis + Crystal Reference Frame: 90o about the <001> Axis -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The Threshold Objects **Filter** can be used to define this *mask* by thresholding on values such as *Confidence Index* > 0.1 or *Image Quality* > desired quality. +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Confidence Index* > 0.1 or *Image Quality* > desired quality. **Confidence Index** and **Image Quality** are per-pixel metrics that describe how reliable each individual measurement is. ### Note About Sample Grid @@ -42,8 +45,15 @@ OIMAnalysis can create EBSD data sampled on a hexagonal grid. The user can look # GRID: HexGrid ``` -If the user's .ang files are hexagonal grid files then they will need to run the {ref}`Convert EDAX Hex Grid to Square Grid (.ang)` filter to first convert the input files to square gridded files. This filter rejects hexagonal grid files during preflight with error `-19500`. +If the user's .ang files are hexagonal grid files then they will need to run the [Convert EDAX Hex Grid to Square Grid (.ang)](ConvertHexGridToSquareGridFilter.md) filter first to convert the input files to square-gridded files. This filter rejects hexagonal grid files during preflight with error `-19500`. + +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. + +### Required Input Sources +None — this filter reads directly from a `.ang` file on disk. ### Note on .ang file Data Ordering diff --git a/src/Plugins/OrientationAnalysis/docs/ReadChannel5DataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadChannel5DataFilter.md index 46e2d2ea8b..338176d0dd 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadChannel5DataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadChannel5DataFilter.md @@ -6,31 +6,40 @@ IO (Input) ## Description -This filter will read a single .cpr/.crc file pair into a new ImageGeometry. A **Cell Attribute Matrix** and -Ensemble Attribute Matrix** will also be created to hold the imported EBSD information. Currently, the user has no -control over the names of the created **Attribute Arrays**. The user should be aware that simply reading the file -then performing operations that are dependent on the proper crystallographic and sample reference frame will be -**undefined, inaccurate and/or wrong**. In order to bring the crystal reference frame and sample reference frame -into coincidence, rotations will need to be applied to the data. An excellent reference for this is the following PDF file: +This filter reads a single `.cpr`/`.crc` file pair (the EBSD scan format written by Oxford Instruments / HKL Channel 5 software) into a new **Image Geometry**. Reading the files directly lets the data be used immediately by other filters, instead of having to first build an intermediate `.h5ebsd` file. A **Cell Attribute Matrix** (per-pixel data) and an **Ensemble Attribute Matrix** (per-phase data) are created to hold the imported EBSD information. The user currently has no control over the names of the created **Attribute Arrays**. + +The scan stores an **orientation** at every pixel as three **Euler angles** (three angles, in the Bunge Z-X-Z convention, describing how the measured crystal at that pixel is rotated relative to the sample). + +The user should be aware that simply reading the file and then performing operations that depend on a correct crystal reference frame (the axes fixed to the crystal lattice) and sample reference frame (the axes fixed to the physical specimen) will be **undefined, inaccurate and/or wrong**. To bring the crystal and sample reference frames into coincidence, rotations may need to be applied to the data. An excellent reference for this is the following PDF file: [http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf](http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf) + +![Fig. 1: An EBSD orientation is the rotation (Euler angles) between the sample reference frame (specimen axes) and the crystal reference frame (lattice axes). Import conventions may require realigning the sample frame with Rotate Sample Reference Frame and/or the crystal frame with Rotate Euler Reference Frame.](Images/EBSD_SampleVsCrystalReferenceFrame.png) + ### Default HKL Transformations If the data has come from a HKL acquisition system and the settings of the acquisition software were in the -default modes, then the following reference frame transformations need to be performed: +default modes, then the following reference frame transformations need to be performed. These rotations can be applied with [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) and [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md): + Sample Reference Frame: 180o about the <010> Axis + Crystal Reference Frame: None -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The Threshold Objects -**Filter** can be used to define this *mask* by thresholding on values such as *Error* = 0. This will mark all scan points +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Error* = 0. This will mark all scan points that have Error=0 as TRUE, which means those scan points are valid for processing. ### Radians and Degrees -2D .cpr/.crc files have their angles in **radians**. +2D `.cpr`/`.crc` files store their angles in **radians**. + +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. -### The Axis Alignment Issue for Hexagonal Symmetry [1] +### Required Input Sources + +None — this filter reads directly from a `.cpr`/`.crc` file pair on disk. + +### The Axis Alignment Issue for Hexagonal Symmetry (Advanced) [1] + The issue with hexagonal materials is the alignment of the Cartesian coordinate system used for calculations with the crystal coordinate system (the Bravais lattice). + In one convention (e.g. EDAX.TSL), the x-axis, i.e. [1,0,0], is aligned with the crystal a1 axis, i.e. the [2,-1,-1,0] direction. In this case, the y-axis is aligned with the [0,1,-1,0] direction. (Green Axis in Figure 1) @@ -39,21 +48,17 @@ that have Error=0 as TRUE, which means those scan points are valid for processin + Caution: it appears that the axis alignment is a choice that must be made when installing TSL software so determination of which convention is in use must be made on a case-by-case basis. It is fixed to the y-convention in the HKL software. + The main clue that something is wrong in a conversion is that either the 2110 & 1010 pole figures are transposed, or that a peak in the inverse pole figure that should be present at 2110 has shifted over to 1010. + DREAM3D-NX uses the TSL/EDAX convention. -+ **The result of this is that the filter will by default add 30 degrees to the second Euler Angle (phi2) when reading Oxford Instr (.ctf) files. This can be disabled by the user if necessary.** ++ **The result of this is that the filter will by default add 30 degrees to the second Euler Angle (phi2) when reading Oxford Instr Channel 5 (.cpr/.crc) files. This can be disabled by the user if necessary.** | Figure 1 | |-----------------------------------------------------------------------------------------------------------| | ![Figure showing 30 Degree conversions](Images/Hexagonal_Axis_Alignment.png) | -| Figure 1:**showing TSL and Oxford Instr. conventions. EDAX/TSL is in **Green**. Oxford Inst. is in**Red | +| **Figure 1:** showing TSL and Oxford Instr. conventions. EDAX/TSL is in **Green**. Oxford Inst. is in **Red**. | % Auto generated parameter table will be inserted here -## Example Pipelines - - - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/OrientationAnalysis/docs/ReadCtfDataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadCtfDataFilter.md index 12e3dbeb4a..27ab63ebe7 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadCtfDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadCtfDataFilter.md @@ -6,23 +6,37 @@ IO (Input) ## Description -This **Filter** will read a single .ctf file into a new **Image Geometry**, allowing the immediate use of **Filters** on the data instead of having to generate the intermediate .h5ebsd file. A **Cell Attribute Matrix** and Ensemble Attribute Matrix** will also be created to hold the imported EBSD information. Currently, the user has no control over the names of the created **Attribute Arrays**. The user should be aware that simply reading the file then performing operations that are dependent on the proper crystallographic and sample reference frame will be **undefined, inaccurate and/or wrong**. In order to bring the crystal reference frame and sample reference frame into coincidence, rotations will need to be applied to the data. An excellent reference for this is the following PDF file: +This filter reads a single `.ctf` file (the EBSD scan format written by Oxford Instruments / HKL Channel 5 software) into a new **Image Geometry**. Reading the file directly lets the data be used immediately by other filters, instead of having to first build an intermediate `.h5ebsd` file. A **Cell Attribute Matrix** (per-pixel data) and an **Ensemble Attribute Matrix** (per-phase data) are created to hold the imported EBSD information. The user currently has no control over the names of the created **Attribute Arrays**. + +The scan stores an **orientation** at every pixel as three **Euler angles** (three angles, in the Bunge Z-X-Z convention, describing how the measured crystal at that pixel is rotated relative to the sample). + +The user should be aware that simply reading the file and then performing operations that depend on a correct crystal reference frame (the axes fixed to the crystal lattice) and sample reference frame (the axes fixed to the physical specimen) will be **undefined, inaccurate and/or wrong**. To bring the crystal and sample reference frames into coincidence, rotations may need to be applied to the data. An excellent reference for this is the following PDF file: [http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf](http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf) +![Fig. 1: An EBSD orientation is the rotation (Euler angles) between the sample reference frame (specimen axes) and the crystal reference frame (lattice axes). Import conventions may require realigning the sample frame with Rotate Sample Reference Frame and/or the crystal frame with Rotate Euler Reference Frame.](Images/EBSD_SampleVsCrystalReferenceFrame.png) + ### Default HKL Transformations -If the data has come from a HKL acquisition system and the settings of the acquisition software were in the default modes, then the following reference frame transformations need to be performed: +If the data has come from a HKL acquisition system and the settings of the acquisition software were in the default modes, then the following reference frame transformations need to be performed. These rotations can be applied with [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) and [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md): + Sample Reference Frame: 180o about the <010> Axis + Crystal Reference Frame: None -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The Threshold Objects **Filter** can be used to define this *mask* by thresholding on values such as *Error* = 0. +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Error* = 0. ### Radians and Degrees -Most 2D .ctf files have their angles in **degrees** where as DREAM3D-NX expects radians. The filter provides an option to convert the Euler Angles to Radians and is turned on by default. The user is encouraged to create an IPF Image of their EBSD data to ensure that they do in-fact need to have this option enabled. +Most 2D `.ctf` files store their angles in **degrees**, whereas DREAM3D-NX expects radians. The filter provides an option to convert the Euler angles to radians, turned on by default. The user is encouraged to create an IPF (Inverse Pole Figure) image of their EBSD data to confirm whether this option actually needs to be enabled. + +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. + +### Required Input Sources + +None — this filter reads directly from a `.ctf` file on disk. -### The Axis Alignment Issue for Hexagonal Symmetry [1] +### The Axis Alignment Issue for Hexagonal Symmetry (Advanced) [1] + The issue with hexagonal materials is the alignment of the Cartesian coordinate system used for calculations with the crystal coordinate system (the Bravais lattice). + In one convention (e.g. EDAX.TSL), the x-axis, i.e. [1,0,0], is aligned with the crystal a1 axis, i.e. the [2,-1,-1,0] direction. In this case, the y-axis is aligned with the [0,1,-1,0] direction. (Green Axis in Figure 1) @@ -36,7 +50,7 @@ Most 2D .ctf files have their angles in **degrees** where as DREAM3D-NX expects | Figure 1 | |--------| | ![Figure showing 30 Degree conversions](Images/Hexagonal_Axis_Alignment.png) | -| Figure 1:**showing TSL and Oxford Instr. conventions. EDAX/TSL is in **Green**. Oxford Inst. is in**Red | +| **Figure 1:** showing TSL and Oxford Instr. conventions. EDAX/TSL is in **Green**. Oxford Inst. is in **Red**. | % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/ReadEnsembleInfoFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadEnsembleInfoFilter.md index e07d25fe00..381b53d596 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadEnsembleInfoFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadEnsembleInfoFilter.md @@ -6,7 +6,13 @@ IO (Input) ## Description -This **Filter** reads in information about the crystal structure and phase types of all the **Features** that are contained in a **Cell** based volume. These values are needed to allow the calculation of statistics on the volume, if they have not already been provided by some other means. The format of the input file is a simple ASCII text file with the extension .ini or .txt. The first group in the file is the name [EnsembleInfo] in square brackets with the key Number_Phases=*number of phases* that are contained in the volume. Subsequent groups in the file list the **Phase Number**, **Crystal Structure** and **Phase Type**. The proper values for the crystal structure and phase type come from internal constants within DREAM3D-NX and are listed here: +An **Ensemble** in DREAM3D-NX is a *phase*: a distinct material or crystal type present in the sample. This filter reads a small ASCII text file that describes each phase and creates the per-phase metadata that many statistics filters require. Specifically, for every phase it records a **Crystal Structure** (the crystal symmetry, which determines how orientations and misorientations are computed) and a **Phase Type** (the role the phase plays, such as a primary matrix phase or a precipitate phase). + +The filter does not create a new geometry. The *Data Container* parameter selects an existing geometry or data group, and the filter adds a new **Ensemble Attribute Matrix** (per-phase data) containing the **Crystal Structures** and **Phase Types** arrays into it. Downstream statistics and synthetic-structure filters read these arrays to know how to treat each phase. This information is needed to compute statistics on the volume when it has not already been provided by some other means (for example, by an EBSD reader). + +The input file is a simple ASCII text file with either a `.ini` or `.txt` extension; both use the same format. The first group is named `[EnsembleInfo]` in square brackets with the key `Number_Phases=`*number of phases* contained in the volume. Subsequent groups list the **Phase Number**, **Crystal Structure** and **Phase Type**. The valid string values for the crystal structure and phase type come from internal constants within DREAM3D-NX and are listed below. These tables describe the *content of the input file*, not the filter's parameters. + +A **Crystal Structure** value names the Laue (point-group) symmetry of the phase. A **Phase Type** value names the role the phase plays in subsequent analysis. **Crystal Structure** @@ -52,9 +58,11 @@ For example, if you have a structure that has 2 phases that consist of a Cubic P CrystalStructure=Hexagonal_High PhaseType=MatrixPhase -% Auto generated parameter table will be inserted here +### Required Input Sources + +None — this filter reads directly from a `.ini` or `.txt` file on disk. It does require an existing **Data Container** (a geometry or data group) into which the created **Ensemble Attribute Matrix** is placed. -## Example Pipelines +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ReadGrainMapper3DFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadGrainMapper3DFilter.md index 9731256294..9a13f73393 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadGrainMapper3DFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadGrainMapper3DFilter.md @@ -6,11 +6,11 @@ Readers ## Description -This filter will read Version 4 and Version 5 GrainMapper3D HDF5 files. +This filter reads Version 4 and Version 5 **GrainMapper3D** HDF5 (`.h5`) files. GrainMapper3D is [XNovo Technology](https://xnovotech.com)'s lab diffraction-contrast-tomography (LabDCT) reconstruction software, used to reconstruct 3D crystallographic grain maps from laboratory X-ray measurements. -- Euler data is read as radians -- The Image Geometry that is produced is in units of millimeters -- The user has the opportunity to create compatible Orientation Data and Phase data. See below. +- Euler data is read in **radians**. +- The **Image Geometry** that is produced is in units of **millimeters**. This differs from the micron length-unit assumption made by many downstream DREAM3D-NX filters (for example, size and spacing computations). Be aware of this difference when chaining this reader into a pipeline. +- The user has the opportunity to create DREAM3D-NX compatible Orientation Data and Phase data. See below. ## Parameter Discussion @@ -22,18 +22,22 @@ will be output. Specifically, the Rodrigues vector will be converted into a 4 component and the conjugate computed. The quaternion order will be changed from wxyz to xyzw and the conjugate will be computed. -PhaseId data will be converted to "int32" (as an option) to make that data immediately compatible -with DREAM3D's filters. +PhaseId data will be converted to *int32* (when the *Create Compatible Phase Data* option is checked) to make that data immediately compatible with DREAM3D-NX's filters. -IPFColors can be stored as either uint8 or float values. If you want to immediately view the IPF Colors then -the user should check the box for "Create Compatible IPF Color Data" +IPF (inverse pole figure) colors can be stored in the file as either *uint8* or *float32* values. To immediately view the IPF colors that came from the file, the user should check the box for *Create Compatible IPFColor Data*, which converts any *float32* color data to *uint8*. ## Special Notes -The IPF colors (if any) that are read in from the file are *NOT* compatible with the IPF -Color legends provided by DREAM3D-NX or EBSDLib. The user can use the "Compute IPF Colors" -if they need to specifically understand the crystallographic orientations or they -can obtain the IPF legends from XNovo. +The IPF colors (if any) that are read in from the file are **NOT** compatible with the IPF color legends provided by DREAM3D-NX or EBSDLib. There are two distinct options at play, and they should not be confused: + +- *Create Compatible IPFColor Data* only re-types the colors that were *already computed by GrainMapper3D* so they can be displayed; it does not recompute them against DREAM3D-NX's legends. +- To obtain IPF colors that match the DREAM3D-NX / EBSDLib legends, run [Compute IPF Colors](ComputeIPFColorsFilter.md) downstream on the imported orientation data. Alternatively, the user can obtain the matching IPF legends from XNovo. + +Use [Compute IPF Colors](ComputeIPFColorsFilter.md) if you need to specifically understand the crystallographic orientations using DREAM3D-NX's color conventions. + +## Required Input Sources + +None. This filter reads directly from a `.h5` GrainMapper3D file and creates the **Image Geometry**, **Cell** data, and **Ensemble** data itself. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/ReadH5EbsdFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadH5EbsdFilter.md index 6d32874b7c..46adc1a0c9 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadH5EbsdFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadH5EbsdFilter.md @@ -6,7 +6,11 @@ IO (Input) ## Description -This **Filter** reads from the .h5ebsd file that was generated with the *Import Orientation File(s) to H5EBSD* **Filter**. +This filter reads orientation data from a `.h5ebsd` file into a new **Image Geometry**. A `.h5ebsd` file is an HDF5 container that bundles one or more EBSD scan slices (along with their metadata) into a single file, which makes reading a multi-slice 3D volume fast and convenient. + +### Required Input Sources + +The `.h5ebsd` file read by this filter is not a manufacturer's native export. It must first be produced from one or more raw EBSD scan files (such as `.ang` or `.ctf`) using the [Import Orientation File(s) to H5EBSD](EbsdToH5EbsdFilter.md) filter. ![Read H5Ebsd File User Interface](Images/ReadH5Ebsd_UI.png) @@ -21,11 +25,11 @@ The **user** is solely responsible for knowing any sample reference frame transf If the user does not want the **Read H5Ebsd** filter to perform any transformations then the checkbox can be unchecked and the user can manually perform any desired transformations by inserting the appropriate filters into the pipeline. The suggested filters are: -+ {ref}`Rotate Euler Reference Frame ` -+ {ref}`Rotate Sample Reference Frame ` -+ {ref}`Convert Angles to Degrees or Radians ` ++ [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md) ++ [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) ++ [Convert Angles to Degrees or Radians](../SimplnxCore/ChangeAngleRepresentationFilter.md) -An excellant reference for this is the following PDF file: +An excellent reference for this is the following PDF file: [http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf](http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf) | Incorrect | Correct | @@ -34,19 +38,23 @@ An excellant reference for this is the following PDF file: | Euler angles were treated as Radians | Euler angles were converted from Degrees to Radians | |"Interstitial Free (IF) Steel courtesy of [1]"| | -### The Axis Alignment Issue for Hexagonal Symmetry [2] +### The Axis Alignment Issue for Hexagonal Symmetry (Advanced) [2] + The issue with hexagonal materials is the alignment of the Cartesian coordinate system used for calculations with the crystal coordinate system (the Bravais lattice). + In one convention (e.g. EDAX.TSL), the x-axis, i.e. [1,0,0], is aligned with the crystal a1 axis, i.e. the [2,-1,-1,0] direction. In this case, the y-axis is aligned with the [0,1,-1,0] direction. (Green Axis in Figure 1) + In the other convention, (e.g. Oxford Instr, Univ. Metz software), the x-axis, i.e. [1,0,0], is aligned with the crystal [1,0,-1,0] direction. In this case, the y-axis is aligned with the [-1,2,-1,0] direction. (Red Axis in Figure 1) -+ This is important because texture analysis can lead to an ambiguity as to the alignment of [2,-1,-1,0] versus [1,0,-1,0], with apparent **30** shifts in the data. ++ This is important because texture analysis can lead to an ambiguity as to the alignment of [2,-1,-1,0] versus [1,0,-1,0], with apparent **30 degree** shifts in the data. + Caution: it appears that the axis alignment is a choice that must be made when installing TSL software so determination of which convention is in use must be made on a case-by-case basis. It is fixed to the y-convention in the HKL software. + The main clue that something is wrong in a conversion is that either the 2110 & 1010 pole figures are transposed, or that a peak in the inverse pole figure that should be present at 2110 has shifted over to 1010. + DREAM3D-NX uses the TSL/EDAX convention. -+ **The result of this is that the filter will *AUTOMATICALLY* add 30 to phi2 when reading Oxford Instr (.ctf) files or .h5ebsd files denoted with the HKL manufacturer ID. There is no way to turn off this behavior.** ++ **The result of this is that the filter will *AUTOMATICALLY* add 30 degrees to phi2 when reading Oxford Instr (.ctf) files or .h5ebsd files denoted with the HKL manufacturer ID. There is no way to turn off this behavior.** ![Figure 1 showing TSL \& Oxford Instr. conventions.](Images/Hexagonal_Axis_Alignment.png) +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles (three angles, in the Bunge Z-X-Z convention, describing each crystal's orientation relative to the sample) are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/ReadH5EspritDataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadH5EspritDataFilter.md index b98dd6b163..24c223b796 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadH5EspritDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadH5EspritDataFilter.md @@ -6,7 +6,9 @@ IO (Input) ## Description -This **Filter** will read a single .h5 file into a new **Image Geometry**, allowing the immediate use of **Filters** on the data instead of having to generate the intermediate .h5ebsd file. A **Cell Attribute Matrix** and Ensemble Attribute Matrix** will also be created to hold the imported EBSD information. Currently, the user has no control over the names of the created **Attribute Arrays**. +This filter reads a single `.h5` file (the HDF5-based EBSD export from Bruker Nano's Esprit software) into a new **Image Geometry**. Reading the file directly lets the data be used immediately by other filters, instead of having to first build an intermediate `.h5ebsd` file. A **Cell Attribute Matrix** (per-pixel data) and an **Ensemble Attribute Matrix** (per-phase data) are created to hold the imported EBSD information. The user currently has no control over the names of the created **Attribute Arrays**. + +The scan stores an **orientation** at every pixel as three **Euler angles** (three angles, in the Bunge Z-X-Z convention, describing how the measured crystal at that pixel is rotated relative to the sample). | User interface before entering a proper "Z Spacing" value and selecting which scans to include. | |-------| @@ -18,25 +20,31 @@ This **Filter** will read a single .h5 file into a new **Image Geometry**, allow ## Notes About Reference Frames -The user should be aware that simply reading the file then performing operations that are dependent on the proper crystallographic and sample reference frame will be undefined or simply **wrong**. In order to bring the crystal reference frame and sample reference frame into coincidence, rotations will need to be applied to the data. The recommended filters are: +The user should be aware that simply reading the file then performing operations that are dependent on the proper crystal reference frame (the axes fixed to the crystal lattice) and sample reference frame (the axes fixed to the physical specimen) will be undefined or simply **wrong**. To bring the crystal and sample reference frames into coincidence, rotations may need to be applied to the data. The recommended filters are: -+ {ref}`Rotate Euler Reference Frame ` -+ {ref}`Rotate Sample Reference Frame ` ++ [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md) ++ [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) If the data has come from a TSL acquisition system and the settings of the acquisition software were in the default modes, the following reference frame transformations may need to be performed based on the version of the OIM Analysis software being used to collect the data: + Sample Reference Frame: 180o about the <010> Axis + Crystal Reference Frame: 90o about the <001> Axis -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The {ref}`Threshold Objects ` Filter can be used to define this *mask* by thresholding on values such as *MAD* > xx. +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Mean Angular Deviation (MAD)* > xx. The **Mean Angular Deviation (MAD)** is a per-pixel metric describing how well the indexed solution fit the measured pattern (lower is better). -+ Note: If the X Step or Y Step within the HDF5 file for a scan is ZERO, those values will be set to 1.0 when the filter runs. This is needed ++ Note: If the X Step or Y Step within the HDF5 file for a scan is ZERO, those values will be set to 1.0 micron when the filter runs. This is needed as the user has no effective way to fix the HDF5 file. If the user needs a different -spacing value, the user can utilize the {ref}`Set Origin and Spacing` filter. +spacing value, the user can utilize the [Set Origin & Spacing (Image Geom)](../SimplnxCore/SetImageGeomOriginScalingFilter.md) filter. -% Auto generated parameter table will be inserted here +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. -## Example Pipelines +### Required Input Sources + +None — this filter reads directly from a `.h5` file on disk. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ReadH5OimDataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadH5OimDataFilter.md index 4c604e0921..055dc6ae90 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadH5OimDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadH5OimDataFilter.md @@ -6,7 +6,9 @@ IO (Input) ## Description -This **Filter** will read a single .h5 file into a new **Image Geometry**, allowing the immediate use of **Filters** on the data instead of having to generate the intermediate .h5ebsd file. A **Cell Attribute Matrix** and Ensemble Attribute Matrix** will also be created to hold the imported EBSD information. Currently, the user has no control over the names of the created **Attribute Arrays**. +This filter reads a single `.h5` file (the HDF5-based EBSD export from EDAX OIM Analysis software) into a new **Image Geometry**. Reading the file directly lets the data be used immediately by other filters, instead of having to first build an intermediate `.h5ebsd` file. A **Cell Attribute Matrix** (per-pixel data) and an **Ensemble Attribute Matrix** (per-phase data) are created to hold the imported EBSD information. The user currently has no control over the names of the created **Attribute Arrays**. + +The scan stores an **orientation** at every pixel as three **Euler angles** (three angles, in the Bunge Z-X-Z convention, describing how the measured crystal at that pixel is rotated relative to the sample). When stacking multiple slices into a 3D volume, the *Z Spacing* parameter sets the out-of-plane distance between adjacent slices in microns, and the *Origin* parameter sets the location of the volume's corner in microns. ![User interface before entering a proper "Z Spacing" value and selecting which scans to include.](Images/ReadEDAXH5_1.png) @@ -14,10 +16,10 @@ This **Filter** will read a single .h5 file into a new **Image Geometry**, allow ## Notes About Reference Frames -The user should be aware that simply reading the file then performing operations that are dependent on the proper crystallographic and sample reference frame will be undefined or simply **wrong**. In order to bring the crystal reference frame and sample reference frame into coincidence, rotations will need to be applied to the data. The recommended filters are: +The user should be aware that simply reading the file then performing operations that are dependent on the proper crystal reference frame (the axes fixed to the crystal lattice) and sample reference frame (the axes fixed to the physical specimen) will be undefined or simply **wrong**. To bring the crystal and sample reference frames into coincidence, rotations may need to be applied to the data. The recommended filters are: -- {ref}`Rotate Euler Reference Frame ` -- {ref}`Rotate Sample Reference Frame ` +- [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md) +- [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) If the data has come from a TSL acquisition system and the settings of the acquisition software were in the default modes, the following reference frame transformations may need to be performed based on the version of the OIM Analysis software being used to collect the data: @@ -26,16 +28,22 @@ If the data has come from a TSL acquisition system and the settings of the acqui ### Important Consideration for Sample Reference Frame -If the user is importing more than a single slice from the HDF5 file and using the "Rotate Sample Reference Frame" filter, +If the user is importing more than a single slice from the HDF5 file and using the [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) filter, the user should **CHECK** the option **ON** for "Perform Slice By Slice Transform". ## Thresholding out Unindexed Scan Points -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The {ref}`Threshold Objects ` **Filter** can be used to define this *mask* by thresholding on values such as *Confidence Index* > xx or *Image Quality* > desired quality. +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Confidence Index* > xx or *Image Quality* > desired quality. **Confidence Index** and **Image Quality** are per-pixel metrics that describe how reliable each individual measurement is. -% Auto generated parameter table will be inserted here +## Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, and so on) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. -## Example Pipelines +## Required Input Sources + +None — this filter reads directly from a `.h5` file on disk. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/OrientationAnalysis/docs/ReadH5OinaDataFilter.md b/src/Plugins/OrientationAnalysis/docs/ReadH5OinaDataFilter.md index 0aba362da8..191ca58f05 100644 --- a/src/Plugins/OrientationAnalysis/docs/ReadH5OinaDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/ReadH5OinaDataFilter.md @@ -6,32 +6,36 @@ IO (Input) ## Description -This filter will read data from a single .h5oina file into a new **Image Geometry**, allowing the immediate use of -**Filters** on the data instead of having to generate the intermediate .h5ebsd file. A **Cell Attribute Matrix** and -**Ensemble Attribute Matrix** will also be created to hold the imported EBSD information. Currently, the user has no control -over the names of the created **Attribute Arrays**. +This filter reads data from a single `.h5oina` file (the HDF5-based export from Oxford Instruments' AZtec software) into a new **Image Geometry**. Reading the file directly lets the data be used immediately by other filters, instead of having to first build an intermediate `.h5ebsd` file. A **Cell Attribute Matrix** (per-pixel data) and an **Ensemble Attribute Matrix** (per-phase data) are created to hold the imported EBSD information. The user currently has no control over the names of the created **Attribute Arrays**. + +### What This Filter Produces + +The file is EBSD (Electron Backscatter Diffraction) scan data. The most important imported arrays are: + +- **Orientation** — stored as three **Euler angles** per pixel (the three angles, in Bunge Z-X-Z convention, that describe how each measured crystal is rotated relative to the sample). Orientation is the basis for almost all downstream crystallographic analysis. +- **Phase** — a per-pixel index identifying which material (phase) was measured at that point. +- **Pattern-quality metrics** — values such as Band Contrast, Band Slope, Bands, and Mean Angular Deviation describe how clear and reliable each measurement is. These are commonly used to flag unreliable pixels (see *Reference Frames* below). +- **Per-phase (Ensemble) data** — the crystal structure, lattice constants, and material name for each phase. An **Ensemble** here means one distinct material/crystal type. ### Limitations of the Filter -The current implementation only understands the FORMAT VERSION 2.0 of the H5OINA file. This means that a user -can use a newer H5OINA file but the filter will only extract out the VERSION 2.0 headers and data. If the user -needs additional data from the file, the "Import HDF5 Dataset" filter can be used to agment this filter. +The current implementation only understands **FORMAT VERSION 2.0** of the H5OINA file. A user can still read a newer H5OINA file, but the filter will only extract the VERSION 2.0 headers and data. If additional data is needed from the file, the [Read HDF5 Dataset](../SimplnxCore/ReadHDF5DatasetFilter.md) filter can be used to augment this filter. ![Overview of the user interface.](Images/ImportH5OinaFilter_1.png) ## Notes About Reference Frames -In order to bring the crystal reference frame and sample reference frame into coincidence, rotations **MAY** need to be applied to the data. There are 2 filters that can perform the necessary rotations. +In order to bring the crystal reference frame and the sample reference frame into coincidence, rotations **MAY** need to be applied to the data. Two filters can perform the necessary rotations: -- {ref}`Rotate Euler Reference Frame ` -- {ref}`Rotate Sample Reference Frame ` +- [Rotate Euler Reference Frame](RotateEulerRefFrameFilter.md) +- [Rotate Sample Reference Frame](../SimplnxCore/RotateSampleRefFrameFilter.md) -Historical reference frame operations for a .ctf file are the following: +Historical reference frame operations for Oxford data are the following: + Sample Reference Frame: 180o about the <010> Axis + Crystal Reference Frame: None -The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The Threshold Objects **Filter** can be used to define this *mask* by thresholding on values such as *Error* = 0. +The user also may want to assign un-indexed pixels to be ignored by flagging them as "bad". The [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md) filter can be used to define this *mask* by thresholding on values such as *Error* = 0. ### Radians and Degrees @@ -46,44 +50,22 @@ All orientation data in the H5OINA file are in radians. + Caution: it appears that the axis alignment is a choice that must be made when installing TSL software so determination of which convention is in use must be made on a case-by-case basis. It is fixed to the y-convention in the HKL software. + The main clue that something is wrong in a conversion is that either the 2110 & 1010 pole figures are transposed, or that a peak in the inverse pole figure that should be present at 2110 has shifted over to 1010. + DREAM3D-NX uses the TSL/EDAX convention. -+ __The result of this is that the filter will by default add 30 degrees to the second Euler Angle (phi2) when reading Oxford Instr (.ctf) files. This can be disabled by the user if necessary.__ ++ __The result of this is that the filter will by default add 30 degrees to the second Euler Angle (phi2) when reading Oxford `.h5oina` files. This can be disabled by the user if necessary.__ | Figure 1 | |--------| | ![Figure showing 30 Degree conversions](Images/Hexagonal_Axis_Alignment.png) | | **Figure 1:** showing TSL and Oxford Instr. conventions. EDAX/TSL is in **Green**. Oxford Inst. is in **Red** | -## Parameters - -| Name | Type | Description | -|------|------| ----------- | -| Input File | File Path | The input .h5 file path | -| Scan Name | String | The name of the scan in the .h5oina file. | -| Z Spacing | float | The spacing in microns between each layer. | -| Origin | float (3x1) | The origin of the volume | -| Import Pattern Data | bool | Default=OFF | -| Hexagonal Axis Alignment | bool | Should the filter convert a Hexagonal phase to the EDAX standard for x-axis alignment | -| Convert Phase data to Int32 | bool | Should the phase data be converted to Int32 or keep the original uint8 | - -## Created Objects - -| Kind | Default Name | Type | Comp Dims | Description | -|-------------|--------------|------|-----------|----------------------------------------| -| Data Container | ImageDataContainer | N/A | N/A | Created Data Container name with an **Image Geometry** | -| Attribute Matrix | Cell Data | Cell | N/A | Created **Cell Attribute Matrix** name | -| Attribute Matrix | Cell Ensemble Data | Cell Ensemble | N/A | Created **Cell Ensemble Attribute Matrix** name | -| Cell Attribute Array | Band Contrast | uint8 | (1) | | -| Cell Attribute Array | Band Slope | uint8 | (1) | | -| Cell Attribute Array | Bands | uint8 | (1) | | -| Cell Attribute Array | Error | uint8 | (1) | The error descriptions are saved as attributes in the .h5oina file | -| Cell Attribute Array | Euler | float | (3) | Three angles defining the orientation of the **Cell** in Bunge convention (Z-X-Z) | -| Cell Attribute Array | MeanAngularDeviation | float | (1) | | -| Cell Attribute Array | Phase | uint8 | (1) | | -| Cell Attribute Array | X | float | (1) | The X Position of the scan point | -| Cell Attribute Array | Y | float | (1) | The Y Position of the scan point | -| Ensemble Attribute Array | CrystalStructures | uint32_t | (1) | Enumeration representing the crystal structure for each **Ensemble** | -| Ensemble Attribute Array | LatticeConstants | float | (6) | The 6 values that define the lattice constants for each **Ensemble**| -| Ensemble Attribute Array | MaterialName | String | (1) | Name of each **Ensemble** | +### Downstream Processing + +Once the reference frames are correct, the imported Euler angles are typically converted to other orientation representations (quaternions, etc.) with [Convert Orientation Representation](ConvertOrientationsFilter.md) before computing misorientations, segmenting grains, or generating pole figures. + +## Required Input Sources + +None — this filter reads directly from a `.h5oina` file on disk. + +% Auto generated parameter table will be inserted here ## Example Pipelines @@ -91,6 +73,6 @@ All orientation data in the H5OINA file are in radians. [1] Rollett, A.D. Lecture Slides located at [http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf](http://pajarito.materials.cmu.edu/rollett/27750/L17-EBSD-analysis-31Mar16.pdf) -## DREAM3DNX Help +## DREAM3D-NX Help -Check out our GitHub community page at [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) to report bugs, ask the community for help, discuss features, or get help from the developers. +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/OrientationAnalysis/docs/WriteGBCDGMTFileFilter.md b/src/Plugins/OrientationAnalysis/docs/WriteGBCDGMTFileFilter.md index add24285be..c4f33b475d 100644 --- a/src/Plugins/OrientationAnalysis/docs/WriteGBCDGMTFileFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/WriteGBCDGMTFileFilter.md @@ -6,9 +6,34 @@ IO (Output) ## Description -This **Filter** creates a .dat file that can be used in conjunction with [GMT](http://gmt.soest.hawaii.edu/) to generate a grain boundary character distribution (GBCD) pole figure. The user must select the relevant phase for which to write the pole figure by entering the *phase index*. +This filter exports a **grain boundary character distribution (GBCD)** as a plain-text `.dat` file that the external [Generic Mapping Tools (GMT)](https://www.generic-mapping-tools.org/) package can render into a pole figure image. The filter does not draw the pole figure itself — it writes the data file that GMT then turns into a picture. -![GMT Visualization of the Small IN100 GBCD Results](Images/WriteGBCDGMTFile.png) +### What is a GBCD Pole Figure? + +A **grain boundary** is the internal interface where two grains (individual crystals) meet inside a material. The **grain boundary character distribution (GBCD)** measures how often boundaries of a particular crystallographic character occur, compared to what a completely random arrangement would produce. + +For a chosen **misorientation** (the rotation that relates the crystal orientations of the two grains on either side of a boundary), the GBCD describes how the boundary-plane normals are distributed in space. That distribution is displayed on a **pole figure**: a 2D circular plot that maps 3D directions onto a disk. The plotted values are in **multiples of a random distribution (MRD)**, where *1.0* means "as common as a random arrangement" and values above *1.0* mark boundary planes that occur more often than random. + +### What This Filter Does + +This filter is one step in an external toolchain: + +[Compute GBCD](ComputeGBCDFilter.md) → **Write GBCD Pole Figure (GMT 5)** → GMT → rendered pole figure + +It samples the GBCD for the selected phase and misorientation and writes the result to a `.dat` text file. GMT (a separate, freely available command-line mapping toolkit) reads that file to produce the final image. + +### Parameter Guidance + +- **Phase of Interest** — the 1-based index of the **Ensemble** (phase) whose boundaries are plotted. A value of *1* selects the first real phase; index *0* is reserved for the unindexed/background ensemble. This value is a dimensionless index. +- **Misorientation Axis-Angle** — selects which boundary misorientation to plot. The first value is the misorientation **angle in degrees**; the remaining three are the crystallographic axis **(h, k, l)**, a dimensionless crystal direction. For example, *60° about (1, 1, 1)* selects the Σ3 twin misorientation common in cubic materials. +- **Output GMT File** — the path of the `.dat` file to write. GMT reads this file to draw the pole figure. + +![GMT visualization of the Small IN100 GBCD results. The contours show the distribution of grain-boundary plane normals (in MRD) for the selected misorientation.](Images/WriteGBCDGMTFile.png) + +### Required Input Sources + +- **GBCD** -- produced by [Compute GBCD](ComputeGBCDFilter.md). +- **Crystal Structures** -- typically read from EBSD data via [Read H5EBSD File](ReadH5EbsdFilter.md), [Read EDAX EBSD Data (.ang)](ReadAngDataFilter.md), or [Read Oxford Instr. EBSD Data (.ctf)](ReadCtfDataFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/OrientationAnalysis/docs/WriteGBCDTriangleDataFilter.md b/src/Plugins/OrientationAnalysis/docs/WriteGBCDTriangleDataFilter.md index e354bea86b..672ab37b22 100644 --- a/src/Plugins/OrientationAnalysis/docs/WriteGBCDTriangleDataFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/WriteGBCDTriangleDataFilter.md @@ -6,27 +6,43 @@ IO (Output) ## Description -This **Filter** writes relevant information about the Grain Boundary Character Distribution (GBCD) on an existing set of triangles. The information written includes the inward and outward Euler angles, normals, and areas for each triangle. The file format was originally defined by Prof. Greg Rohrer (CMU). +This filter writes a plain-text file describing the **grain boundary character distribution (GBCD)** for each triangle in a surface mesh. A **grain boundary** is the internal interface where two grains (individual crystals) meet inside a material; a surface mesh represents those interfaces as a collection of triangles in a **Triangle Geometry**. -## Example Output +For every boundary triangle the filter writes one line per triangle containing: - # Triangles Produced from DREAM3D version 5.2 - # Column 1-3: right hand average orientation (phi1, PHI, phi2 in RADIANS) - # Column 4-6: left hand average orientation (phi1, PHI, phi2 in RADIANS) - # Column 7-9: triangle normal - # Column 8: surface area +- The **average crystal orientation** of the grain on each side of the boundary, expressed as a set of Bunge **Euler angles** (phi1, PHI, phi2) in *radians*. +- The triangle **normal**, a unit direction (three unitless direction cosines) pointing perpendicular to the triangle face. +- The triangle **surface area**, in the squared units of the mesh vertex coordinates (square microns for typical EBSD data). + +### Inward / Outward (Left / Right) Average Orientations + +Each boundary triangle separates exactly two grains. The "right hand" (outward) and "left hand" (inward) average orientations are simply the average crystal orientations of those two grains, one on each side of the triangle. Listing both sides lets downstream tools reconstruct the **misorientation** (the rotation relating the two grains) across the boundary. + +### File Format + +The file begins with comment lines describing the ten data columns, followed by one row per triangle. Each row has ten space-separated values: + + # Column 1-3: right hand (outward) average orientation (phi1, PHI, phi2 in RADIANS) + # Column 4-6: left hand (inward) average orientation (phi1, PHI, phi2 in RADIANS) + # Column 7-9: triangle normal (unitless direction cosines) + # Column 10: triangle surface area 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 0.0000 0.8829 -0.4696 0.0240 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 0.4532 0.3203 -0.8319 0.0211 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 1.0000 0.0000 0.0000 0.0312 - 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 0.9939 0.0780 0.0780 0.0315 - 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 0.0000 0.9985 0.0551 0.0332 - 0.2662 0.6970 4.4347 0.7993 0.6738 3.5200 0.5074 0.7638 -0.3989 0.0260 0.7993 0.6738 3.5200 0.2662 0.6970 4.4347 0.0000 -0.7792 0.6268 0.0182 - 0.7993 0.6738 3.5200 0.2662 0.6970 4.4347 -0.5737 -0.0995 0.8130 0.0221 - 3.4109 0.6178 1.0586 0.2662 0.6970 4.4347 1.0000 0.0000 0.0000 0.0312 - 3.4109 0.6178 1.0586 0.2662 0.6970 4.4347 0.9822 0.1328 0.1328 0.0256 .. +The file format was originally defined by Prof. Gregory S. Rohrer (Carnegie Mellon University) for use with the Rohrer group's stereological grain-boundary analysis tools. See G. S. Rohrer, "Grain boundary energy anisotropy: a review," *Journal of Materials Science* 46 (2011) 5881-5895, and the associated GBCD/stereology software distributed by his group. + +### Required Input Sources + +- **Face Labels** -- produced by the surface-meshing step, [Create Surface Mesh (QuickMesh)](../SimplnxCore/QuickSurfaceMeshFilter.md). Identifies the two **Features** (grains) on either side of each triangle. +- **Face Normals** -- produced by [Compute Triangle Normals](../SimplnxCore/TriangleNormalFilter.md). +- **Face Areas** -- produced by [Compute Triangle Areas](../SimplnxCore/ComputeTriangleAreasFilter.md). +- **Average Euler Angles** -- per-**Feature** average orientations produced by [Compute Feature Average Orientations](ComputeAvgOrientationsFilter.md). + +Phase and orientation data for the grains ultimately come from an EBSD reader such as [Read H5EBSD File](ReadH5EbsdFilter.md), [Read EDAX EBSD Data (.ang)](ReadAngDataFilter.md), or [Read Oxford Instr. EBSD Data (.ctf)](ReadCtfDataFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/WriteINLFileFilter.md b/src/Plugins/OrientationAnalysis/docs/WriteINLFileFilter.md index a53b3c674a..1b1f02138a 100644 --- a/src/Plugins/OrientationAnalysis/docs/WriteINLFileFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/WriteINLFileFilter.md @@ -8,17 +8,19 @@ IO (Output) This **Filter** writes out **Cell** data from an **Image Geometry** to a file format used by the Idaho National Laboratory (INL). The format is columnar and space delimited, with header lines denoted by the "#" character. The columns are the following: -- phi1 -- Phi -- phi2 -- x Position (Microns) -- y Position (Microns) -- z Position (Microns) -- Feature Id -- Phase Id -- Symmetry - -Some information about the phase is included in the header section of the file in addition to values for the origin, step size, dimensions and number of **Features** in the file. +- phi1 -- first Bunge Euler angle, in **radians** +- Phi -- second Bunge Euler angle, in **radians** +- phi2 -- third Bunge Euler angle, in **radians** +- x Position -- in **microns** +- y Position -- in **microns** +- z Position -- in **microns** +- Feature Id -- the grain (feature) each cell belongs to +- Phase Id -- the ensemble (phase) each cell belongs to +- Symmetry -- the crystal-symmetry code for the cell's phase + +The **Symmetry** column holds the integer crystal-symmetry code corresponding to the cell's crystal structure (for example, *43* denotes cubic m-3m and *62* denotes hexagonal 6/mmm). The codes follow the EBSDLib `CrystalStructure` enumeration and are taken from the **Crystal Structures** ensemble array. + +Some information about the phase is included in the header section of the file in addition to values for the origin, step size, and dimensions. The origin, **step sizes** (`X_STEP`, `Y_STEP`, `Z_STEP`), and min/max positions in the header are all in **microns**. The header also reports the number of **Features** in the file. ## Example Output @@ -64,6 +66,13 @@ Some information about the phase is included in the header section of the file i 0.266234 0.697020 4.434729 -34.750004 10.250000 -29.000000 639 1 43 0.266234 0.697020 4.434729 -34.500004 10.250000 -29.000000 639 1 43 +## Required Input Sources + +- **Cell Euler Angles** -- typically read from EBSD data via [Read H5EBSD File](ReadH5EbsdFilter.md), [Read EDAX EBSD Data (.ang)](ReadAngDataFilter.md), or [Read Oxford Instr. EBSD Data (.ctf)](ReadCtfDataFilter.md). Must be in radians (Bunge Z-X-Z convention). +- **Cell Phases** -- read alongside the Euler angles from the same EBSD reader. +- **Crystal Structures** -- the **Ensemble**-level array read alongside the phases from the same EBSD reader. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](../SimplnxCore/ScalarSegmentFeaturesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/docs/WriteStatsGenOdfAngleFileFilter.md b/src/Plugins/OrientationAnalysis/docs/WriteStatsGenOdfAngleFileFilter.md index a247014250..9fe88d1efd 100644 --- a/src/Plugins/OrientationAnalysis/docs/WriteStatsGenOdfAngleFileFilter.md +++ b/src/Plugins/OrientationAnalysis/docs/WriteStatsGenOdfAngleFileFilter.md @@ -6,7 +6,7 @@ IO (Output) ## Description -This **Filter** is used in a workflow where the user would like to generate a synthetic microstructure with an ODF that matches (as closely as possible) an existing experimental data set or other data set that is being mimicked. The basic workflow is the following: +This **Filter** is used in a workflow where the user would like to generate a synthetic microstructure with an **Orientation Distribution Function (ODF)** that matches (as closely as possible) an existing experimental data set or other data set that is being mimicked. The ODF describes how crystallographic orientations are statistically distributed in the material. The basic workflow is the following: 1. Import Euler angle data (e.g., ANG or CTF files) 2. Optionally threshold the data so each cell is marked as allowable or not-allowable @@ -21,13 +21,13 @@ This **Filter** is used in a workflow where the user would like to generate a sy ## Important Change from Earlier Versions of StatsGenerator -StatsGenerator can not load data from standard .ang or .ctf files. If you want to get the ODF from an existing experimental data set and you have one of those files then you must use the functionality of this filter +StatsGenerator cannot load data from standard .ang or .ctf files. If you want to get the ODF from an existing experimental data set and you have one of those files then you must use the functionality of this filter. ## Notes on Implementation + A separate file is written for each phase + Spaces are the default as the delimiters between values. The user can select another value -+ Default values of 1.0 are used for both the *weight* and *sigma*. **If the user needs a stronger texture due to a low number of angles then larger values should be used such as 10, 100 or even 1000.** ++ Default values of 1.0 are used for both the *weight* and *sigma*. Both values are dimensionless. **If the user needs a stronger texture due to a low number of angles then larger values should be used such as 10, 100 or even 1000.** + The user has the option to convert the supplied Euler angles to degrees. **StatsGenerator** is able to import Euler angles as either degrees or radians based on user input, so the output type from this **Filter** could remain as radians or be converted to degrees. The user should remain cognizant of what representation their angles are in so that the correct option is chosen during the import process in **StatsGenerator** ## Example File @@ -62,6 +62,12 @@ The *Delimiter* parameter provides the following choices: - **: (colon) [3]**: Uses a colon as the column separator. - **\t (tab) [4]**: Uses a tab character as the column separator. +## Required Input Sources + +- **Euler Angles** -- typically read from EBSD data via [Read H5EBSD File](ReadH5EbsdFilter.md), [Read EDAX EBSD Data (.ang)](ReadAngDataFilter.md), or [Read Oxford Instr. EBSD Data (.ctf)](ReadCtfDataFilter.md). Supplied in radians (Bunge Z-X-Z convention); use the *Convert to Degrees* option only if **StatsGenerator** will import them as degrees. +- **Phases** -- read alongside the Euler angles from the same EBSD reader. A separate output file is written for each phase. +- **Mask** (optional) -- typically produced by [Multi-Threshold Objects](../SimplnxCore/MultiThresholdObjectsFilter.md). Only required when *Only Write Good Elements* is checked. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/WriteGBCDTriangleData.cpp b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/WriteGBCDTriangleData.cpp index 3640b156eb..4491620267 100644 --- a/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/WriteGBCDTriangleData.cpp +++ b/src/Plugins/OrientationAnalysis/src/OrientationAnalysis/Filters/Algorithms/WriteGBCDTriangleData.cpp @@ -43,7 +43,7 @@ Result<> WriteGBCDTriangleData::operator()() fprintf(f, "# Column 1-3: right hand average orientation (phi1, PHI, phi2 in RADIANS)\n"); fprintf(f, "# Column 4-6: left hand average orientation (phi1, PHI, phi2 in RADIANS)\n"); fprintf(f, "# Column 7-9: triangle normal\n"); - fprintf(f, "# Column 8: surface area\n"); + fprintf(f, "# Column 10: surface area\n"); int32 gid0 = 0; // Feature identifier 0 int32 gid1 = 0; // Feature identifier 1 diff --git a/src/Plugins/SimplnxCore/docs/AddBadDataFilter.md b/src/Plugins/SimplnxCore/docs/AddBadDataFilter.md index fd8d6ea231..c8095347ce 100644 --- a/src/Plugins/SimplnxCore/docs/AddBadDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/AddBadDataFilter.md @@ -6,11 +6,43 @@ Synthetic Building (Misc) ## Description -This **Filter** adds "bad" data to an **Image Geometry**. This **Filter** is intended to add "realism" (i.e., more representative of an experimental dataset) to synthetic structures that don not have any "bad" **Cells**. The user can choose to add "random noise" and/or "noise" along **Feature** boundaries. For a given type of noise, the user must then set the volume fraction of **Cells** to set as "bad". The volume fractions entered apply to only the set of **Cells** that the noise would affect. For example, if the user chose *0.2* for the volume fraction of boundary "noise", then each boundary **Cell** would have a *20%* chance of being changed to a "bad" **Cell** and all other **Cells** would have a *0%* chance of being changed. In order to compute noise over the **Feature** boundaries, the **Filter** needs the Manhattan distances for each **Cell** from the **Feature** boundaries. Note that the computed Manhattan distances are floating point values, but this **Filter** requires an integer array. To create the necessary integer array, use the Convert Attributer Data Type **Filter** to cast the Manhattan distance array to an integer array. +This **Filter** adds synthetic *bad data* to a clean **Image Geometry**. It is intended to make synthetic microstructures look more like real experimental data, which always contains some unindexed cells, noise points, and boundary artifacts. The user controls how much noise to add and where (random throughout the volume, along feature boundaries, or both). -All **Attribute Arrays** that belong to the same **Attribute Matrix** as the selected *Feature Boundary Euclidean Distances* array will have noise added to them. To flag a value as "noise", this **Filter** will initialize a selected *tuple* in the **Attribute Array** to **0**. Note that a zero value *may not* necessarily represent a "bad" data point in any kind of **Attribute Array**. +### Why Use This Filter? -For more information on synthetic building, visit the tutorial. +Synthetic microstructures generated by reconstruction or packing pipelines have perfectly clean cell data -- every cell is assigned to a feature with a valid orientation. Real EBSD scans never look like that. When a synthetic structure is used to seed a downstream simulation that will eventually be compared against experimental measurements, that perfection becomes a problem: the cleanup filters in the experimental pipeline (e.g., [Fill Bad Data](FillBadDataFilter.md), [Neighbor Orientation Correlation](../OrientationAnalysis/NeighborOrientationCorrelationFilter.md)) have nothing to do, and the comparison stops being apples-to-apples. Adding synthetic bad data lets you exercise the same cleanup pipeline on synthetic data as on experimental data. + +### Random vs. Boundary Noise + +The filter supports two independent noise modes; either, both, or neither can be enabled. + +- **Random Noise** (Poisson) -- bad cells are scattered uniformly throughout the volume. Models random non-indexed points caused by detector dropout, surface contamination, or low signal. +- **Boundary Noise** -- bad cells are placed only on cells near a **Feature** boundary. Models the practical reality that EBSD signal is weakest right at grain boundaries, where the beam straddles two crystal orientations. + +### Volume Fraction Semantics + +For each enabled noise mode, the user specifies a *volume fraction* between 0 and 1. **The fraction applies only to the cells that the noise mode would affect, not the whole volume:** + +- *Random* volume fraction = 0.2 -> each cell anywhere in the volume has a 20% chance of being marked bad. +- *Boundary* volume fraction = 0.2 -> each *boundary* cell has a 20% chance of being marked bad. Non-boundary cells are unaffected (0% chance). + +This means a volume fraction of 0.2 in boundary-only mode introduces far fewer bad cells than 0.2 in random mode, because only boundary cells are at risk. + +### What "Bad" Means in Output + +To flag a cell as bad, the filter sets the corresponding tuple in every **Attribute Array** in the same **Attribute Matrix** as the *Boundary Euclidean Distances* input to **0**. This includes Feature Ids, Phases, Quaternions, and any other cell-level data sharing that matrix. Be aware that "0" may be a legitimate value for some arrays (e.g., a phase index) and that the convention here is shared with experimental cleanup filters that interpret Feature Id 0 as bad. + +### Prerequisite Steps + +This filter needs to know which cells are near a feature boundary. That information comes from a Manhattan-distance map, which must be computed and converted before this filter runs: + +1. Run [Compute Euclidean Distance Map](ComputeEuclideanDistMapFilter.md) on the segmented data to produce a *Boundary Euclidean Distances* array (cell-level, float32). +2. Run [Convert Data Type](ConvertDataFilter.md) on that array to cast it to an integer type. This filter's input requires an integer array. + +### Required Input Sources + +- **Boundary Euclidean Distances** (integer array) -- produced by [Compute Euclidean Distance Map](ComputeEuclideanDistMapFilter.md), then cast to integer with [Convert Data Type](ConvertDataFilter.md). +- **Image Geometry** containing cell-level data -- typically a synthetic structure from a packing or reconstruction pipeline. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/AlignSectionsFeatureCentroidFilter.md b/src/Plugins/SimplnxCore/docs/AlignSectionsFeatureCentroidFilter.md index aa02d810ce..3694e5302f 100644 --- a/src/Plugins/SimplnxCore/docs/AlignSectionsFeatureCentroidFilter.md +++ b/src/Plugins/SimplnxCore/docs/AlignSectionsFeatureCentroidFilter.md @@ -6,17 +6,27 @@ Reconstruction (Alignment) ## Description -This **Filter** attempts to align 'sections' of the sample perpendicular to the Z-direction by determining the position that closest aligns the centroid(s) of previously defined "regions". The "regions" are defined by a boolean array where the **Cells** have been flagged by another **Filter**. Typically, during reading/processing of the data, each **Cell** is subject to a "quality metric" (or threshold) that defines if the **Cell** is *good*. This threshold can be used to define areas of each slice that are bad, either due to actual features in the microstructure or external references inserted by the user/experimentalist. If these "regions" of *bad* **Cells** are believed to be consistent through sections, then this **Filter** will preserve that by aligning those "regions" on top of one another on consecutive sections. The algorithm of this **Filter** is as follows: +This **Filter** aligns serial sections (2D slices stacked along the Z-direction) by shifting each section so that the centroid of a user-defined region lines up from one section to the next. This is one of several section alignment methods available in DREAM3DNX. -1. Determine the centroid of all **Cells** that are flagged with a boolean value equal to *true* for each section -2. Determine the shifts that place centroids of consecutive sections on top of one another -3. Round the shifts determined in step 2 to the nearest multiple of the **Cell** resolution. (This forces the sections to be shifted by full **Cell** increments) +### When to Use This Method -If the user elects to *Use Reference Slice*, then each section's centroid is shifted to lie on top of the reference slice's centroid position and not its neighboring section's centroid position. +This method works well when a consistent region of interest (defined by a boolean mask) can be identified across all slices. For example, if a quality threshold has been applied so that "good" cells are flagged as *true*, the centroid of those *true* cells represents the center of the usable data on each slice. Aligning these centroids stacks the usable regions on top of each other. -**Note that this is algorithm cannot get caught in a local minimum!** +Unlike the misorientation-based and mutual-information-based alignment methods, the centroid method **cannot get caught in a local minimum**, making it more robust for certain datasets. -The user can also decide to remove a *background shift* present in the sample. The process for this is to fit a line to the X and Y shifts along the Z-direction of the sample. The individual shifts are then modified to make the slope of the fit line be 0. Effectively, this process is trying to keep the top and bottom section of the sample fixed. Some combinations of sample geometry and internal features can result in this algorithm introducing a 'shear' in the sample and the *Linear Background Subtraction* will attempt to correct for this. +### How This Filter Works + +1. For each section (Z-slice), compute the centroid of all **Cells** where the boolean mask is *true* +2. Compute the X and Y shifts needed to align each section's centroid with the previous section's centroid +3. Round the shifts to the nearest multiple of the **Cell** resolution (sections are shifted by whole-cell increments) + +### Reference Slice Option + +If *Use Reference Slice* is enabled, each section is shifted to align with a single fixed reference slice rather than its immediate neighbor. This prevents small errors from accumulating across many sections. + +### Linear Background Subtraction + +Some combinations of sample geometry and internal features can cause the alignment to introduce a gradual "shear" across the sample. Enabling *Linear Background Subtraction* corrects for this by fitting a line to the X and Y shifts along the Z-direction and removing the linear trend. This effectively keeps the top and bottom sections of the sample fixed relative to each other. ## Optional Output Data @@ -43,12 +53,15 @@ In this new structure, what follows is what the created structures represent: In previous versions a file would have been produced instead. If you wish to recreate this, you can write the Attribute Matrix as a CSV/Text file. +### Required Input Sources + +- **Mask** -- a boolean array marking valid cells, typically produced by a threshold operation such as [Multi-Threshold Objects](MultiThresholdObjectsFilter.md) applied to quality or confidence-index arrays. % Auto generated parameter table will be inserted here ## Example Pipelines -+ (02) Small IN100 Full Reconstruction ++ `(02) Small IN100 Full Reconstruction` ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/AlignSectionsListFilter.md b/src/Plugins/SimplnxCore/docs/AlignSectionsListFilter.md index f361fc9597..61abab9ac6 100644 --- a/src/Plugins/SimplnxCore/docs/AlignSectionsListFilter.md +++ b/src/Plugins/SimplnxCore/docs/AlignSectionsListFilter.md @@ -6,81 +6,57 @@ Reconstruction (Alignment) ## Description -This **Filter** will apply the precalculated cell shifts to each section of an Image Geometry. It allows for both *relative* or *cumulative* cell shifts. The difference between the two being the former is dependent on the previous slice's position. Under the covers, relative is translated to cumulative before applying shifts to the cells themselves. Previously, the only accepted input was utilizing relative shifts, so use those for backwards compatibility. See the **Handling User Created Shifts File** and **Example Pipelines** sections of this documentation for further hints. +This **Filter** applies precomputed cell shifts to each section of an **Image Geometry**. Unlike the other alignment filters (which calculate shifts automatically), this filter takes a set of known X and Y shifts as input and applies them directly. This is useful for: -### Input Array Type +- Applying shifts that were computed by another alignment filter in a previous run +- Applying user-measured or externally-calculated alignment corrections +- Re-applying a known good alignment to a dataset -The *Input Array Type* parameter controls how the shift values in the input arrays are interpreted: +### Shift Units -- **Relative [0]**: Each shift value is a relative offset between adjacent sections. The shift for section N describes how far section N has moved compared to section N-1. These values are internally converted to cumulative shifts before being applied. -- **Cumulative [1]**: Each shift value is an absolute (cumulative) offset measured from a fixed reference point. The shift for section N describes how far section N has moved from that reference. +All shift values are in **cell (voxel) units**, not physical units. A shift of 3 means move the section by 3 cells, regardless of the cell's physical size (spacing). The shifts must be integers. -## Handling User Created Shifts File +### Relative vs. Cumulative Shifts -In this section we will be covering how to get a user defined shift file into the algorithm. This has been included in the documentation for posterity, as the capability was removed in order to offer a less rigid file structuring and to centralize the I/O paradigm. +The input shifts can be provided in either format: -### File Information +- **Relative [0]**: Each shift describes the offset of section N relative to section N-1. The filter internally converts these to cumulative shifts before applying them. +- **Cumulative [1]**: Each shift describes the absolute offset of section N from a fixed reference point. -**Requirements:** - -- The number of shifts (`x` and `y` both) must be equivalent to the number of slices (Z dimension of the geometry) -- The slices must be ordered from the bottom of the sample to the top of the sample. +### Preparing Shift Data from a File -If using relative shifts for the algorithm, the first line of shifts should be the second slice relative to the first, then the next line is the third slice relative to the second, and so on +If your shifts are stored in an external file, you need to import them into a DataArray before using this filter: -**Recommendations:** +**Requirements:** +- The number of shift entries must equal the number of slices (Z dimension of the geometry) +- Slices must be ordered from bottom to top -The **user** created alignment file is recommended have the format as follows: +**Recommended file format** (space-delimited, two values per line): ```console xshift yshift xshift yshift xshift yshift -etc... -``` - -**Backwards Compatibility Information:** - -For versions of 7.0.3 and below, the DREAM3D and DREAM3DNX produced had the following format: - -```console -slice_m slice_m+1 newxshift newyshift xshifts yshifts -slice_n slice_n+1 newxshift newyshift xshifts yshifts -etc... +... ``` -Where: - -- `newxshift` and `newyshift` were the relative shifts -- `xshifts` and `yshifts` were the cumulative shifts. -- `xcentroid` and `ycentroid` were appended to the end for `AlignSectionsFeatureCentroid` - -**Note: Previous implementations of `AlignSectionsFeatureCentroid` were printing zeros for the relative shifts, so if you are using a file produced by that you must use cumulative shifts.** - -### Importing - -Use "Read CSV File" (`ReadCSVFileFilter`) or "Read Text Data Array" (`ReadTextDataArrayFilter`) to get your data into an array. - -**Recommendations:** - -If you have a file matching the recommended **user** created alignement file above, the process can be expidited with "Read Text Data Array" (`ReadTextDataArrayFilter`). +**To import this format:** -To do so: +1. Use the [Read Text Data Array](ReadTextDataArrayFilter.md) filter +2. Set *Input Numeric Type* to `signed int 64 bit` +3. Set *Number of Components* to `2` +4. Set *Delimiter* to space +5. Set the *Data Array Dimensions* to match the Z dimension of your geometry -1. supply your file in the "Input Text File" parameter -2. set "Input Numeric Type" parameter to `signed int 64 bit` -3. set "Number of Components" parameter to `2` -4. change the "Delimiter" parameter to ` (space)` (index number `2` for python) -5. in the "Created Array Path" parameter, leave the path empty, and name it according to the type of shifts ("relative_shifts" or "cumulative_shifts") -6. get the tuple dims of the Z dimension of your geometry, and put it into the "Data Array Dimensions (Slowest to Fastest)" parameter +For more complex file formats (e.g., legacy DREAM3D alignment files with 6 columns), use the [Read CSV File](ReadCSVFileFilter.md) filter instead. See the backwards compatibility example pipeline for details. -**Backwards Compatibility Information:** +### Note on Legacy Files -For alignment shifts files from the previous version, you **must** use the "Read CSV File" (`ReadCSVFileFilter`). This is a complicated filter parameter wise, so see the documentation provided with the filter. It is recommended to store these in an Attribute Matrix with dimensions equivalent to that of the Z dimension of the target geometry. +Alignment shift files from DREAM3D/DREAM3DNX versions 7.0.3 and earlier used a 6-column format with both relative and cumulative shifts. If using these files, import via the [Read CSV File](ReadCSVFileFilter.md) filter and select the appropriate columns. Files produced by the legacy `AlignSectionsFeatureCentroid` contained zeros for relative shifts -- use cumulative shifts for those. -### Conclusion +### Required Input Sources -The imported data should be prepared and compatible with the Align Sections List input by now. If you have further questions see one of the example pipelines below. +- **Cell Shifts Array** -- a two-component int64 array with one entry per Z-slice. Import this from an external file using [Read Text Data Array](ReadTextDataArrayFilter.md) (simple format) or [Read CSV File](ReadCSVFileFilter.md) (complex/legacy format); or pass the *Relative Shifts* / *Cumulative Shifts* array produced by another alignment filter such as [Align Sections (Feature Centroid)](AlignSectionsFeatureCentroidFilter.md), [Align Sections (Misorientation)](../OrientationAnalysis/AlignSectionsMisorientationFilter.md), or [Align Sections (Mutual Information)](../OrientationAnalysis/AlignSectionsMutualInformationFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/AppendImageGeometryFilter.md b/src/Plugins/SimplnxCore/docs/AppendImageGeometryFilter.md index 461278fb64..a5193b6835 100644 --- a/src/Plugins/SimplnxCore/docs/AppendImageGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/AppendImageGeometryFilter.md @@ -6,8 +6,9 @@ Sampling (Memory/Management) ## Description -This filter allows the user to append one or multiple image geometries to a given image geometry, in any direction (X,Y,Z). The input and -destination **ImageGeometry** objects must have the same dimensions in the directions that are NOT chosen. If the X direction is chosen, the geometries must match in Y & Z. If the Y direction is chosen, the geometries must match in X & Z. If the Z direction is chosen, the geometries must match in X & Y. Optional checks for equal **Resolution** values can also be performed. +This **Filter** appends one or more **Image Geometries** to a destination Image Geometry along a chosen axis (X, Y, or Z), producing a single larger Image Geometry. The input geometries must have matching dimensions in the two axes that are *not* the append direction. Optionally, the filter can also verify that the input and destination geometries have matching spacing on all axes before appending. + +For an introduction to Image Geometry dimensions and spacing, see [Create Image Geometry](CreateImageGeometryFilter.md). This filter also has an option to mirror the resulting geometry in the chosen direction. If the X direction is chosen, it will mirror the positions of the YZ planes. If the Y direction is chosen, it will mirror the positions of the XZ planes. If the Z direction is chosen, it will mirror the positions of the XY planes. @@ -94,6 +95,10 @@ And here is what the geometry looks like after appending the three pieces togeth | ![](Images/AppendImageGeometry/z_complete.png) | ![](Images/AppendImageGeometry/z_mirrored.png) | |:----------------------:|:----------------------:| +### Required Input Sources + +- **Destination Image Geometry** and **Input Image Geometries** -- all geometries to be appended. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. All must share matching cell-level Attribute Array names if cell data is to be preserved during the append. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ApplyTransformationToGeometryFilter.md b/src/Plugins/SimplnxCore/docs/ApplyTransformationToGeometryFilter.md index 17595465f7..ad1814b64f 100644 --- a/src/Plugins/SimplnxCore/docs/ApplyTransformationToGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/ApplyTransformationToGeometryFilter.md @@ -6,137 +6,97 @@ Rotation, Scale & Transformation ## Description -This **Filter** applies a spatial transformation to either a node **Geometry** or an **Image Geometry**. +This **Filter** applies a spatial transformation -- rotation, translation, scaling, or an arbitrary 4x4 matrix -- to a **Geometry**. Both **Image Geometries** and node-based geometries (Vertex, Edge, Triangle, Quadrilateral, Tetrahedral, Hexahedral) are supported. -### Node Geometries +![Fig. 1: The "Rotation" transform type rotates the geometry by an angle θ (in degrees) about a user-specified axis (x, y, z). Unlike Rotate Sample Reference Frame, this is a true geometric transform that moves the geometry itself.](Images/ApplyTransformationToGeometry_AxisAngle.png) - A node **Geometry** is any geometry that requires explicit definition of **Vertex** positions. Specifically, **Vertex**, **Edge**, **Triangle**, **Quadrilateral**, and **Tetrahedral** **Geometries** may be transformed by this **Filter**. The transformation is applied in place, so the input **Geometry** will be modified. +### Node Geometries -- **NO** interpolation will take place as the only changes that take place are the actual coordinates of the vertices. +For node-based geometries, the transformation modifies vertex positions only. No interpolation occurs. Multiple transformations can be applied in succession without artifacts. ### Image Geometry -If the user selects an **Image Geometry** then there are 2 additional required filter parameters that need to be set: - -- **Interpolation Method**: This will be used when transferring the data from the old geometry to the newly transformed geometry. -- **Cell Attribute Matrix**: This Attribute Matrix holds the data that is associated with each cell of the image geometry. - -The linear/Bi-Linear/Tri-Linear Interpolation is adapted from the equations presented -in [https://www.cs.purdue.edu/homes/cs530/slides/04.DataStructure.pdf, page 36}](https://www.cs.purdue.edu/homes/cs530/slides/04.DataStructure.pdf) +For Image Geometries, transformation requires re-gridding because cell positions are implicit in the grid spacing and origin. After transformation, a new grid is generated and cell data is interpolated onto it. This is governed by two extra parameters: -## Example Image Geometry Transformations - -| Description | Example Output Image | -|-------------|----------------------| -| Input Image | ![Input Image](Images/ApplyTransformation_AsRead.png) | -| After Rotation of 45 Degrees around the <001> axis | ![Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_Rotated.png) | -| Scaled by 2x in the X and Y axis | ![Scaled by 2x in the X and Y axis.](Images/ApplyTransformation_Scaled.png) | +- **Interpolation Method** -- how cell data values are sampled from the old grid (see below). +- **Cell Attribute Matrix** -- which attribute matrix holds the cell data to transform. -## Image Geometry Caveat +### Image Geometry Caveat: Successive Transformations -Using this filter several times in a row to apply several transforms in succession to the same image geometry is highly likely to result in visual artifacts related to the intermediate re-gridding of the image geometry between transformations. For example, let's rotate an image geometry 90 degrees along the Z axis: +Applying multiple transformations one-at-a-time to an Image Geometry produces visible re-gridding artifacts because each intermediate step re-samples the data. The following example shows a 90-degree rotation done as a single step versus as two 45-degree steps: | Description | Image | |-------------|----------------------| | Input Image | ![Input Image](Images/ApplyTransformation_ImageGeom.png) | -| After Rotation of 90 Degrees around the <001> axis | ![Rotation of 90 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final.png) | +| After single 90-degree rotation around <001> | ![Rotation of 90 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final.png) | +| After first 45-degree rotation | ![1st Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Intermediate.png) | +| After second 45-degree rotation (artifacts visible) | ![2nd Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final_Artifacts.png) | -Instead of using a single rotation of 90 degrees, if the user has a need to instead apply several rotations that still add up to 90 degrees, for example a pair of 45 degree rotations, potential unwanted artifacts can occur due to the intermediate regridding for each rotation. - -| Description | Image | -|-------------|----------------------| -| Input Image | ![Input Image](Images/ApplyTransformation_ImageGeom.png) | -| After 1st Rotation of 45 Degrees around the <001> axis | ![1st Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Intermediate.png) | -| After 2nd Rotation of 45 Degrees around the <001> axis | ![2nd Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final_Artifacts.png) | - -Why does this happen? Let's overlay the centers of each cell on top of the original image geometry. +The problem is that after the first 45-degree rotation, the cell centers no longer align with the new grid cells -- the re-gridding has shifted them. On the second rotation, those misalignments compound. | Description | Image | |-------------|----------------------| | Input Image | ![Input Image](Images/ApplyTransformation_ImageGeom_WithVertices.png) | -| After 1st Rotation of 45 Degrees around the <001> axis | ![1st Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Intermediate_WithVertices.png) | - -The green vertices refer to the center of each image geometry cell. As you can see, after the first 45 degree rotation, the image geometry is re-gridded and now the transformed green vertices are no longer in the center of each cell. - -On the 2nd and final 45 degree rotation, the image geometry is going to double in size because the algorithm doesn't know the final image geometry's exact size and doubles its size to account for the worst case scenario. +| After 1st 45-degree rotation (cell centers in green) | ![1st Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Intermediate_WithVertices.png) | -Let's see how the transformed green vertices overlay on the intermediate image geometry when the field of vertices has doubled in size but the image geometry hasn't actually been transformed a 2nd time yet. +To avoid these artifacts, **combine all transformations into a single 4x4 matrix first** using [Combine Transformation Matrices](CombineTransformationMatricesFilter.md), then apply that combined matrix as a single transformation: | Description | Image | |-------------|----------------------| -| After 1st Rotation of 45 Degrees around the <001> axis | ![1st Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Intermediate_WithVertices2.png) | +| Combined 90-degree rotation applied once | ![Combined Rotation of 90 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final.png) | -The cell circled in purple has two green vertices inside it. This means that once the 2nd 45 degree transformation is completed, the final image geometry will have that orange color shifted outside where we would expect it to be. And sure enough: +This caveat only applies to Image Geometries. Node-based geometries can have any number of transformations chained without issue. -| Description | Image | -|-------------|----------------------| -| After 2nd Rotation of 45 Degrees around the <001> axis | ![2nd Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final_Artifacts2.png) | +### Example Transformations (Image Geometry) -To avoid this problem, it is considered best practice to use the *[Combine Transformation Matrices](CombineTransformationMatricesFilter.md)* filter to combine all transforms together into one transform before applying the transform to an image geometry. - -| Description | Image | +| Description | Example Output Image | |-------------|----------------------| -| After combining both 45 degree rotations and applying around the <001> axis | ![Rotation of 90 Degrees around the <0,0,1> axis](Images/ApplyTransformation_ImageGeom_Final.png) | - -## NOTE: - -This caveat is ONLY for image geometries. Multiple transformations can be applied in succession to any of the "Node" based geometries without any issues. Those are: - -- Vertex -- Edge -- Triangle -- Quad -- Tetrahedral -- Hexahedral - -## Transformation Information +| Input Image | ![Input Image](Images/ApplyTransformation_AsRead.png) | +| 45-degree rotation around <001> | ![Rotation of 45 Degrees around the <0,0,1> axis](Images/ApplyTransformation_Rotated.png) | +| 2x scale in X and Y | ![Scaled by 2x in the X and Y axis.](Images/ApplyTransformation_Scaled.png) | ### Transformation Type -The *Transformation Type* parameter provides the following choices: - -- **No Transform [0]**: Applies an identity transformation; the geometry is unchanged. -- **Pre-Computed Transformation Matrix (4x4) [1]**: Uses a 4x4 transformation matrix supplied as an Attribute Array in row major order. -- **Manual Transformation Matrix [2]**: Uses a manually entered 4x4 transformation matrix. -- **Rotation [3]**: Rotates about a supplied axis-angle with the angle specified in degrees. -- **Translation [4]**: Translates the geometry by the supplied (x, y, z) values. -- **Scale [5]**: Scales the geometry by the supplied (x, y, z) values. +The *Transformation Type* parameter selects how the transformation is specified: -The user may select from a variety of options for the type of transformation to apply: +| Value | Type | Description | +|---|---|---| +| 0 | No Transform | Identity (geometry unchanged). | +| 1 | Pre-Computed Transformation Matrix (4x4) | A 4x4 matrix supplied as a 16-element float32 Attribute Array in row-major order. | +| 2 | Manual Transformation Matrix | A 4x4 matrix typed in directly. | +| 3 | Rotation | Axis-angle: a unit vector (x, y, z) and an angle in **degrees**. | +| 4 | Translation | A (dx, dy, dz) translation vector in the geometry's physical units. | +| 5 | Scale | A (sx, sy, sz) scaling vector (dimensionless multipliers). | -| Enum Value | Transformation Type | Representation | -|------------|------------------------------------|--------------------------------------------------------------------------------------| -| 0 | No Transformation | Identity transformation | -| 1 | Pre-Computed Transformation Matrix | A 4x4 transformation matrix, supplied by an **Attribute Array** in *row major* order | -| 2 | Manual Transformation Matrix | Manually entered 4x4 transformation matrix | -| 3 | Rotation | Rotation about the supplied axis-angle (Angle in Degrees). | -| 4 | Translation | Translation by the supplied (x, y, z) values | -| 5 | Scale | Scaling by the supplied (x, y, z) values | +The linear / bi-linear / tri-linear interpolation math is adapted from [Purdue CS530 slides, page 36](https://www.cs.purdue.edu/homes/cs530/slides/04.DataStructure.pdf). -The **Translate Geometry To Global Origin Before Transformation** option must be selected if the user wants to translate their volume to (0, 0, 0), apply the transform, and then translate the volume back to its original location. +If *Translate Geometry To Global Origin Before Transformation* is enabled, the geometry is shifted so its centroid sits at (0, 0, 0) before the transformation is applied, then translated back. Use this to rotate about the geometry's center rather than the world origin. -### Resampling or Interpolation (Image Geometry Only) +### Interpolation Method (Image Geometry Only) -When transforming an **Image Geometry**, the *Resampling or Interpolation* parameter controls how cell data values are assigned in the newly created grid: +- **Nearest Neighbor [0]** -- each output cell takes the value of the nearest input cell. Fast; preserves sharp boundaries; blocky. +- **Linear (trilinear in 3D) [1]** -- each output cell value is interpolated from surrounding input cells. Smoother; may blur sharp features. +- **No Interpolation [2]** -- no resampling. Use only when the transformation does not change the grid topology (e.g., integer translations that align exactly with the existing grid). -- **Nearest Neighbor Resampling [0]**: Each output cell takes the value of the nearest input cell. This is fast and preserves sharp boundaries, but may produce a blocky appearance. -- **Linear Interpolation [1]**: Each output cell value is computed using trilinear interpolation from the surrounding input cells. This produces smoother results but may blur sharp features. -- **No Interpolation [2]**: The transformation is applied without any resampling of cell data. Use this option when the transformation does not change the grid topology (e.g., integer translations that align exactly with the existing grid). +### Saving the Final Transformation Matrix -## Saving the final transformation Matrix. - -There is an option to save the final transformation matrix into its own array. The format of the output DataArray is a -flattened array 16 elements in size that represents a 4x4 matrix. The elements are encoded in a ROW MAJOR array, i.e., +Optionally, the final 4x4 transformation matrix can be saved as an Attribute Array. The output is a 16-element float32 array in **row-major** order: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -represents the following 4x4 Matrix +represents the 4x4 matrix: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +### Required Input Sources + +- **Geometry** -- any supported geometry; for Image Geometry workflows, typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. +- **Pre-Computed Transformation Matrix** (only for Transformation Type 1) -- typically produced by [Combine Transformation Matrices](CombineTransformationMatricesFilter.md). +- **Cell Attribute Matrix** (Image Geometry only) -- the cell-level data to be re-gridded. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ApproximatePointCloudHullFilter.md b/src/Plugins/SimplnxCore/docs/ApproximatePointCloudHullFilter.md index 573882d2b4..ce9eb94b30 100644 --- a/src/Plugins/SimplnxCore/docs/ApproximatePointCloudHullFilter.md +++ b/src/Plugins/SimplnxCore/docs/ApproximatePointCloudHullFilter.md @@ -6,24 +6,33 @@ Point Cloud (Geometry) ## Description -This **Filter** determines a set of points that approximates the surface (or *hull*) or a 3D point cloud represented by a **Vertex Geometry**. The hull is approximate in that the surface points are not guaranteed to hve belonged to the original point cloud; instead, the determined set of points is meant to represent a sampling of where the 3D point cloud surface occurs. To following steps are used to approximate the hull: +This **Filter** determines a set of points that approximates the surface (or *hull*) of a 3D point cloud represented by a **Vertex Geometry**. The hull is approximate in that the surface points are not guaranteed to have belonged to the original point cloud; instead, the determined set of points is meant to represent a sampling of where the 3D point cloud surface occurs. The following steps are used to approximate the hull: -1. A structured rectilinear grid with user-defined resolution is overlaid on the point cloud. +1. A structured rectilinear grid with user-defined resolution is overlaid on the point cloud. 2. Each point is mapped to the voxel it occupies in the sampling grid. 3. For each voxel in the sampling grid: 1. Each of its 26 neighbors is inspected to see if that neighbor contains any points. 2. If the number of empty neighbors exceeds a user-defined threshold, the voxel is flagged as a "surface voxel". 4. For each voxel flagged as a "surface voxel", the coordinates of the points in that voxel are averaged to produce a new point that is inserted into the hull. -The above algorithm is significantly faster that other geometric approaches for determining a point cloud surface, but yields only an approximate solution. Note that this approach is able of handling concavities in the point cloud, assuming the grid resolution is small enough to resolve any concavities. In general, a grid resolution should be chosen small enough to resolve any surface features of interest. The algorithm is also sensitive to the minimum number of empty neighbors parameter: consider modifying this parameter if the resulting hull is unsatisfactory. +The above algorithm is significantly faster than other geometric approaches for determining a point cloud surface, but yields only an approximate solution. Note that this approach is capable of handling concavities in the point cloud, assuming the grid resolution is small enough to resolve any concavities. In general, a grid resolution should be chosen small enough to resolve any surface features of interest. The algorithm is also sensitive to the minimum number of empty neighbors parameter: consider modifying this parameter if the resulting hull is unsatisfactory. + +### Parameter Guidance + +- **Grid Resolution** -- the X, Y, and Z edge lengths of the sampling grid voxels, expressed in the same coordinate units as the input point cloud's vertex coordinates. +- **Minimum Number of Empty Neighbors** -- a dimensionless count in the range 0 to 26 (a voxel has 26 neighbors in a 3D grid). A voxel is flagged as a surface voxel when its number of empty neighbors exceeds this value. Larger values flag fewer voxels (only those more exposed on the surface). Note that the resulting hull geometry does not inherit any **Attribute Arrays** from the original point cloud. +### Required Input Sources + +- **Vertex Geometry** -- the input 3D point cloud, typically created by an import step or by a filter that produces a **Vertex Geometry**. + % Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ArrayCalculatorFilter.md b/src/Plugins/SimplnxCore/docs/ArrayCalculatorFilter.md index bc12de72e2..bd119f7a2e 100644 --- a/src/Plugins/SimplnxCore/docs/ArrayCalculatorFilter.md +++ b/src/Plugins/SimplnxCore/docs/ArrayCalculatorFilter.md @@ -135,6 +135,11 @@ This equation takes the cube root of *8* and stores the result in an array with This equation raises *3* to the power of the value stored in every component of every tuple in *Array1*. The resulting array has the same tuple and component size of *Array1*. +### Required Input Sources + +- **Source Attribute Matrix** -- the Attribute Matrix that contains the input arrays referenced in the *Infix Expression*. +- **Output Attribute Matrix** -- an existing Attribute Matrix with the matching tuple count (or with exactly one tuple, when the expression contains no arrays). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ChangeAngleRepresentationFilter.md b/src/Plugins/SimplnxCore/docs/ChangeAngleRepresentationFilter.md index 0071c9233d..d8e35bf9f3 100644 --- a/src/Plugins/SimplnxCore/docs/ChangeAngleRepresentationFilter.md +++ b/src/Plugins/SimplnxCore/docs/ChangeAngleRepresentationFilter.md @@ -23,6 +23,10 @@ Generally, all **Filters** within DREAM3D-NX use radians as a default unit, but If the wrong conversion is selected (e.g., the user chooses *degrees to radians*, but their data is already in radians), the **Filter** will apply the conversion anyway and will result in erroneous data being used for the rest of the pipeline. If unsure about the units, check with the software supplier. +### Required Input Sources + +- An angle **Attribute Array** (e.g., Euler angles), typically read from EBSD data via [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), [Read CTF Data](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read ANG Data](../OrientationAnalysis/ReadAngDataFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/CombineAttributeArraysFilter.md b/src/Plugins/SimplnxCore/docs/CombineAttributeArraysFilter.md index 7284e2f57c..4b1925d925 100644 --- a/src/Plugins/SimplnxCore/docs/CombineAttributeArraysFilter.md +++ b/src/Plugins/SimplnxCore/docs/CombineAttributeArraysFilter.md @@ -32,6 +32,12 @@ The user may also select to normalize the resulting combined array. The normaliz **NOTE:** If you are wanting to instead concatenate/append data arrays together into a longer array, please see the [Concatenate Data Arrays](ConcatenateDataArraysFilter.md) filter. +A typical use case is building a multi-component coordinate or quaternion array from three or four separate single-component scalar arrays (e.g., combining `X_Coord`, `Y_Coord`, `Z_Coord` into a single 3-component `Vertices` array before passing to [Create Geometry](CreateGeometryFilter.md)). + +### Required Input Sources + +- **Input Attribute Arrays** -- two or more arrays of the same primitive type and tuple count, in the order you want their components to appear in the combined array. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/CombineNodeBasedGeometriesFilter.md b/src/Plugins/SimplnxCore/docs/CombineNodeBasedGeometriesFilter.md index 84f7150520..63a0273899 100644 --- a/src/Plugins/SimplnxCore/docs/CombineNodeBasedGeometriesFilter.md +++ b/src/Plugins/SimplnxCore/docs/CombineNodeBasedGeometriesFilter.md @@ -2,15 +2,19 @@ ## Group (Subgroup) -Core +Core (Combining) ## Description -This **Filter** will combine any node-based geometries together into one node-based geometry. The algorithm is governed by several rules: +This **Filter** merges two or more **node-based geometries** into a single combined geometry. A **node-based geometry** is any geometry built from a shared list of vertices (nodes) plus a connectivity that defines its elements: a **Vertex Geometry** (points only), an **Edge Geometry** (line segments), a **Triangle** or **Quadrilateral Geometry** (surface faces), or a **Tetrahedral** or **Hexahedral Geometry** (solid cells). -1. All input geometries must have the same geometry type. For example, inputting all Triangle geometries will output a combined Triangle geometry, all Edge geometries will output a combined Edge geometry, etc. -2. All input geometries must contain vertex and node data that have the exact same names, types, and component dimensions. For example, if one input geometry has an edges array with edges data arrays, all input geometries must have an edges array with edges data arrays that have the exact same names, types, and component dimensions. If one input geometry has vertex data arrays, then all input geometries must have vertex data arrays that all have the exact same names, types, and component dimensions. -3. Higher order input geometries can include lower order node data. For example, an input tetrahedral geometry can include edge data (as long as all input tetrahedral geometries contain edge data with the same names, types, and component dimensions). +When combining, the filter concatenates the vertex lists of all inputs into one list and then renumbers the connectivity. The element (cell) indices from each input geometry are shifted by the running total number of vertices contributed by all preceding geometries, so that every element continues to reference the correct vertices in the merged vertex list. **Duplicate or coincident vertices are *not* detected or merged** — if two inputs contain a vertex at the same physical location, both copies appear in the output. + +The algorithm is governed by several rules: + +1. All input geometries must have the same geometry type. For example, combining only **Triangle Geometries** produces a combined **Triangle Geometry**, and combining only **Edge Geometries** produces a combined **Edge Geometry**. +2. All input geometries must contain vertex and element data arrays with the exact same names, types, and component dimensions. For example, if one input has an edge data array, every input must have an edge data array with a matching name, type, and component dimension; the same requirement applies to vertex data arrays. +3. A **higher-order** geometry (one whose elements are built from more vertices, such as a **Tetrahedral Geometry**) may also carry the data of its **lower-order** elements. For example, a tetrahedral geometry may include edge data, as long as every input tetrahedral geometry includes matching edge data. *NOTE:* Any additional groups, attribute matrices, or arrays that are not one of the following: @@ -19,11 +23,13 @@ This **Filter** will combine any node-based geometries together into one node-ba 3. Face arrays or face data 4. Polyhedra arrays or polyhedra data -WILL BE ignored and will not exist in the geometry outputted by this filter. +will be ignored and will not appear in the geometry produced by this filter. -% Auto generated parameter table will be inserted here +### Required Input Sources -## Example Pipelines +- **Input Geometries** -- two or more **node-based geometries** of the *same* type. Surface meshes are typically produced by [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md); edge geometries by [Slice Triangle Geometry](SliceTriangleGeometryFilter.md) or [Create AM Scan Paths](CreateAMScanPathsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/CombineStlFilesFilter.md b/src/Plugins/SimplnxCore/docs/CombineStlFilesFilter.md index a951a6ef42..d8180d4bce 100644 --- a/src/Plugins/SimplnxCore/docs/CombineStlFilesFilter.md +++ b/src/Plugins/SimplnxCore/docs/CombineStlFilesFilter.md @@ -6,10 +6,10 @@ Reader/Input ## Description -This **Filter** combines all of the STL files from a given directory into a single triangle geometry. This filter will make use of the **Import STL File Filter** to read in each stl file in the given directory and then will proceed to combine each of the imported files into a single triangle geometry. +This **Filter** combines all of the STL files from a given directory into a single triangle geometry. STL (STereoLithography) is a common 3D surface-mesh file format that describes a geometry as an unstructured collection of triangular facets. This filter will make use of the [Read STL File](ReadStlFileFilter.md) filter to read in each STL file in the given directory and then will proceed to combine each of the imported files into a single triangle geometry. There is an option to label the faces and vertices with a "Part Number" that represents the index into the list of files that was used as the input. This would be based on the lexographical index and starts from 1. This allows for the immediate "segmentation" of the resulting triangle geometry or just as a convenience to "color by" in the visualization widget. This can -also be used in the "Write STL Files from Triangle Geometry" Filter if the selection for +also be used in the [Write STL Files from Triangle Geometry](WriteStlFileFilter.md) filter if the selection for the "File Grouping Type" is set to "Part Index" in the UI. Then use the "Part Number" array that is created in this filter for the "Part Index". diff --git a/src/Plugins/SimplnxCore/docs/CombineTransformationMatricesFilter.md b/src/Plugins/SimplnxCore/docs/CombineTransformationMatricesFilter.md index f053420f05..42932532e5 100644 --- a/src/Plugins/SimplnxCore/docs/CombineTransformationMatricesFilter.md +++ b/src/Plugins/SimplnxCore/docs/CombineTransformationMatricesFilter.md @@ -6,24 +6,41 @@ Core ## Description -The **Combine Transformation Matrices** filter merges multiple 4×4 transformation matrices into a single composite transformation. +This **Filter** multiplies multiple 4x4 transformation matrices together to produce a single composite 4x4 matrix. Use it when you have a sequence of transformations (rotations, translations, scales, etc.) that need to be combined before applying them to an Image Geometry. -Each input matrix must be provided as a 16-element float32 DataArray in row-major order, representing operations such as translation, rotation, scaling, or shear. During the preflight phase, the filter verifies that at least two matrices are selected, each contains exactly 16 elements (4 tuples × 4 components OR 16 tuples x 1 component OR 1 tuple x 16 components, etc), and all input arrays share the same tuple and component layout. +### When to Use This Filter -## Saving the Output Transformation Matrix. +[Apply Transformation to Geometry](ApplyTransformationToGeometryFilter.md) re-grids cell data each time it runs. Applying multiple transformations one at a time to an Image Geometry compounds re-gridding artifacts. The correct approach is to combine all the transformations into a single 4x4 matrix first using this filter, then apply that combined matrix as a single transformation. See the *Image Geometry Caveat* section in [Apply Transformation to Geometry](ApplyTransformationToGeometryFilter.md) for the visual demonstration. -The format of the output DataArray is a flattened array 16 elements in size that represents a 4x4 matrix. -The elements are encoded in ROW MAJOR order, i.e., +For node-based geometries (Vertex, Edge, Triangle, Quad, Tet, Hex), there is no re-gridding step, so successive transformations are safe and this filter is not strictly needed -- but combining is still slightly more efficient than chaining. + +### Input Format + +Each input matrix must be a 16-element float32 **Attribute Array** in **row-major** order: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -represents the following 4x4 Matrix +represents the 4x4 matrix: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +The component shape can be any layout that yields 16 total elements (4×4, 16×1, or 1×16). All input matrices must share the same tuple and component layout. + +### Multiplication Order + +The matrices are multiplied in the order listed in the parameter. The result represents applying the **first** matrix first, then the second, and so on. In matrix algebra, this means: + + M_combined = M_last * M_(last-1) * ... * M_2 * M_1 + +which corresponds to applying M_1 first to a vector v: `v' = M_combined * v = M_last * ... * M_2 * M_1 * v`. + +### Required Input Sources + +- **Transformation Matrices** -- at least two 4x4 float32 matrices, typically authored by hand or produced by an earlier [Apply Transformation to Geometry](ApplyTransformationToGeometryFilter.md) run with the *Saving the Final Transformation Matrix* option enabled. + % Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramByFeatureFilter.md b/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramByFeatureFilter.md index f487c7d610..7b2ff75c19 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramByFeatureFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramByFeatureFilter.md @@ -2,7 +2,7 @@ ## Description -This **Filter** accepts one or more numeric **DataArray** inputs and computes feature-specific histograms. For each selected array, values are grouped by feature, then divided into equal-width bins—using either automatically derived or user-defined minimum/maximum bounds—and counted per bin. +This **Filter** accepts one or more numeric **DataArray** inputs and computes per-**Feature** histograms. A **Feature** is a connected region of **Cells** that share the same **Feature Id** (the integer label assigned by a segmentation filter). For each selected array, the per-Cell values are grouped according to their owning **Feature Id**, then divided into equal-width bins—using either automatically derived or user-defined minimum/maximum bounds—and counted per bin. Optionally, a mask **DataArray** can be provided to include only specific elements in the histogram computation. @@ -16,9 +16,11 @@ Outputs include: - **Modal Bin Ranges INeighborList** (optional): One NeighborList that contains one list per feature specifying inclusive lower bound and exclusive upper bound containing the feature's mode(s). Because there can be multiple modes, each list may include more than 2 entries. - *Example*: list 5 contains `[0.5, 10.2, 41.3, 54.1]` if feature 5 has two mode values and they fall between 0.5 and 10.2 and between 41.3 and 54.1. -% Auto generated parameter table will be inserted here +### Required Input Sources + +- **Cell Feature Ids** -- the per-Cell **Feature** label array, typically produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or another segmentation filter. -## Example Pipelines +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramFilter.md b/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramFilter.md index 5ae0d38023..ab03a75adb 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeArrayHistogramFilter.md @@ -6,15 +6,20 @@ This **Filter** accepts one or more numeric **DataArray** inputs and generates c Optionally, a mask **DataArray** can be provided to include only specific elements in the histogram computation. -Outputs include: +The created histogram arrays are written into the target **DataGroup**. For each input array the following arrays are produced: + - **Counts DataArray**: A tuple for each bin representing the number of elements in that bin. -- **Bin Ranges DataArray**: A two-component tuple per bin defining the inclusive lower bound and exclusive upper bound. +- **Bin Ranges DataArray**: A two-component tuple per bin defining the inclusive lower bound and exclusive upper bound. The bin bounds carry the same units as the input array (for example, if the input array is in micrometers, the bin bounds are in micrometers). - **Most Populated Bin DataArray**: Reports the index of the bin that has the most values. -- **Modal Bin Ranges NeighborList** (optional): Specifies the inclusive lower and exclusive upper bound bin indices containing the input data’s mode(s). Because there can be multiple modes, this list may include more than two entries. +- **Modal Bin Ranges NeighborList** (optional): Specifies the inclusive lower and exclusive upper bound bin indices containing the input data's *mode(s)*. The *mode* is the value (or values) that occurs most frequently in the data. Because there can be multiple modes, this list may include more than two entries. + +### Required Input Sources + +None -- this filter operates on any generic numeric **DataArray** regardless of how it was produced. ## Example Data -Using some data about the "Old Faithful" geyser in the United States from the [R site](http://www.r-tutor.com/elementary-statistics/quantitative-data/frequency-distribution-quantitative-data), here is the top few lines of data: +Using the "Old Faithful" geyser data set from the [R site](http://www.r-tutor.com/elementary-statistics/quantitative-data/frequency-distribution-quantitative-data) (272 eruptions; the full data set is not reproduced here), the first few rows of the *Duration* and *Wait Time* columns are: Duration, Wait Time {3.6,79}, @@ -61,281 +66,3 @@ Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. - -### Example Data (Raw) - -```text - Index, Duration, Wait Time - {1,3.6,79}, - {2,1.8,54}, - {3,3.333,74}, - {4,2.283,62}, - {5,4.533,85}, - {6,2.883,55}, - {7,4.7,88}, - {8,3.6,85}, - {9,1.95,51}, - {10,4.35,85}, - {11,1.833,54}, - {12,3.917,84}, - {13,4.2,78}, - {14,1.75,47}, - {15,4.7,83}, - {16,2.167,52}, - {17,1.75,62}, - {18,4.8,84}, - {19,1.6,52}, - {20,4.25,79}, - {21,1.8,51}, - {22,1.75,47}, - {23,3.45,78}, - {24,3.067,69}, - {25,4.533,74}, - {26,3.6,83}, - {27,1.967,55}, - {28,4.083,76}, - {29,3.85,78}, - {30,4.433,79}, - {31,4.3,73}, - {32,4.467,77}, - {33,3.367,66}, - {34,4.033,80}, - {35,3.833,74}, - {36,2.017,52}, - {37,1.867,48}, - {38,4.833,80}, - {39,1.833,59}, - {40,4.783,90}, - {41,4.35,80}, - {42,1.883,58}, - {43,4.567,84}, - {44,1.75,58}, - {45,4.533,73}, - {46,3.317,83}, - {47,3.833,64}, - {48,2.1,53}, - {49,4.633,82}, - {50,2,59}, - {51,4.8,75}, - {52,4.716,90}, - {53,1.833,54}, - {54,4.833,80}, - {55,1.733,54}, - {56,4.883,83}, - {57,3.717,71}, - {58,1.667,64}, - {59,4.567,77}, - {60,4.317,81}, - {61,2.233,59}, - {62,4.5,84}, - {63,1.75,48}, - {64,4.8,82}, - {65,1.817,60}, - {66,4.4,92}, - {67,4.167,78}, - {68,4.7,78}, - {69,2.067,65}, - {70,4.7,73}, - {71,4.033,82}, - {72,1.967,56}, - {73,4.5,79}, - {74,4,71}, - {75,1.983,62}, - {76,5.067,76}, - {77,2.017,60}, - {78,4.567,78}, - {79,3.883,76}, - {80,3.6,83}, - {81,4.133,75}, - {82,4.333,82}, - {83,4.1,70}, - {84,2.633,65}, - {85,4.067,73}, - {86,4.933,88}, - {87,3.95,76}, - {88,4.517,80}, - {89,2.167,48}, - {90,4,86}, - {91,2.2,60}, - {92,4.333,90}, - {93,1.867,50}, - {94,4.817,78}, - {95,1.833,63}, - {96,4.3,72}, - {97,4.667,84}, - {98,3.75,75}, - {99,1.867,51}, - {100,4.9,82}, - {101,2.483,62}, - {102,4.367,88}, - {103,2.1,49}, - {104,4.5,83}, - {105,4.05,81}, - {106,1.867,47}, - {107,4.7,84}, - {108,1.783,52}, - {109,4.85,86}, - {110,3.683,81}, - {111,4.733,75}, - {112,2.3,59}, - {113,4.9,89}, - {114,4.417,79}, - {115,1.7,59}, - {116,4.633,81}, - {117,2.317,50}, - {118,4.6,85}, - {119,1.817,59}, - {120,4.417,87}, - {121,2.617,53}, - {122,4.067,69}, - {123,4.25,77}, - {124,1.967,56}, - {125,4.6,88}, - {126,3.767,81}, - {127,1.917,45}, - {128,4.5,82}, - {129,2.267,55}, - {130,4.65,90}, - {131,1.867,45}, - {132,4.167,83}, - {133,2.8,56}, - {134,4.333,89}, - {135,1.833,46}, - {136,4.383,82}, - {137,1.883,51}, - {138,4.933,86}, - {139,2.033,53}, - {140,3.733,79}, - {141,4.233,81}, - {142,2.233,60}, - {143,4.533,82}, - {144,4.817,77}, - {145,4.333,76}, - {146,1.983,59}, - {147,4.633,80}, - {148,2.017,49}, - {149,5.1,96}, - {150,1.8,53}, - {151,5.033,77}, - {152,4,77}, - {153,2.4,65}, - {154,4.6,81}, - {155,3.567,71}, - {156,4,70}, - {157,4.5,81}, - {158,4.083,93}, - {159,1.8,53}, - {160,3.967,89}, - {161,2.2,45}, - {162,4.15,86}, - {163,2,58}, - {164,3.833,78}, - {165,3.5,66}, - {166,4.583,76}, - {167,2.367,63}, - {168,5,88}, - {169,1.933,52}, - {170,4.617,93}, - {171,1.917,49}, - {172,2.083,57}, - {173,4.583,77}, - {174,3.333,68}, - {175,4.167,81}, - {176,4.333,81}, - {177,4.5,73}, - {178,2.417,50}, - {179,4,85}, - {180,4.167,74}, - {181,1.883,55}, - {182,4.583,77}, - {183,4.25,83}, - {184,3.767,83}, - {185,2.033,51}, - {186,4.433,78}, - {187,4.083,84}, - {188,1.833,46}, - {189,4.417,83}, - {190,2.183,55}, - {191,4.8,81}, - {192,1.833,57}, - {193,4.8,76}, - {194,4.1,84}, - {195,3.966,77}, - {196,4.233,81}, - {197,3.5,87}, - {198,4.366,77}, - {199,2.25,51}, - {200,4.667,78}, - {201,2.1,60}, - {202,4.35,82}, - {203,4.133,91}, - {204,1.867,53}, - {205,4.6,78}, - {206,1.783,46}, - {207,4.367,77}, - {208,3.85,84}, - {209,1.933,49}, - {210,4.5,83}, - {211,2.383,71}, - {212,4.7,80}, - {213,1.867,49}, - {214,3.833,75}, - {215,3.417,64}, - {216,4.233,76}, - {217,2.4,53}, - {218,4.8,94}, - {219,2,55}, - {220,4.15,76}, - {221,1.867,50}, - {222,4.267,82}, - {223,1.75,54}, - {224,4.483,75}, - {225,4,78}, - {226,4.117,79}, - {227,4.083,78}, - {228,4.267,78}, - {229,3.917,70}, - {230,4.55,79}, - {231,4.083,70}, - {232,2.417,54}, - {233,4.183,86}, - {234,2.217,50}, - {235,4.45,90}, - {236,1.883,54}, - {237,1.85,54}, - {238,4.283,77}, - {239,3.95,79}, - {240,2.333,64}, - {241,4.15,75}, - {242,2.35,47}, - {243,4.933,86}, - {244,2.9,63}, - {245,4.583,85}, - {246,3.833,82}, - {247,2.083,57}, - {248,4.367,82}, - {249,2.133,67}, - {250,4.35,74}, - {251,2.2,54}, - {252,4.45,83}, - {253,3.567,73}, - {254,4.5,73}, - {255,4.15,88}, - {256,3.817,80}, - {257,3.917,71}, - {258,4.45,83}, - {259,2,56}, - {260,4.283,79}, - {261,4.767,78}, - {262,4.533,84}, - {263,1.85,58}, - {264,4.25,83}, - {265,1.983,43}, - {266,2.25,60}, - {267,4.75,75}, - {268,4.117,81}, - {269,2.15,46}, - {270,4.417,90}, - {271,1.817,46}, - {272,4.467,74}} -``` diff --git a/src/Plugins/SimplnxCore/docs/ComputeArrayStatisticsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeArrayStatisticsFilter.md index ee5ab4158c..bd3be225cc 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeArrayStatisticsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeArrayStatisticsFilter.md @@ -2,13 +2,13 @@ ## Group (Subgroup) -DREAM3D Review (Statistics) +Statistics ## Description ***WARNING: The Histogram functionality has been moved to a new filter.*** -This **Filter** computes a variety of statistics for a given scalar array. The currently available statistics are array length, minimum, maximum, (arithmetic) mean, median, mode, standard deviation, and summation; any combination of these statistics may be computed by this **Filter**. Any scalar array, of any primitive type, may be used as input. The type of the output arrays depends on the kind of statistic computed: +This filter computes a variety of statistics for a given scalar array. The currently available statistics are array length, minimum, maximum, (arithmetic) mean, median, mode, standard deviation, and summation; any combination of these statistics may be computed. Any scalar array, of any primitive type, may be used as input. The type of each output array depends on the kind of statistic computed: | Statistic | Primitive Type | |-------------------------|-------------------------------------| @@ -23,64 +23,41 @@ This **Filter** computes a variety of statistics for a given scalar array. The c | Standardized | 32-bit float | | Number of Unique Values | signed 32-bit integer | -The user may optionally use a mask to specify points to be ignored when computing the statistics; only points where the supplied mask is *true* will be considered when computing statistics. Additionally, the user may select to have the statistics computed per **Feature** or **Ensemble** by supplying an Ids array. For example, if the user opts to compute statistics per **Feature** and selects an array that has 10 unique **Feature** Ids, then this **Filter** will compute 10 sets of statistics (e.g., find the mean of the supplied array for each **Feature**, find the total number of points in each **Feature** (the length), etc.). +A **Feature** is a contiguous region of the data (such as a grain) identified by a unique integer **Feature** Id; an **Ensemble** is a higher-level grouping of **Features** (such as a phase). The filter can compute statistics over the whole array, or per **Feature**/**Ensemble** when a **Feature** Ids array is supplied. -The input array may also be *standardized*, meaning that the array values will be adjusted such that they have a mean of 0 and unit variance. This *Standardize Data* option requires the selection of both the *Find Mean* and *Find Standard Deviation* options. The standardized data will be saved as a new array object stored in the same **Attribute Matrix** as the input array. Note that if the *Standardize Data* option is selected, the mean and standard deviation values created by this **Filter** reflect the mean and standard deviation of the *original* array; the new standardized array has a mean of 0 and unit variance. The standardized array will be computed in double precision. If the statistics are being computed per **Feature** or **Ensemble**, then the array values are standardized according to the mean and standard deviation *for each **Feature/Ensemble***. For example, if 5 unique **Features** were being analyzed and *Standardize Data* was selected, then the array values for **Feature** 1 would be standardized according to the mean and standard deviation for **Feature** 1, then the array values for **Feature** 2 would be standardized according to the mean and standard deviation for **Feature** 2, and so on for the remaining **Features**. +The user may optionally use a mask to specify points to be ignored when computing the statistics; only points where the supplied mask is *true* are considered. Additionally, the user may compute the statistics per **Feature** or **Ensemble** by supplying a **Feature** Ids array. For example, if the user computes statistics per **Feature** and selects an array that has 10 unique **Feature** Ids, then the filter computes 10 sets of statistics (the mean of the supplied array for each **Feature**, the total number of points in each **Feature** (the length), and so on). -Special operations occur for certain statistics if the supplied array is of type *bool* (for example, a mask array produced from threshold filters). The *length*, *minimum*, *maximum*, *median*, *mode*, and *summation* are computed as normal (although the resulting values may be platform dependent). The *mean* and *standard deviation* for a boolean array will be true if there are more instances of true in the array than false. If *Standardize Data* is chosen for a boolean array, no actual modifications will be made to the input. These operations for boolean inputs are chosen as a basic convention, and are not intended be representative of true boolean logic. +The input array may also be *standardized*, meaning that the array values are adjusted so that they have a mean of 0 and unit variance. This *Standardize Data* option requires that both *Find Mean* and *Find Standard Deviation* are also selected. The standardized data is saved as a new array stored in the same **Attribute Matrix** as the input array. When *Standardize Data* is selected, the mean and standard deviation values created by this filter reflect the mean and standard deviation of the *original* array; the new standardized array has a mean of 0 and unit variance. The standardized array is computed in double precision. If statistics are computed per **Feature** or **Ensemble**, then the array values are standardized according to the mean and standard deviation *for each **Feature**/**Ensemble***. For example, with 5 unique **Features** and *Standardize Data* selected, the values for **Feature** 1 are standardized using the mean and standard deviation of **Feature** 1, the values for **Feature** 2 are standardized using those of **Feature** 2, and so on. -## Destination Attribute Matrix +Special operations occur for certain statistics if the supplied array is of type *bool* (for example, a mask array produced from threshold filters). The *length*, *minimum*, *maximum*, *median*, *mode*, and *summation* are computed as normal (although the resulting values may be platform dependent). The *mean* and *standard deviation* for a boolean array are *true* if there are more instances of *true* in the array than *false*. If *Standardize Data* is chosen for a boolean array, no modifications are made to the input. These operations for boolean inputs are chosen as a basic convention, and are not intended to be representative of true boolean logic. -The user must create a destination **Attribute Matrix** in which the computed statistics will be stored. DREAM3D-NX enforces a rule where any Attribute Matrix cannot contain another Attribute Matrix. With this in mind, the user should select a destination that is not itself an Attribute Matrix, such as the top level of a Geometry or the top level of the Data Structure itself. The user could have also created a group (using a previous filter) and use that group as the destination. +## Destination Attribute Matrix + +The user must create a destination **Attribute Matrix** in which the computed statistics are stored. DREAM3D-NX enforces a rule that an **Attribute Matrix** cannot contain another **Attribute Matrix**. With this in mind, the user should select a destination that is not itself an **Attribute Matrix**, such as the top level of a **Geometry** or the top level of the Data Structure itself. The user could also have created a group (using a previous filter) and use that group as the destination. ![Images/Compute_Array_Statistics_1.png](Images/Compute_Array_Statistics_1.png) -The user is creating the destination Attribute Matrix inside the `DataContainer` geometry. +The user is creating the destination **Attribute Matrix** inside the `DataContainer` geometry. ![Images/Compute_Array_Statistics_2.png](Images/Compute_Array_Statistics_2.png) -The user is creating the destination Attribute Matrix inside the `Statistics` group which was created by filter #2 in the pipeline. +The user is creating the destination **Attribute Matrix** inside the `Statistics` group which was created by filter #2 in the pipeline. ### Feature Range Type -The *Feature Range Type* parameter provides the following choices: - -- **None [0]**: No feature-based range is applied; statistics are computed over the entire array without range constraints. -- **Ignore Feature 0 [1]**: Excludes Feature Id 0 (the invalid/background feature) from statistics calculations. -- **Shrink To Fit [2]**: Automatically determines the minimum and maximum Feature Ids present and uses that as the range, removing empty entries. -- **Padded Custom Range [3]**: Uses a user-specified range and pads with generated/filled values for Feature Ids below the minimum and above the maximum actually present in the data. -- **Minimum Size in Custom Range [4]**: Uses a user-specified range but clamps to the actual min/max Feature Ids if the specified bounds exceed them, avoiding padding. - -## Ranges Breakdown - -The ranges feature was added to primarily offer the following functionality: - -1. option to output an array that has the Feature id in it. (Feature Ids Indexing Array) -2. option to set the "Feature Id" range. - -- Allow the user to "pad out the feature ids" to a specific range -- Allow the user to only compute stats for specific feature Ids - -3. option to Ignore Feature Id Zero. -4. remove empty spaces for feature ids that start above 1 - -All of these can be achieved with the new functionality, here's how: - -### Option 1 - -For option 1, this array (Feature Ids Indexing Array) is automatically created for any Range selection other than `None`. The nuance here is that if your range or `Shrink To Fit` contains all the features this array will be redundant and can be removed, however, this is a very niche occurance and users are encouraged to just select `None` if they know this to be the case. - -### Option 2 - -For option 2, this is provided with both the `Padded Custom Range` and `Minimum Size in Custom Range`. The latter is intended for users who are trying to cut down size without aproiri knowledge of the number of features. It will chop anything outside the upper bound or take the max feature if the custom upper bound exceeds it. The same is true for the lower bound in that it will take the higher of the two between provided range and the min Feature Id. `Padded Custom Range` will fill generate/fill extra values for values below and above the minimum and maximum Feature Id respectively. See the bonus section for additional range features. +When computing per-**Feature** statistics, the *Feature Range Type* parameter controls which **Feature** Ids are included and how the output is indexed (these are all dimensionless integer **Feature** Id selections): -### Option 3 +- **None [0]**: No feature-based range is applied; statistics are computed for every **Feature** Id present. +- **Ignore Feature 0 [1]**: Excludes **Feature** Id 0 (the invalid/background feature) from the calculations. +- **Shrink To Fit [2]**: Automatically determines the minimum and maximum **Feature** Ids present and uses that as the range, removing empty entries. +- **Padded Custom Range [3]**: Uses the user-specified *Feature Ids Min Max Range* and generates filled values for **Feature** Ids below the minimum and above the maximum actually present in the data. +- **Minimum Size in Custom Range [4]**: Uses the user-specified range but clamps to the actual min/max **Feature** Ids if the specified bounds exceed them, avoiding padding. -For option 3, the ability to ignore Feature Id Zero (the invalid Feature Id) is provided directly in the form of `Ignore Feature 0` and indirectly through ranges. +For any range selection other than *None*, the filter also creates a *Feature Ids Indexing Array* that records the **Feature** Id each row of statistics corresponds to. If the selected range already contains every **Feature**, this indexing array is redundant and may be removed; in that niche case selecting *None* is simpler. -### Option 4 +*Tip: If the maximum **Feature** Id in a custom range is unknown, supplying `-1` for the upper bound causes the filter to determine the maximum **Feature** Id at run time and use it as the upper bound.* -For option 4, the most direct feature to address this is the `Shrink to Fit` range option, however it can also be achived with `Minimum Size in Custom Range`. +### Required Input Sources -*Bonus: If you are unsure of the max feature id in your range, supplying a `-1` will determine the maximum feature id and use it as the upper bound in execution.* +- **Cell Feature Ids** -- required only when computing statistics per **Feature**/**Ensemble**; produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here @@ -88,7 +65,7 @@ For option 4, the most direct feature to address this is the `Shrink to Fit` ran ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeBiasedFeaturesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeBiasedFeaturesFilter.md index 14bfa04e6f..1820b1f91c 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeBiasedFeaturesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeBiasedFeaturesFilter.md @@ -6,7 +6,15 @@ Generic (Spatial) ## Description -This **Filter** determines which **Features** are *biased* by the outer surfaces of the sample. Larger **Features** are more likely to intersect the outer surfaces and thus it is not sufficient to only note which **Features** touch the outer surfaces of the sample. Denoting which **Features** are biased is important so that they may be excluded from any statistical analyses. The algorithm for determining whether a **Feature** is *biased* is as follows: +This **Filter** flags each **Feature** as *biased* or *unbiased* by the outer surfaces of the sample, producing a feature-level boolean array suitable for excluding biased features from downstream statistical analyses (size distributions, shape distributions, ODFs, etc.). + +### Why Bias Matters for Statistics + +When a sample volume is cut out of a larger material, some grains are truncated by the cut. If only size or shape statistics are needed, surface-touching features like those flagged by [Compute Surface Features](ComputeSurfaceFeaturesFilter.md) can be excluded -- but that undercounts the problem. Larger grains are more likely to touch any given surface simply because they are larger, so excluding only surface-touching features still leaves a size-dependent sampling bias: *small* grains that don't touch the surface are over-represented relative to *large* grains that do. The biased-feature flag produced here corrects for this by identifying which features' centroids are close enough to a boundary that they are statistically suspect, regardless of whether the feature itself touches the boundary. + +### How This Filter Works + +The algorithm for determining whether a **Feature** is *biased* is as follows: 1. The *centroids* of all **Features** are calculated 2. All **Features** are tested to determine if they touch an outer surface of the sample @@ -22,6 +30,12 @@ By definition of the box, no **Feature** that intersects an outer surface of the The images below show the feature ids before and after running this filter. The image on the right shows the biased features colored in red, the unbiased features colored by their feature id, the bounding box (described in step 3 of the algorithm above), and the feature centroids (white for unbiased and purple for biased). ![2D Before and After Biased Features](Images/ComputeBiasedFeaturesBeforeAndAfter.png) +### Required Input Sources + +- **Feature Centroids** -- produced by [Compute Feature Centroids](ComputeFeatureCentroidsFilter.md). +- **Surface Features** -- produced by [Compute Surface Features](ComputeSurfaceFeaturesFilter.md) or as an optional output of [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md). +- **Feature Phases** (only when applying to a single phase) -- produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeBoundaryCellsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeBoundaryCellsFilter.md index 9f3a965755..5c6332366b 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeBoundaryCellsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeBoundaryCellsFilter.md @@ -17,6 +17,12 @@ This **Filter** determines, for each **Cell**, the number of neighboring **Cells |--|--| | ![Feature Ids](Images/ComputeBoundaryCellsInput.png) | ![Boundary Cells](Images/ComputeBoundaryCellsOutput.png) | +The output is a per-**Cell** count ranging from **0** (an interior cell whose six neighbors all belong to the same **Feature**) to **6** (an isolated cell differing from all six neighbors). Cells on the outer edge of the volume have fewer than six in-bounds neighbors, so their count reflects only the neighbors that exist. + +### Required Input Sources + +- **Feature Ids** -- a per-**Cell** integer label array produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeBoundaryElementFractionsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeBoundaryElementFractionsFilter.md index 776055835c..de3b5a8aa8 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeBoundaryElementFractionsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeBoundaryElementFractionsFilter.md @@ -6,11 +6,20 @@ Statistics (Morphological) ## Description -This **Filter** calculates the fraction of **Elements** of each **Feature** that are on the "surface" of that **Feature**. The **Filter** simply iterates through all **Elements** asking for the **Feature** that owns them and if the **Element** is a "surface" **Element**. Each **Feature** counts the total number of **Elements** it owns and the number of those **Elements** that are "surface" **Elements**. The fraction is then stored for each **Feature**. +This **Filter** calculates, for each **Feature**, the fraction of its **Elements** that lie on the boundary ("surface") of that **Feature**. A **Feature** is a contiguous region of like-segmented cells (for example a grain), and an **Element** is a single cell of the geometry. An **Element** is considered a *surface* (boundary) **Element** when at least one of its neighboring **Elements** belongs to a different **Feature**. This boundary flag is not computed here; it is supplied through the *Surface Elements* input array, where any value greater than zero (the count of differing neighbors) marks the **Element** as a boundary **Element**. -% Auto generated parameter table will be inserted here +The **Filter** iterates through every **Element**, asking which **Feature** owns it and whether it is a boundary **Element**. Each **Feature** accumulates the total number of **Elements** it owns and the number of those that are boundary **Elements**. The output for each **Feature** is the ratio: + +> boundary Elements / total Elements + +This is a dimensionless fraction in the range [0, 1]. A value near 0 means the **Feature** is large and compact relative to its surface; a value near 1 means nearly all of the **Feature**'s **Elements** touch a neighbor of a different **Feature** (a thin or small **Feature**). -## Example Pipelines +### Required Input Sources + +- **Cell Feature Ids** -- the Feature that owns each Element, produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Surface Elements** -- the per-Element count of neighbors belonging to a different Feature, produced by [Compute Boundary Cells (Image)](ComputeBoundaryCellsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ComputeBoundingBoxStatsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeBoundingBoxStatsFilter.md index 7c20b22428..165565b97c 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeBoundingBoxStatsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeBoundingBoxStatsFilter.md @@ -6,9 +6,9 @@ Statistics ## Description -***NOTE:* This filter is intended to allow each cell value to map to 0 or more bounding boxes (1 to Many architecture). This comes with the caveat that the option `Standardize Data` offered by `Compute Array Statistics` cannot be included as functionality in this filter.** +***NOTE:* This filter allows each **Cell** value to contribute to 0 or more bounding boxes (a 1-to-many architecture). This comes with the caveat that the *Standardize Data* option offered by [Compute Attribute Array Statistics](ComputeArrayStatisticsFilter.md) cannot be included as functionality in this filter.** -This **Filter** computes a variety of statistics for a given scalar array. The currently available statistics are array length, minimum, maximum, (arithmetic) mean, median, mode, standard deviation, summation, and Number of Unique values; any combination of these statistics may be computed by this **Filter**. Any scalar array, of any primitive type, may be used as input. The type of the output arrays depends on the kind of statistic computed: +This filter computes a variety of statistics for a given scalar array, restricted to the **Cells** that fall inside each supplied bounding box. Because boxes may overlap (or leave gaps), a single **Cell** may be counted toward several boxes, exactly one box, or none. The currently available statistics are array length, minimum, maximum, (arithmetic) mean, median, mode, standard deviation, summation, and number of unique values; any combination of these statistics may be computed. Any scalar array, of any primitive type, may be used as input. The type of each output array depends on the kind of statistic computed: | Statistic | Primitive Type | |-------------------------|-------------------------------------| @@ -22,11 +22,15 @@ This **Filter** computes a variety of statistics for a given scalar array. The c | Summation | 32-bit float | | Number of Unique Values | signed 32-bit integer | -The *Unified Bounds Array* is a 6 component **DataArray** that contains the lower XYZ bound and upper XYZ bound for the bounding box. The component ordering is expected as follows `{Min-X, Min-Y, Min-Z, Max-X, Max-Y, Max-Z}`. This ordering is provided so the user knows how to format imported external data. The *Compute Feature Bounds* filter's `Unified Array` option puts out a correctly formatted array for input to this filter. +The *Unified Bounds Array* is a 6-component **DataArray** that contains the lower XYZ bound and upper XYZ bound for each bounding box. The component ordering is `{Min-X, Min-Y, Min-Z, Max-X, Max-Y, Max-Z}`. These bounds are expressed in the **Geometry**'s physical coordinate units (the same length units as the geometry's origin and spacing, typically microns). This ordering is provided so the user knows how to format imported external data. The [Compute Feature Bounding Boxes](ComputeFeatureBoundsFilter.md) filter's *Unified Array* option produces a correctly formatted array for input to this filter. -The user must select or create a destination **Attribute Matrix** in which the computed statistics will be stored. If selecting an exisitng **Attribute Matrix**, then a reasonable selection for this array is the **Attribute Matrix** that the *Unified Bounds Array* comes from. However, the only requirement is that the number of columns in the selected destination **Attribute Matrix** match the number of tuples in the *Unified Bounds Array*. This requirement is enforced during preflight. If the option to create an Attribute Matrix is selected, it will be created in the supplied geometry sized appropriately. +The user must select or create a destination **Attribute Matrix** in which the computed statistics are stored. When selecting an existing **Attribute Matrix**, a reasonable choice is the **Attribute Matrix** that the *Unified Bounds Array* comes from. However, the only requirement is that the number of tuples in the selected destination **Attribute Matrix** match the number of tuples (boxes) in the *Unified Bounds Array*. This requirement is enforced during preflight. If the option to create a new **Attribute Matrix** is selected, it is created in the supplied **Geometry**, sized appropriately. -Special operations occur for certain statistics if the supplied array is of type *bool* (for example, a mask array produced [when thresholding](@ref multithresholdobjects)). The length, minimum, maximum, median, mode, and summation are computed as normal (although the resulting values may be platform dependent). The mean and standard deviation for a boolean array will be true if there are more instances of true in the array than false. These operations for boolean inputs are chosen as a basic convention, and are not intended be representative of true boolean logic. +Special operations occur for certain statistics if the supplied array is of type *bool* (for example, a mask array produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md)). The length, minimum, maximum, median, mode, and summation are computed as normal (although the resulting values may be platform dependent). The mean and standard deviation for a boolean array are *true* if there are more instances of *true* in the array than *false*. These operations for boolean inputs are chosen as a basic convention, and are not intended to be representative of true boolean logic. + +### Required Input Sources + +- **Unified Bounds Array** -- a 6-component bounds array produced by the *Unified Array* output option of [Compute Feature Bounding Boxes](ComputeFeatureBoundsFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeCoordinateThresholdFilter.md b/src/Plugins/SimplnxCore/docs/ComputeCoordinateThresholdFilter.md index 5e98fa94d2..50c14140f5 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeCoordinateThresholdFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeCoordinateThresholdFilter.md @@ -6,7 +6,9 @@ Geometry ## Description -This filter produces a mask that marks cells that fall inside or outside a given bounding shape within a supplied geometry. The filter outputs a mask to provide the greatest flexibility, while leveraging existing algorithms. This filter doesn't modify the input geometry in any way if you wish to modify the data within the bounding box, consider using one of the cleanup filters on the marked values. See *Remove Flagged Vertices/Edges/Triangles* for an example of a potential followup filter. +This filter produces a mask that marks cells that fall inside or outside a given bounding shape within a supplied geometry. The filter outputs a mask to provide the greatest flexibility, while leveraging existing algorithms. This filter doesn't modify the input geometry in any way; if you wish to modify the data within the bounding box, consider using one of the cleanup filters on the marked values. See [Remove Flagged Vertices](RemoveFlaggedVerticesFilter.md), [Remove Flagged Edges](RemoveFlaggedEdgesFilter.md), or [Remove Flagged Triangles](RemoveFlaggedTrianglesFilter.md) for examples of potential followup filters. + +All threshold bounds (the rectangle minimum/maximum coordinates and the sphere center/radius) are specified in **physical coordinates** — the same length units as the input geometry's vertex positions (or, for an **Image Geometry**, its origin and spacing) — not in cell/voxel indices. ### Coordinate Container Shape @@ -33,6 +35,8 @@ The way a point is determined to be in the sphere uses the following calculation `(p_x - c_x)^2 + (p_y - c_y)^2 + (p_z - c_z)^2 <= r^2` +The center `c` (first 3 values of *Sphere Info*) and radius `r` (4th value) are both given in **physical coordinate** units matching the geometry. + ### Inverting the Mask This is primarily a convenience option provided to the user. If toggled on the values will be true (`1`) by default and values withing the bounds will be marked false (`0`). This doesn't modify anything other than switching what value is set for bounds that fall inside or outside respectively. diff --git a/src/Plugins/SimplnxCore/docs/ComputeCoordinatesImageGeomFilter.md b/src/Plugins/SimplnxCore/docs/ComputeCoordinatesImageGeomFilter.md index 1f457470c2..f7a4201f64 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeCoordinatesImageGeomFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeCoordinatesImageGeomFilter.md @@ -6,19 +6,25 @@ Statistics ## Description -This **Filter** produces one or two arrays that stores implicit image information (indices and physical coordinates of each point) as explicit cell level data. The produced arrays are in XYZ component format and stored as X by Y by Z, starting from the origin. The intention behind this filter is primarily for output compatibility and readability. +This **Filter** writes the per-cell coordinates and/or grid indices of an **Image Geometry** into regular cell-level **Attribute Arrays**. In an Image Geometry, each cell's (i, j, k) index and (x, y, z) physical position are implicit -- derivable from the geometry's dimensions, origin, and spacing. This filter makes them explicit so they can be exported to CSV/text, used as inputs to downstream math filters, or visualized directly. + +### When to Use This Filter + +Most commonly used as a preparation step before exporting cell data to CSV or other text formats that need explicit coordinate columns. Also useful when a downstream filter needs the (x, y, z) of each cell as a regular array (e.g., for distance calculations). ### Output Array(s) Type -The *Output Array(s) Type* parameter controls which arrays are produced by the filter: +- **Physical Coordinates [0]**: produces a single 3-component float array containing the (x, y, z) physical coordinates of the center of each cell, computed from the geometry's origin and spacing. +- **Indices [1]**: produces a single 3-component integer array containing the (i, j, k) grid indices of each cell. Indices are **0-based**. +- **Both [2]**: produces both arrays. -- **Physical Coordinates [0]**: Outputs a single 3-component array containing the physical (spatial) XYZ coordinates of the center of each cell, computed from the geometry's origin and spacing. -- **Indices [1]**: Outputs a single 3-component array containing the integer ijk grid indices of each cell. -- **Both [2]**: Outputs both the physical coordinates array and the indices array. +### Cell Order -The arrays follow the following cell parsing scheme: `0,0,0 -> 1,0,0 -> 2,0,0 -> ... n,0,0 -> 0,1,0 -> 1,1,0 -> 2,1,0 -> ... n,n,0 -> 0,0,1 -> 1,0,1 -> 2,0,1 -> ... n,n,n`. +The arrays are stored in the geometry's default cell raster order: X varies fastest, then Y, then Z. -The printed output will look something like this: + (0,0,0) → (1,0,0) → (2,0,0) → ... (n,0,0) → (0,1,0) → (1,1,0) → ... (n,n,0) → (0,0,1) → ... + +A sample of the output for a 9-column slice (showing both indices and physical coordinates): ```console Image Indices_0,Image Indices_1,Image Indices_2,Image Physical Coordinates_0,Image Physical Coordinates_1,Image Physical Coordinates_2 @@ -33,6 +39,15 @@ Image Indices_0,Image Indices_1,Image Indices_2,Image Physical Coordinates_0,Ima 8,0,0,-45.125,0.125,-0.37500411 ``` +### Units + +- **Physical coordinates** are in the geometry's physical units (microns, millimeters, etc.). +- **Indices** are dimensionless integers (0-based cell indices along each axis). + +### Required Input Sources + +- **Input Image Geometry** -- the geometry whose per-cell coordinates/indices will be made explicit. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeDifferencesMapFilter.md b/src/Plugins/SimplnxCore/docs/ComputeDifferencesMapFilter.md index 065ea70601..5d6bee7e7e 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeDifferencesMapFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeDifferencesMapFilter.md @@ -18,9 +18,13 @@ Note that in the above algorithm, the difference is taken as the *first selected **WARNING: The resulting difference values *may be negative* if the values of the first array are smaller than those in the second array. Therefore, if the two arrays are *unsigned integers*, it may be possible to underflow the resulting difference map values if the first array is sufficiently smaller than the second array. "Underflow" means that what should be a negative value will end up being a potentially very large value!** -% Auto generated parameter table will be inserted here +The output Difference Map is created at the user-specified path and inherits the primitive type, component shape, and number of tuples of the two input arrays. + +### Required Input Sources -## Example Pipelines +None -- this filter operates on any two generic **Attribute Arrays** that share the same primitive type, component dimensions, and number of tuples, regardless of how they were produced. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ComputeEuclideanDistMapFilter.md b/src/Plugins/SimplnxCore/docs/ComputeEuclideanDistMapFilter.md index c96875a13a..d5fb24a214 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeEuclideanDistMapFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeEuclideanDistMapFilter.md @@ -6,19 +6,29 @@ Statistics (Morphological) ## Description -This **Filter** calculates the distance of each **Cell** from the nearest **Feature** boundary, **triple line** and/or **quadruple point**. The following algorithm explains the process: +This **Filter** calculates, for every **Cell**, how far that **Cell** is from the nearest **Feature** boundary, **triple line**, and/or **quadruple point**. A **Feature** is a contiguous region of like-segmented cells (for example a grain). These three terms describe the interfaces between **Features**: -1. Find the **Feature** that owns each **Cell** and its six face-face neighbors of each **Cell** -2. For all **Cells** that have *at least 2* different neighbors, set their *GBEuclideanDistance* to *0*. For all **Cells** that have *at least 3* different neighbors, set their *TJEuclideanDistance* to *0*. For all **Cells** that have *at least 4* different neighbors, set their *QPEuclideanDistance* to *0* -3. For each of the three *EuclideanDistace* maps, iteratively "grow" out from the **Cells** identified to have a distance of *0* by the following sub-steps: +- A **Feature boundary** (abbreviated **GB**, grain boundary) is the interface where two different **Features** meet. +- A **triple line** (abbreviated **TJ**, triple junction) is where three different **Features** meet. +- A **quadruple point** (abbreviated **QP**) is where four different **Features** meet. -- Determine the **Cells** that neighbor a **Cell** of distance *0* in the current map. -- Assign a distance of *1* to those **Cells** and track the *0* **Cell** neighbor internally as their *nearest neighbor* -- Repeat previous two sub-steps, increasing the distances by *1* each iteration, until no **Cells** remain without a distance assigned. +The following algorithm explains the process: - *Note:* the distances calculated at this point are "city-block" distances and not "shortest distance" distances. The nearest neighbor information is used internally by the algorithm but is not saved as an output array. +1. Find the **Feature** that owns each **Cell** and the **Features** that own each of its six face-sharing neighbors. +2. For all **Cells** that have *at least 2* different neighboring **Features**, set their *GB* distance to *0*. For all **Cells** that have *at least 3*, set their *TJ* distance to *0*. For all **Cells** that have *at least 4*, set their *QP* distance to *0*. +3. For each of the three distance maps, iteratively "grow" outward from the **Cells** identified as distance *0* using the following sub-steps: -4. If the option *Calculate Manhattan Distance* is *false*, then the "city-block" distances are overwritten with the *Euclidean Distance* from the **Cell** to its internally tracked *nearest neighbor* **Cell** and stored in a *float* array instead of an *integer* array. + - Determine the **Cells** that neighbor a **Cell** of distance *0* in the current map. + - Assign a distance of *1* to those **Cells** and internally track the distance-*0* **Cell** as their *nearest neighbor*. + - Repeat the previous two sub-steps, increasing the distance by *1* each iteration, until every **Cell** has a distance assigned. + + *Note:* the distances calculated at this point are integer "city-block" (Manhattan) distances, expressed as a count of **Cells** (voxels), not shortest straight-line distances. The nearest-neighbor information is used internally and is not saved as an output array. + +4. If *Output arrays are Manhattan distance* is *false*, then the integer city-block distances are overwritten with the true straight-line (Euclidean) distance from each **Cell** to its internally tracked nearest-neighbor **Cell**. This Euclidean result is a physical distance expressed in the **Image Geometry** length units (for example microns) and is stored in a *float32* array instead of an *int32* array. + +### Required Input Sources + +- **Cell Feature Ids** -- the Feature that owns each Cell, produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeatureBoundsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeatureBoundsFilter.md index 09dd010efc..2d76baf40a 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeatureBoundsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeatureBoundsFilter.md @@ -8,7 +8,9 @@ Geometry **Warning**: *Potential Runtime Error* - It is expected that the max feature id plus one (`max_feature_id_value` + 1) is equal to or less than the number of tuples in the supplied feature Attribute Matrix. This cannot be checked in preflight and will terminate the pipeline if encountered. -This filter calculates the bounding boxes for each feature given Feature Ids and Geometry (refer to table below for supported geometry types and their corresponding feature id sizing). _**This filter does output `NaN`s for empty features**_, cases where a point can not be associated to a feature. The bounding boxes are defined and stored as two points in space, a lower and upper point. The optimal storage solution is use case defined, and as such there are two options provided `split` and `unified`. +This filter calculates the bounding boxes for each **Feature** given Feature Ids and Geometry (refer to table below for supported geometry types and their corresponding feature id sizing). A **Feature** is a contiguous region of cells (voxels, vertices, edges, or faces) that share the same Feature Id; a **Cell** is the smallest addressable element of the geometry. _**This filter does output `NaN`s for empty features**_, cases where a point can not be associated to a feature. The bounding boxes are defined and stored as two points in space, a lower and upper point. The optimal storage solution is use case defined, and as such there are two options provided `split` and `unified`. + +The bounding box values are stored in **physical coordinates** (the same length units as the geometry's origin and spacing), not cell/voxel indices. For an **Image Geometry** each coordinate is computed as `origin + index * spacing`; for node-based geometries (Vertex, Edge, Triangle, Quad) the vertex coordinates are used directly. ### Output Array(s) Type @@ -19,9 +21,9 @@ The *Output Array(s) Type* parameter controls how the bounding box data is store | Geometry Type | Expected Feature ID Length| |---------------|---------------------------| -| Image | Equal to Image Dimesions; typically equivalent to the `Cell Data` Attribute Matrix | +| Image | Equal to the Image Dimensions; typically equivalent to the `Cell Data` Attribute Matrix | | Vertex | Equal to the Number of Vertices/Points; typically equivalent to the `Vertex Data` Attribute Matrix | -| Edge | Equal to the Number of Edges; ; typically equivalent to the `Edge Data` Attribute Matrix | +| Edge | Equal to the Number of Edges; typically equivalent to the `Edge Data` Attribute Matrix | | Triangle | Equal to the Number of Triangles/Faces; typically equivalent to the `Face Data` Attribute Matrix | | Quad | Equal to the Number of Quads/Faces; typically equivalent to the `Face Data` Attribute Matrix | @@ -86,6 +88,10 @@ The edges for each bounding box are 12 in number and constructed in following or Since edges are the cell level data in edge geometries, the feature ids map to the edges. This means that the feature ids array will always contain 11 more consecutive instances of the same feature from when it first appears (12 total). To know the number of features in the edge geom, just divide the number of edges by 12. +### Required Input Sources + +This filter requires a **Cell Feature Ids** array, typically produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or one of the misorientation-based segmentation filters in the OrientationAnalysis plugin. The selected **Feature Data Attribute Matrix** is where the output bounds arrays are created. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeatureClusteringFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeatureClusteringFilter.md index 018999d1aa..63a980551f 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeatureClusteringFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeatureClusteringFilter.md @@ -6,15 +6,26 @@ Statistics (Morphological) ## Description -This Filter determines the radial distribution function (RDF), as a histogram, of a given set of **Features**. Currently, the **Features** need to be of the same **Ensemble** (specified by the user), and the resulting RDF is stored as **Ensemble** data. This Filter also returns the clustering list (the list of all the inter-**Feature** distances) and the minimum and maximum separation distances. The algorithm proceeds as follows: +This **Filter** computes the **radial distribution function (RDF)** of a set of **Features**. A **Feature** is a contiguous region of like-segmented cells (for example a grain or particle). An **RDF** is a histogram that describes how the **Features** are spatially distributed relative to each other: for each distance bin, it counts how many other **Feature** centroids lie at that separation distance, then normalizes that count against the count expected if the same number of **Features** were scattered randomly in the same volume. Values above 1.0 at a given distance indicate the **Features** are more likely to be found at that separation than random (clustering or ordering); values below 1.0 indicate they are less likely (exclusion). Use this **Filter** to detect and quantify clustering, ordering, or repulsion in a population of **Features**. -1. Find the Euclidean distance from the current **Feature** centroid to all other **Feature** centroids of the same specified phase -2. Put all caclulated distances in a clustering list -3. Repeat 1-2 for all **Features** -4. Sort the data into the specified number of bins, all equally sized in distance from the minimum distance to the maximum distance between **Features**. For example, if the user chooses 10 bins, and the minimum distance between **Features** is 10 units and the maximum distance is 80 units, each bin will be 8 units -5. Normalize the RDF by the probability of finding the **Features** if distributed randomly in the given box +An **Ensemble** is a group of **Features** that share a common phase (a distinct material or crystal structure). This **Filter** operates on a single **Ensemble** at a time, specified by the *Phase Index* parameter, and the resulting **RDF** is stored as **Ensemble** data. -*Note:* Because the algorithm iterates over all the **Features**, each distance will be double counted. For example, the distance from **Feature** 1 to **Feature** 2 will be counted along with the distance from **Feature** 2 to **Feature** 1, which will be identical. +All distances in this **Filter** are physical lengths expressed in the same length units as the **Image Geometry** spacing (for example microns). The algorithm proceeds as follows: + +1. Find the straight-line (Euclidean) distance from the current **Feature** centroid to every other **Feature** centroid of the selected phase. +2. Put all calculated distances in a clustering list. +3. Repeat steps 1-2 for all **Features**. +4. Sort the distances into the specified number of bins, all equally sized in distance from the minimum separation to the maximum separation. For example, if the user chooses 10 bins, the minimum separation is 10 microns, and the maximum separation is 80 microns, each bin spans 7 microns. +5. Normalize the **RDF** by the probability of finding the **Features** at that distance if they were distributed randomly in the bounding box. + +The **Filter** also outputs the clustering list (every inter-**Feature** distance) and the minimum and maximum separation distances (both in physical length units). + +*Note:* Because the algorithm iterates over all **Features**, each distance is double-counted. For example, the distance from **Feature** 1 to **Feature** 2 is counted along with the identical distance from **Feature** 2 to **Feature** 1. + +### Required Input Sources + +- **Centroids** -- the X, Y, Z coordinates of each Feature's center of mass, produced by [Compute Feature Centroids](ComputeFeatureCentroidsFilter.md). +- **Phases** -- the phase (Ensemble) that each Feature belongs to, produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeatureNeighborsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeatureNeighborsFilter.md index fd976848ab..5cfde8a531 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeatureNeighborsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeatureNeighborsFilter.md @@ -6,14 +6,33 @@ Statistics (Morphological) ## Description -This **Filter** determines, for each **Feature**, the number of other **Features** that are in contact with it. The algorithm for determining the number of "contiguous" neighbors of each **Feature** is as follows: +This **Filter** determines, for each **Feature**, which other **Features** it is in direct contact with and how much boundary they share. The result is a set of feature-level arrays that many downstream filters depend on -- neighbor misorientation statistics, GBCD, twin merging, boundary strength analysis, and more. -1. Identify the **Feature** to which a **Cell** belongs -2. Identify the **Features** to which each of the current **Cell**'s six (6) face-face neighboring **Cells** (front, back, left, right, up, down) belong -3. If a neighboring **Cell** belongs to a different **Feature** than the current **Cell**, then that **Feature** (owner of the neighboring **Cell**) is added to the list of contiguous neighbors of the **Feature** that owns the current **Cell** -4. Repeat 1-3 for all **Cells** +### How This Filter Works -While performing the above steps, the number of neighboring **Cells** with a different **Feature** owner than a given **Cell** is stored, which identifies whether a **Cell** lies on the surface/edge/corner of a **Feature** (i.e. the **Feature** boundary). Additionally, the surface area shared between each set of contiguous **Features** is calculated by tracking the number of times two neighboring **Cells** correspond to a contiguous **Feature** pair. The **Filter** also notes which **Features** touch the outer surface of the sample (this is obtained for "free" while performing the above algorithm). The **Filter** gives the user the option whether or not they want to store this additional information. +The filter walks every cell in the input **Image Geometry** and compares each cell's *Feature Id* to the *Feature Ids* of its six face-sharing neighbors (front, back, left, right, up, down): + +1. Identify the **Feature** the current cell belongs to. +2. For each of the cell's six face-neighbors, check whether the neighbor cell belongs to a different feature. +3. If so, record that neighbor feature in the current feature's *contiguous neighbor* list and increment the count of shared cell-faces between the two features. +4. While iterating, the filter also tracks which cells lie on a feature boundary (any cell with at least one differently-labeled neighbor) and which features touch the outer geometry boundary (any cell whose neighbor is outside the volume). + +### What This Filter Produces + +The main feature-level outputs are: + +- **Neighbor List** -- for each feature, the list of *Feature Ids* of the features it touches. +- **Number of Neighbors** -- for each feature, the integer count of its contiguous neighbors. Equivalent to the length of each *Neighbor List* entry. +- **Shared Surface Area List** -- for each pair of neighboring features, the number of cell-faces they share. This is in **cell-face units** (a dimensionless count), not physical area. To convert to physical area, multiply by the area of one cell face (which depends on the cell spacing and the orientation of the shared face). + +Two optional outputs can also be stored: + +- **Boundary Cells** (enable *Store Boundary Cells Array*) -- a cell-level array marking which cells sit on any feature boundary. Useful for visualization and for flagging the cells that contribute to grain-boundary statistics. +- **Surface Features** (enable *Store Surface Features Array*) -- a feature-level boolean marking which features touch the outer volume bounds. Downstream statistical filters often exclude surface features from distributions because they are biased by sample truncation (see [Compute Biased Features](ComputeBiasedFeaturesFilter.md)). + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). This filter handles Image Geometries of all dimensions (0D/1D/2D/3D). Thus, it is up to the user to ensure spacing is set inline with intended behavior, specifically for Shared Surface Area List calculation. For more details see the Image Geometry section of the Geometry documentation (currently in the python docs). @@ -26,7 +45,6 @@ This filter handles Image Geometries of all dimensions (0D/1D/2D/3D). Thus, it i + (02) Single Hexagonal Phase Equiaxed + (03) Single Cubic Phase Rolled + (05) Composite - + (01) Single Cubic Phase Equiaxed + (04) Two Phase Cubic Hexagonal Particles Equiaxed + (06) SmallIN100 Synthetic diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesBinaryFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesBinaryFilter.md index 586ac80ffd..b47c738721 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesBinaryFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesBinaryFilter.md @@ -6,11 +6,15 @@ Generic (Misc) ## Description -This **Filter** assigns an **Ensemble** Id number to binary data. The *true* **Cells** will be **Ensemble** 1, and *false* **Cells** will be **Ensemble** 0. This **Filter** is generally useful when the **Cell Ensembles** were not known ahead of time. For example, if an image is segmented into precipitates and non-precipitates, this **Filter** will assign the precipitates to **Ensemble** 1, and the non-precipitates to **Ensemble** 0. +This **Filter** assigns a binary **Ensemble** Id number to each **Cell** based on a boolean (true/false) mask. A **Cell** is a single voxel of an **Image Geometry**, and an **Ensemble** is a group of **Cells** that share a common phase or classification. The input is a single-component boolean mask array; the output is a single-component **Ensemble** array in which every *true* **Cell** is assigned **Ensemble** 1 and every *false* **Cell** is assigned **Ensemble** 0. -% Auto generated parameter table will be inserted here +This **Filter** is generally useful any time data has already been reduced to a two-class (binary) distinction and you need an integer **Ensemble** label for downstream processing — for example separating "selected" from "unselected", "inside" from "outside", or any pass/fail criterion. A common materials-science example is an image segmented into precipitates and non-precipitates: the precipitates (mask *true*) are assigned to **Ensemble** 1 and the non-precipitates (mask *false*) to **Ensemble** 0. + +### Required Input Sources -## Example Pipelines +- **Mask** -- the per-**Cell** boolean mask array, typically produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesFilter.md index 10d0166308..b4601ee91c 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeaturePhasesFilter.md @@ -6,7 +6,14 @@ Generic (Misc) ## Description -This **Filter** determines the **Ensemble** of each **Feature** by querying the **Ensemble** of the **Elements** that belong to the **Feature**. Note that it is assumed that all **Elements** belonging to a **Feature** are of the same **Feature**, and thus any **Element** can be used to determine the **Ensemble** of the **Feature** that owns that **Element**. +This **Filter** determines the **Ensemble** (phase) of each **Feature** by querying the **Ensemble** of the **Elements** that belong to the **Feature**. A **Feature** is a connected region of **Elements** sharing the same **Feature Id**; an **Element** is a single member of a geometry (for an **Image Geometry** this is a **Cell**, i.e. a voxel); and an **Ensemble** is a group of **Features** that share a common phase. Note that it is assumed that all **Elements** belonging to a **Feature** are of the same phase, and thus any **Element** can be used to determine the **Ensemble** of the **Feature** that owns that **Element**. + +The output is a single-component, per-**Feature** phase array: tuple *i* holds the **Ensemble** (phase) Id of **Feature** *i*. + +### Required Input Sources + +- **Cell Feature Ids** -- the per-**Element** **Feature** label array, typically produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or another segmentation filter. +- **Cell Phases** -- the per-**Element** phase array, typically read from EBSD data via [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), [Read CTF Data](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read ANG Data](../OrientationAnalysis/ReadAngDataFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeatureRectFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeatureRectFilter.md index f023cd356c..81adf9338f 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeatureRectFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeatureRectFilter.md @@ -6,7 +6,9 @@ Reconstruction (Reconstruction) ## Description -This **Filter** computes the XYZ minimum and maximum coordinates for each **Feature** in a segmentation. This data can be important for finding the smallest encompassing volume. This values are given in **Pixel** coordinates. +This **Filter** computes the XYZ minimum and maximum coordinates for each **Feature** in a segmentation. A **Feature** is a contiguous group of **Cells** (voxels) that share the same Feature Id; a **Cell** is a single voxel. This data can be important for finding the smallest encompassing volume. These values are given in **Pixel** coordinates (zero-based voxel indices), not physical length units. + +If you instead need the bounding box corners in physical coordinates, see [Compute Feature Bounding Boxes](ComputeFeatureBoundsFilter.md). | | 0 | 1 | 2 | 3 | 4 | |-------|---|---|---|---|---| @@ -26,6 +28,10 @@ If the example matrix above which represents a single feature where the feature Y Max = 3 Z Max = 0 +### Required Input Sources + +This filter requires a **Cell Feature Ids** array, typically produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or one of the misorientation-based segmentation filters in the OrientationAnalysis plugin. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeFeatureSizesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeFeatureSizesFilter.md index f0eb4e4b54..4b8cb364d0 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeFeatureSizesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeFeatureSizesFilter.md @@ -12,6 +12,8 @@ This **Filter** calculates the sizes, volumes/areas, and equivalent diameters of To do so, the **Filter** simply iterates through all **Elements** querying for the **Feature** that owns them and keeping a tally for each **Feature**. The tally is then stored as *NumElements* and the *Volume* and *EquivalentDiameter* are also calculated (and stored) by knowing the volume of each **Element**. +![Fig. 1: The Equivalent (Spherical) Diameter of a feature is the diameter of the sphere whose volume equals the feature's volume (number of cells × voxel volume).](Images/ComputeFeatureSizes_EquivalentDiameter.png) + Note here that **Image Geometry** will always be faster than its equivalent **Rectilinear Grid Geometry** because we leverage the uniformity of voxel sizes to perform volume/area calculations at the feature level rather than the cell level. During the computation of the **Feature** sizes, the size of each individual **Element** is computed and stored in the corresponding **Geometry**. By default, these sizes are deleted after executing the **Filter** to save memory. If you wish to store the **Element** sizes, select the *Generate Missing Element Sizes* option. The sizes will be stored within the **Geometry** definition itself, not as a separate **Attribute Array**. @@ -25,6 +27,10 @@ it will be turned into a 2D calculation instead. This means **Areas instead of V To illustrate why this is think about an image geometry with the dimensions of `1x1x5 (XYZ)`. There is no way to tell whether a `Z * X` or `Z * Y` scaling would be appropriate for the area calculation, given the current information accessible in the algorithm. +### Required Input Sources + +- **Feature Ids** -- a per-**Cell** integer label array produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeGroupingDensityFilter.md b/src/Plugins/SimplnxCore/docs/ComputeGroupingDensityFilter.md index 4a1d1bc84b..629139e952 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeGroupingDensityFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeGroupingDensityFilter.md @@ -36,7 +36,7 @@ The **Feature Volumes** and **Parent Volumes** are typically expressed as a coun #### Use Non-Contiguous Neighbors -When enabled, the filter also queries the **Non-Contiguous Neighbor List** for each child **Feature** in addition to the standard **Contiguous Neighbor List**. This expands the set of checked **Features** to include neighbors that are nearby but do not share a direct face/edge/vertex with the child **Feature**. Enable this option if non-contiguous neighbors were used during the original grouping step. Typically the [Compute Feature Neighborhoods](ComputeNeighborhoodsFilter.md) filter is used to generate the **Non-Contiguous Neighbor List**. The *Multiples of Average Diameter* parameter on that filter has a large effect on the final **Grouping Density** value that is computed. +When enabled, the filter also queries the **Non-Contiguous Neighbor List** for each child **Feature** in addition to the standard **Contiguous Neighbor List**. This expands the set of checked **Features** to include neighbors that are nearby but do not share a direct face/edge/vertex with the child **Feature**. Enable this option if non-contiguous neighbors were used during the original grouping step. Typically the [Compute Feature Neighborhoods](ComputeNeighborhoodsFilter.md) filter is used to generate the non-contiguous neighbor lists. That filter's *Multiples of Average Diameter* parameter can have a large effect on the final Grouping Density value that is computed. #### Find Checked Features @@ -90,6 +90,12 @@ Note that both densities are less than 1.0 because each parent's children have n | Non-Contiguous Neighbor List | (optional, only when "Use Non-Contiguous Neighbors" is enabled)* -- produced by [Compute Feature Neighborhoods](ComputeNeighborhoodsFilter.md). See the "Use Non-Contiguous Neighbors" parameter guidance above for notes on how the upstream *Multiples of Average Diameter* parameter affects results.| +### Required Input Sources + +- **Parent IDs** -- produced by a hierarchical grouping/merge filter (for example a twin- or parent-grain merge step). +- **Contiguous Neighbor List** (and optionally the **Non-Contiguous Neighbor List**) -- produced by [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) / [Compute Feature Neighborhoods](ComputeNeighborhoodsFilter.md). +- **Feature Volumes** -- produced by [Compute Feature Sizes](ComputeFeatureSizesFilter.md). + % Auto generated parameter table will be inserted here ## References diff --git a/src/Plugins/SimplnxCore/docs/ComputeKMeansFilter.md b/src/Plugins/SimplnxCore/docs/ComputeKMeansFilter.md index 9f4924be10..b9beaf1f90 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeKMeansFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeKMeansFilter.md @@ -6,9 +6,11 @@ DREAM3D Review (Clustering) ## Description -***Warning:* The randomnes in this filter is not currently consistent between operating systems even if the same seed is used. Specifically between Unix and Windows. This does not affect the results, but the IDs will not correspond. For example if the Cluster Identifier at index one on Linux is 1 it could be 2 on Windows, the overarching clusters will be the same, but their IDs will be different.** +***Warning:* The randomness in this filter is not currently consistent between operating systems even if the same seed is used. Specifically between Unix and Windows. This does not affect the results, but the IDs will not correspond. For example if the Cluster Identifier at index one on Linux is 1 it could be 2 on Windows, the overarching clusters will be the same, but their IDs will be different.** -This **Filter** applies the k means algorithm to an **Attribute Array**. K means is a *clustering algorithm* that assigns to each point of the **Attribute Array** a *cluster Id*. The user must specify the number of clusters in which to partition the array. Specifically, a k means partitioning is a *Voronoi tesselation*; an optimal solution to the k means problem is such that each point in the data set is associated with the cluster that has the closest mean. This partitioning is the one that minimizes the within cluster variance (i.e., minimizes the within cluster sum of squares differences). The user may select from several distance metrics: *Euclidean*, *Squared Euclidean*, *Manhattan*, *Cosine*, *Pearson*, and *Squared Pearson*. +This **Filter** applies the k means algorithm to an **Attribute Array**. K means is a *clustering algorithm* that assigns each point (each tuple) of the **Attribute Array** to a *cluster Id*. A **cluster** is a group of data points that are more similar to each other than to points in other groups. The user must specify the number of clusters (a dimensionless count, *k*) in which to partition the array. + +Each cluster is summarized by its **centroid**, which is the arithmetic mean (the average position) of all the points assigned to that cluster. A k means partitioning is a *Voronoi tessellation*: every point is assigned to the cluster whose centroid is closest to it, so the data space is carved into regions where each region contains all the points nearer to one centroid than to any other. An optimal solution to the k means problem is one in which each point is associated with the cluster that has the closest mean. This partitioning minimizes the **within-cluster variance**, that is, the sum over all clusters of the squared distances from each point to its cluster centroid; minimizing it makes the points within each cluster as tightly grouped as possible. The user may select from several distance metrics: *Euclidean*, *Squared Euclidean*, *Manhattan*, *Cosine*, *Pearson*, and *Squared Pearson*. ### Distance Metric @@ -27,13 +29,13 @@ Optimal solutions to the k means partitioning problem are computationally diffic 2. Until convergence, repeat the following steps: - Associate each point with the closest mean, where "closest" is determined by the selected distance metric -- Recompute the means based on the new tesselation +- Recompute the means based on the new tessellation Convergence is defined as when the computed means change very little (precisely, when the differences are within machine epsilon). Since Lloyd's algorithm is iterative, it only serves as an approximation, and may result in different classifications on each execution with the same input data. The user may opt to use a mask to ignore certain points; where the mask is *false*, the points will be placed in cluster 0. Note: In SIMPLNX there is no explicit positional subtyping for Attribute Matrix, so the next section should be treated as a high-level understanding of what is being created. Naming the Attribute Matrix to include the type listed on the respective line in the 'Attribute Matrix Created' column is encouraged to help with readability and comprehension. -A clustering algorithm can be considered a kind of segmentation; this implementation of k means does not rely on the **Geometry** on which the data lie, only the *topology* of the space that the array itself forms. Therefore, this **Filter** has the effect of creating either **Features** or **Ensembles** depending on the kind of array passed to it for clustering. If an **Element** array (e.g., voxel-level **Cell** data) is passed to the **Filter**, then **Features** are created (in the previous example, a **Cell Feature Attribute Matrix** will be created). If a **Feature** array is passed to the **Filter**, then an Ensemble Attribute Matrix** is created. The following table shows what type of **Attribute Matrix** is created based on what sort of array is used for clustering: +A clustering algorithm can be considered a kind of segmentation; this implementation of k means does not rely on the **Geometry** on which the data lie, only on the arrangement of the values within the array itself (the *topology* of the space that the array forms). Therefore, this **Filter** has the effect of creating either **Features** or **Ensembles** depending on the kind of array passed to it for clustering. If an **Element** array (e.g., voxel-level **Cell** data) is passed to the **Filter**, then **Features** are created (in the previous example, a **Cell Feature Attribute Matrix** will be created). If a **Feature** array is passed to the **Filter**, then an **Ensemble Attribute Matrix** is created. The following table shows what type of **Attribute Matrix** is created based on what sort of array is used for clustering: | Attribute Matrix Source | Attribute Matrix Created | |------------------|--------------------| @@ -51,7 +53,17 @@ A clustering algorithm can be considered a kind of segmentation; this implementa | Face Ensemble | Face Ensemble | | Cell Ensemble | Cell Ensemble| -This **Filter** will store the means for the final clusters within the created **Attribute Matrix**. +The filter creates a *cluster Ids* array (one dimensionless integer cluster label per input point) alongside the input array, and stores the final cluster means (one mean vector per cluster, in the units of the input array) within the created **Attribute Matrix**. + +### Related Filters + +- [Compute K Medoids](ComputeKMedoidsFilter.md) uses representative data points (medoids) instead of means as the cluster centers. +- [DBSCAN](DBSCANFilter.md) is a density-based clustering algorithm that does not require the number of clusters to be specified in advance. +- [Silhouette](SilhouetteFilter.md) evaluates the quality of a clustering produced by this filter. + +### Required Input Sources + +- **Clustered Attribute Array** -- any **Attribute Array** (cell-level, feature-level, or generic) whose tuples are to be partitioned into clusters. This is typically an output of an earlier computation or import step. % Auto generated parameter table will be inserted here @@ -63,7 +75,7 @@ This **Filter** will store the means for the final clusters within the created * ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeKMedoidsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeKMedoidsFilter.md index 2f3f4f931c..c7a6c8862e 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeKMedoidsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeKMedoidsFilter.md @@ -6,9 +6,9 @@ DREAM3D Review (Clustering) ## Description -***Warning:* The randomnes in this filter is not currently consistent between operating systems even if the same seed is used. Specifically between Unix and Windows. This does not affect the results, but the IDs will not correspond. For example if the Cluster Identifier at index one on Linux is 1 it could be 2 on Windows, the overarching clusters will be the same, but their IDs will be different.** +***Warning:* The randomness in this filter is not currently consistent between operating systems even if the same seed is used. Specifically between Unix and Windows. This does not affect the results, but the IDs will not correspond. For example if the Cluster Identifier at index one on Linux is 1 it could be 2 on Windows, the overarching clusters will be the same, but their IDs will be different.** -This **Filter** applies the k medoids algorithm to an **Attribute Array**. K medoids is a *clustering algorithm* that assigns to each point of the **Attribute Array** a *cluster Id*. The user must specify the number of clusters in which to partition the array. Specifically, a k medoids partitioning is such that each point in the data set is associated with the cluster that minimizes the sum of the pair-wise distances between the data points and their associated cluster centers (medoids). This approach is analogous to k means, but uses actual data points (the medoids) as the cluster exemplars instead of the means. Medoids in this context refer to the data point in each cluster that is most like all other data points, i.e., that data point whose average distance to all other data points in the cluster is smallest. Unlike k means, since pair-wise distances are minimized instead of variance, any arbirtary concept of "distance" may be used; this **Filter** allows for the selection of a variety of distance metrics. +This **Filter** applies the k medoids algorithm to an **Attribute Array**. K medoids is a *clustering algorithm* that assigns each point (each tuple) of the **Attribute Array** to a *cluster Id*. A **cluster** is a group of data points that are more similar to each other than to points in other groups. The user must specify the number of clusters (a dimensionless count, *k*) in which to partition the array. Specifically, a k medoids partitioning is such that each point in the data set is associated with the cluster that minimizes the sum of the pair-wise distances between the data points and their associated cluster centers (medoids). This approach is analogous to k means, but uses actual data points (the medoids) as the cluster exemplars instead of the means. Medoids in this context refer to the data point in each cluster that is most like all other data points, i.e., that data point whose average distance to all other data points in the cluster is smallest. Unlike k means, since pair-wise distances are minimized instead of variance, any arbitrary concept of "distance" may be used; this **Filter** allows for the selection of a variety of distance metrics. ### Distance Metric @@ -21,7 +21,7 @@ The *Distance Metric* parameter determines how distances between data points are - **Pearson [4]**: One minus the Pearson correlation coefficient. Measures the linear correlation between two points, normalized by their standard deviations. - **Squared Pearson [5]**: The square of the Pearson distance metric. -This **Filter** uses the *Voronoi iteration* algorithm to produce the clustering. The algorithm is iterative and proceeds as follows: +This **Filter** uses the *Voronoi iteration* algorithm to produce the clustering. A **Voronoi** partitioning assigns every point to the cluster whose center (here, the medoid) is closest, carving the data space into regions where each region holds all the points nearer to one medoid than to any other. The algorithm is iterative and proceeds as follows: 1. Choose k points at random to serve as the initial cluster medoids 2. Associate each point to the closest medoid @@ -34,7 +34,7 @@ Convergence is defined as when the medoids no longer change position. Since the Note: In SIMPLNX there is no explicit positional subtyping for Attribute Matrix, so the next section should be treated as a high-level understanding of what is being created. Naming the Attribute Matrix to include the type listed on the respective line in the 'Attribute Matrix Created' column is encouraged to help with readability and comprehension. -A clustering algorithm can be considered a kind of segmentation; this implementation of k medoids does not rely on the **Geometry** on which the data lie, only the *topology* of the space that the array itself forms. Therefore, this **Filter** has the effect of creating either **Features** or **Ensembles** depending on the kind of array passed to it for clustering. If an **Element** array (e.g., voxel-level **Cell** data) is passed to the **Filter**, then **Features** are created (in the previous example, a **Cell Feature Attribute Matrix** will be created). If a **Feature** array is passed to the **Filter**, then an Ensemble Attribute Matrix** is created. The following table shows what type of **Attribute Matrix** is created based on what sort of array is used for clustering: +A clustering algorithm can be considered a kind of segmentation; this implementation of k medoids does not rely on the **Geometry** on which the data lie, only on the arrangement of the values within the array itself (the *topology* of the space that the array forms). Therefore, this **Filter** has the effect of creating either **Features** or **Ensembles** depending on the kind of array passed to it for clustering. If an **Element** array (e.g., voxel-level **Cell** data) is passed to the **Filter**, then **Features** are created (in the previous example, a **Cell Feature Attribute Matrix** will be created). If a **Feature** array is passed to the **Filter**, then an **Ensemble Attribute Matrix** is created. The following table shows what type of **Attribute Matrix** is created based on what sort of array is used for clustering: | Attribute Matrix Source | Attribute Matrix Created | |------------------|--------------------| @@ -52,7 +52,17 @@ A clustering algorithm can be considered a kind of segmentation; this implementa | Face Ensemble | Face Ensemble | | Cell Ensemble | Cell Ensemble| -This **Filter** will store the medoids for the final clusters within the created **Attribute Matrix**. +The filter creates a *cluster Ids* array (one dimensionless integer cluster label per input point) alongside the input array, and stores the final cluster medoids (one medoid vector per cluster, in the units of the input array) within the created **Attribute Matrix**. + +### Related Filters + +- [Compute K Means](ComputeKMeansFilter.md) uses the arithmetic mean of each cluster as its center instead of a representative data point. +- [DBSCAN](DBSCANFilter.md) is a density-based clustering algorithm that does not require the number of clusters to be specified in advance. +- [Silhouette](SilhouetteFilter.md) evaluates the quality of a clustering produced by this filter. + +### Required Input Sources + +- **Clustered Attribute Array** -- any **Attribute Array** (cell-level, feature-level, or generic) whose tuples are to be partitioned into clusters. This is typically an output of an earlier computation or import step. % Auto generated parameter table will be inserted here @@ -64,7 +74,7 @@ This **Filter** will store the medoids for the final clusters within the created ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeLargestCrossSectionsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeLargestCrossSectionsFilter.md index ffe68cfff2..cd33942a50 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeLargestCrossSectionsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeLargestCrossSectionsFilter.md @@ -6,7 +6,9 @@ Statistics (Morphological) ## Description -This **Filter** calculates the largest cross-sectional area on a user-defined plane for all **Features**. The **Filter** simply iterates through all **Cells** (on each section) asking for **Feature** that owns them. On each section, the count of **Cells** for each **Feature** is then converted to an area and stored as the *LargestCrossSection* if the area for the current section is larger than the existing *LargestCrossSection* for that **Feature**. +This **Filter** calculates the largest cross-sectional area on a user-defined plane for all **Features**. A **Feature** is a contiguous group of **Cells** (voxels) that share the same Feature Id; a **Cell** is a single voxel. The **Filter** simply iterates through all **Cells** (on each section) asking for the **Feature** that owns them. On each section, the count of **Cells** for each **Feature** is then converted to an area and stored as the *LargestCrossSection* if the area for the current section is larger than the existing *LargestCrossSection* for that **Feature**. + +The area is reported in **square physical units**, not a raw cell count. For each section the per-**Feature** **Cell** count is multiplied by the in-plane voxel area (the product of the two **Image Geometry** spacing values that lie in the chosen plane, e.g. `spacing-X * spacing-Y` for the XY plane). The output `LargestCrossSections` array is a single-component `float32` array created in the **Cell Feature Attribute Matrix**, holding the largest cross-sectional area found for each **Feature**. ### Plane of Interest @@ -16,6 +18,10 @@ The *Plane of Interest* parameter selects the plane along which cross-sections a - **XZ [1]**: Cross-sections are taken on planes perpendicular to the Y axis. Each Y slice is one cross-section. - **YZ [2]**: Cross-sections are taken on planes perpendicular to the X axis. Each X slice is one cross-section. +### Required Input Sources + +This filter requires a **Cell Feature Ids** array, typically produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or one of the misorientation-based segmentation filters in the OrientationAnalysis plugin. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeMomentInvariants2DFilter.md b/src/Plugins/SimplnxCore/docs/ComputeMomentInvariants2DFilter.md index 2782d328a6..6b7d675774 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeMomentInvariants2DFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeMomentInvariants2DFilter.md @@ -6,13 +6,24 @@ Statistics (Statistics) ## Description -This **Filter** computes the 2D Omega-1 and Omega 2 values from the *Central Moments* matrix and optionally will normalize the values to a unit circle and also optionally save the *Central Moments* matrix as a DataArray to the *Cell Feature Attribute Matrix*. Based off the paper by MacSleyne et. al [1], the algorithm will calculate the 2D central moments for each feature starting at *feature id = 1*. Because *feature id 0* is of special significance and typically is a matrix or background it is ignored in this filter. If any feature id has a Z Delta of > 1, the feature will be skipped. This algorithm works strictly in the XY plane and is meant to be applied to a 2D image. Using the research from the cited paper certain shapes can be detected using the Omega-1 and Omega-2 values. An example usage is finding elliptical shapes in an image: +This **Filter** computes the 2D **moment invariants** Omega-1 and Omega-2 for each **Feature** in a 2D image. A **Feature** is a contiguous region of like-segmented cells (for example a particle). **Moment invariants** are scalar shape descriptors derived from the *Central Moments* of a **Feature**: the **Filter** treats each **Feature** as a flat 2D shape, measures how its area is distributed about its own centroid, and condenses that distribution into two numbers that do not change when the shape is translated, rotated, or (after normalization) scaled. Omega-1 and Omega-2 are therefore dimensionless values that describe the *shape* of a **Feature**, independent of its position, orientation, or size. -See below figure from [1] that can help the user classify objects. +In practice these values measure how elongated or irregular a **Feature** is. A perfect circle gives the smallest possible Omega values; the more a **Feature** deviates toward an elongated ellipse or an irregular shape, the larger the Omega values become. By thresholding Omega-1 and Omega-2, you can classify **Features** by shape, for example separating round particles from elongated or irregular ones. -![Example appllication of filter to identify elliptical particales (red) which are differentiated from non-elliptical particals (purple)](Images/ComputeMomentInvariants_Fig1.png) +Based on the paper by MacSleyne et al. [1], the algorithm calculates the 2D central moments for each **Feature** starting at *feature id = 1*. Because *feature id 0* is of special significance and is typically a matrix or background, it is ignored. If any **Feature** has a Z extent (Z Delta) greater than 1 cell, that **Feature** is skipped. The algorithm works strictly in the XY plane and is meant to be applied to a 2D image. -![Example appllication of filter to identify elliptical particales (red) which are differentiated from non-elliptical particals (purple)](Images/ComputeMomentInvariants2D.png) +The **Filter** can optionally normalize the values to a unit circle (the *Normalize Moment Invariants* parameter) and can optionally save the full 3x3 *Central Moments* matrix as a Data Array in the *Feature Attribute Matrix*. + +The figures below, from [1], can help classify objects by their Omega values. An example usage is finding elliptical shapes (red) and differentiating them from non-elliptical shapes (purple): + +![Example application of the filter to identify elliptical particles (red), differentiated from non-elliptical particles (purple)](Images/ComputeMomentInvariants_Fig1.png) + +![Example application of the filter to identify elliptical particles (red), differentiated from non-elliptical particles (purple)](Images/ComputeMomentInvariants2D.png) + +### Required Input Sources + +- **Cell Feature Ids** -- the Feature that owns each Cell, produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Feature Rect** -- the min/max XY pixel coordinates (bounding corners) of each Feature, produced by [Compute Feature Corners](ComputeFeatureRectFilter.md). % Auto generated parameter table will be inserted here @@ -24,11 +35,10 @@ See below figure from [1] that can help the user classify objects. # Acknowledgements The authors would like to thank Dr. Marc De Graef from Carnegie Mellon University for enlightening discussions and a concrete implementation from which to start this filter. -## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeNeighborListStatisticsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeNeighborListStatisticsFilter.md index c05c009cc0..098209f9fa 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeNeighborListStatisticsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeNeighborListStatisticsFilter.md @@ -6,15 +6,27 @@ Statistics (Misc Filters) ## Description -This **Filter** computes the selected statistics for each list contained in a NeighborList container. Each of those statistics are reported back as new Attribute Arrays. The user selectable statistics are: - -+ Length of each list -+ Minimum value from each list -+ Maximum value from each list -+ Mean of each list -+ Median of each list -+ Standard Deviation of each list -+ Summation of each list +This **Filter** reduces a **NeighborList** -- a per-feature list of values, one entry per neighbor -- into per-feature scalar summary statistics. Each chosen statistic becomes its own output **Attribute Array** at the feature level. + +A typical use is summarizing per-feature neighbor misorientations: [Compute Feature Neighbor Misorientations](../OrientationAnalysis/ComputeFeatureNeighborMisorientationsFilter.md) produces a NeighborList containing the misorientation between a feature and each of its neighbors; this filter reduces that list to "average misorientation per feature" or "max neighbor misorientation per feature" so the result can be plotted or thresholded. + +### Available Statistics + +The user can independently enable any combination of: + +- **Length** -- the number of entries in the list (i.e., the number of neighbors). +- **Minimum** -- smallest value in the list. +- **Maximum** -- largest value in the list. +- **Mean** -- arithmetic mean of the list. +- **Median** -- median of the list. +- **Standard Deviation** -- sample standard deviation of the list. +- **Summation** -- sum of all values in the list. + +Output statistics inherit the units of the input list (e.g., degrees for a misorientation list, dimensionless count for a neighbor count list). + +### Required Input Sources + +- **Input NeighborList** -- a feature-level list-of-lists. Common producers include [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) (shared surface area), [Compute Feature Neighbor Misorientations](../OrientationAnalysis/ComputeFeatureNeighborMisorientationsFilter.md) (misorientation per neighbor), [Compute Feature Neighbor C-Axis Misalignments](../OrientationAnalysis/ComputeFeatureNeighborCAxisMisalignmentsFilter.md), or [Compute Slip Transmission Metrics](../OrientationAnalysis/ComputeSlipTransmissionMetricsFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeNeighborhoodsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeNeighborhoodsFilter.md index 59e660f25f..1d9f0a2c73 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeNeighborhoodsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeNeighborhoodsFilter.md @@ -34,11 +34,20 @@ The figure below shows a single target feature and how progressively larger mult ![Search sphere around a feature at 1x, 2x, and 3x its own diameter](Images/ComputeFeatureNeighborhoods_SearchSphere.png) -## Output Notes +### Multiplier -There are 2 outputs from this filter: -- The "Number of Neighbors" for each feature -- The list of "neighbor" features for each neighbor +The *Multiplier* parameter is **dimensionless** -- a multiple of the average ESD. Common values: + +- **1.0** -- search sphere is the same size as the average grain. Catches a feature's immediate neighbors and slightly beyond. +- **2.0-3.0** -- second-nearest-neighbor analysis. +- **5.0+** -- broader clustering / long-range arrangement studies. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md). +- **Feature Centroids** -- produced by [Compute Feature Centroids](ComputeFeatureCentroidsFilter.md). +- **Feature Equivalent Diameters** -- produced by [Compute Feature Sizes](ComputeFeatureSizesFilter.md). +- **Feature Phases** -- produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeNumFeaturesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeNumFeaturesFilter.md index aecdb6ab33..6cf8a38bfa 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeNumFeaturesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeNumFeaturesFilter.md @@ -6,7 +6,13 @@ Statistics (Morphological) ## Description -This **Filter** determines the number of **Features** in each **Ensemble** by summing the total number of rows in the feature attribute matrix belonging to each phase. +This **Filter** determines the number of **Features** in each **Ensemble** by counting the **Features** assigned to each **Ensemble**. An **Ensemble** is a group of **Features** that share common characteristics — most commonly a *phase* (a distinct material or crystallographic constituent in the sample). The filter reads the per-**Feature** phase array and tallies how many **Features** belong to each phase. + +The output is a single-component count array indexed by **Ensemble** (phase) Id: tuple *i* holds the number of **Features** belonging to **Ensemble** *i*. + +### Required Input Sources + +- **Feature Phases** -- the per-**Feature** phase (**Ensemble** Id) array, produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeSurfaceAreaToVolumeFilter.md b/src/Plugins/SimplnxCore/docs/ComputeSurfaceAreaToVolumeFilter.md index 52117bd1fb..efe9c63b12 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeSurfaceAreaToVolumeFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeSurfaceAreaToVolumeFilter.md @@ -6,9 +6,9 @@ Statistics (Morphological) ## Description -This **Filter** calculates the ratio of surface area to volume for each **Feature** in an **Image Geometry**. +This **Filter** calculates the ratio of surface area to volume for each **Feature** in an **Image Geometry**. A **Feature** is a connected region of **Cells** that share the same **Feature Id**. Because surface area has units of length squared and volume has units of length cubed, the resulting ratio has units of *1/length* (the reciprocal of the **Image Geometry** spacing units; for example, if the spacing is in micrometers the ratio is in 1/micrometers). -This filter also optionally calculate the [Sphericity](https://en.wikipedia.org/wiki/Sphericity) of each feature. +This filter also optionally calculates the [Sphericity](https://en.wikipedia.org/wiki/Sphericity) of each feature. Sphericity is a *dimensionless* (unitless) measure of how closely a **Feature**'s shape approaches that of a perfect sphere. ![Equation for Sphericity used in the filter](Images/Sphericity_Equation.png) @@ -17,15 +17,19 @@ This **Filter** determines whether a **Feature** touches an outer *Surface* of t + Any cell location is xmin, xmax, ymin, ymax, zmin or zmax + Any cell has **Feature ID = 0** as a neighbor. +### Required Input Sources + +- **Cell Feature Ids** -- the per-**Cell** **Feature** label array, typically produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md) or another segmentation filter. + ## Algorithm Details -- First, all the boundary **Cells** are found for each **Feature**. +- First, all the boundary **Cells** are found for each **Feature** (see also [Compute Boundary Cells (Image)](ComputeBoundaryCellsFilter.md)). - Next, the surface area for each face that is in contact with a different **Feature** is totalled as long as that neighboring *featureId* is > 0. - This number is divided by the volume of each **Feature**, calculated by taking the number of **Cells** of each **Feature** and multiplying by the volume of a **Cell**. ### WARNING - Aliasing -The surface area will be the surface area of the **Cells** in contact with the neighboring **Feature** and will be influenced by the aliasing of the structure. As a result, the surface area to volume will likely be over-estimated with respect to the *real* **Feature**. +The surface area will be the surface area of the **Cells** in contact with the neighboring **Feature** and will be influenced by the *aliasing* of the structure — the jagged, stair-stepped approximation of a smooth surface that results from representing it on a discrete voxel grid. As a result, the surface area to volume will likely be over-estimated with respect to the *real* **Feature**. ### WARNING - Skewed Results for features touching the surface diff --git a/src/Plugins/SimplnxCore/docs/ComputeSurfaceFeaturesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeSurfaceFeaturesFilter.md index 395152e694..985aa69f56 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeSurfaceFeaturesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeSurfaceFeaturesFilter.md @@ -6,14 +6,14 @@ Generic (Spatial) ## Description -This **Filter** determines whether a **Feature** touches an outer surface of the sample. This is accomplished by simply querying the **Feature** owners of the **Cells** that sit at either . Any **Feature** that owns one of those **Cells** is said to touch an outer surface and all other **Features** are said to not touch an outer surface of the sample. +This **Filter** flags each **Feature** with whether it touches an outer surface of the sample volume. The output is a feature-level boolean array where *false* (0) means the feature is fully enclosed in the interior and *true* (1) means at least one of its cells sits on the sample surface. -This **Filter** determines whether a **Feature** touches an outer *Surface* of the sample volume. A **Feature** is considered touching the *Surface* of the sample if either of the following conditions are met: +A **Feature** is considered a "surface feature" if either of the following is true: -+ Any cell location is xmin, xmax, ymin, ymax, zmin or zmax -+ Any cell has **Feature ID = 0** as a neighbor. +- Any of its cells sits on the outermost voxel layer of the geometry -- i.e., a cell location equal to xmin, xmax, ymin, ymax, zmin, or zmax. +- Any of its cells has a neighbor with **Feature ID = 0**. (Feature ID 0 is the "unassigned" / "outside sample" label, typically produced by a mask or by [Isolate Largest Feature](IdentifySampleFilter.md).) -The output of this filter is a **Feature** level array of booleans where 0=Interior/Not touching and 1=Surface/Touching. +Surface features are usually excluded from size distributions, neighbor statistics, and other analyses because their measured volume is artificially truncated by the sample boundary. See [Compute Biased Features](ComputeBiasedFeaturesFilter.md) for a more statistically rigorous treatment of boundary bias. ### WARNING - Feature ID=0 Voxels @@ -34,6 +34,10 @@ If the structure/data is actually 2D, then the dimension that is planar is not c | ![ComputeSurfaceFeatures_Cylinder](Images/ComputeSurfaceFeatures_Cylinder.png) | ![ComputeSurfaceFeatures_Square](Images/ComputeSurfaceFeatures_Square.png) | | Example showing features touching Feature ID=0 (Black voxels) "Mark Feature 0 Neighbors" is **ON** | Example showing features touching the outer surface of the bounding box | +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeTriangleAreasFilter.md b/src/Plugins/SimplnxCore/docs/ComputeTriangleAreasFilter.md index ced548ef84..d5c97ab7e4 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeTriangleAreasFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeTriangleAreasFilter.md @@ -6,11 +6,25 @@ Surface Meshing (Misc) ## Description -This **Filter** computes the area of each **Triangle** in a **Triangle Geometry** by calculating the following: +This filter computes the surface area of every **Triangle** in a **Triangle Geometry** (a surface mesh built from triangles) and stores the result as a per-triangle **Face Data** array. - 1/2*|AB||AC|sin(O) +### What This Measures and Why -where *O* is the angle between |AB| and |AC|. +Each triangle is defined by three corner **vertices** (nodes). The filter computes the area enclosed by those three vertices using + + Area = 1/2 * |AB| * |AC| * sin(O) + +where *AB* and *AC* are two edge vectors of the triangle and *O* is the angle between them. + +Per-triangle area is a basic mesh-quality and statistics input. It is used to weight other per-triangle quantities (for example, area-weighting triangle normals or curvature when computing feature-level averages) so that large triangles contribute proportionally more than small ones, and it can be summed to report the total surface area of a **Feature** or boundary. + +### Units + +The output area is reported in **squared geometry length units** (length^2). The value uses whatever length unit the **Triangle Geometry** vertices are stored in (for example, micrometers^2 if the mesh coordinates are in micrometers). + +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomCentroidsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomCentroidsFilter.md index 8928f755cb..b6918b20af 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomCentroidsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomCentroidsFilter.md @@ -6,21 +6,34 @@ Statistics (Morphological) ## Description -This **Filter** determines the centroids of each **Feature** in a **Triangle Geometry**. The centroids are determined -using the following algorithm: +This filter computes the centroid (the average position of the bounding nodes) of each **Feature** in a **Triangle Geometry** (a surface mesh built from triangles). -1. Query each triangle within the **Triangle Geometry** to determine its two owners -2. Add the 3 nodes of that triangle to the set of nodes bounding those two owners (*Note that a set will only allow each - node to be entered once for a given owner*) -3. For each **Feature**, find the average (x,y,z) coordinate from the set of nodes that bound it +In a surface mesh, each triangle carries a **Face Labels** value: a pair of **Feature** Ids naming the two features that meet at that triangle. These two features are the triangle's "owners". A **Feature** is the volume of material enclosed by the triangles that reference its Id. The corner points of each triangle are its **nodes** (also called vertices). -% Auto generated parameter table will be inserted here +The centroid of each feature is determined as follows: + +1. For each triangle, read its two owners from the **Face Labels** array. +2. Add the 3 nodes of that triangle to the set of nodes bounding each of those two owners. A set stores each node only once per owner, so shared nodes are not double-counted. +3. For each **Feature**, average the (x, y, z) coordinates of the set of nodes that bound it to obtain the centroid. + +### Boundary / Exterior Label + +A **Face Labels** value of -1 indicates the exterior of the sample (the triangle faces open space rather than another feature). Feature Id -1 is the exterior and is not a real feature; its accumulated "centroid" entry is therefore not physically meaningful and should be ignored. + +### Units -## Example Pipelines +Centroid coordinates are reported in the **geometry length units** of the **Triangle Geometry** vertices (for example, micrometers if the mesh coordinates are stored in micrometers). + +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** -- the per-triangle pair of **Feature** Ids, produced alongside the mesh by [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) or [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomVolumesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomVolumesFilter.md index 5085e66723..b3912c7ae7 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomVolumesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeTriangleGeomVolumesFilter.md @@ -6,25 +6,36 @@ Statistics (Morphological) ## Description -This **Filter** computes the enclosed volume of each **Feature** in a **Triangle Geometry**. The result is the volume of -each surface meshed **Feature**, or alternatively the volume of each unique polyhedron defined by the given _Face -Labels_ array. The volume of any generic polyhedron can be computed using the following algorithm: - -1. Triangulate each face of the polyhedron (in this case, each face is already a triangle within the **Triangle - Geometry**) -2. For each triangular face, ensure the normals are all consistent (this **Filter** uses the convention where normals - point inwards; note that the actual winding of the **Triangle Geometry** is not modified) -3. For each triangular face, create a tetrahedron where the fourth vertex is the origin -4. Compute the signed volume of each tetrahedron -5. Sum the signed tetrahedra volumes to obtain the volume of the enclosing polyhedron +This filter computes the enclosed volume of each **Feature** in a **Triangle Geometry** (a surface mesh built from triangles). The result is the volume of each surface-meshed **Feature**, equivalently the volume of each unique closed polyhedron defined by the **Face Labels** array. -% Auto generated parameter table will be inserted here +In a surface mesh, each triangle carries a **Face Labels** value: a pair of **Feature** Ids naming the two features on either side of that triangle. The set of triangles that reference a given **Feature** Id forms the closed shell of that feature. The **winding** of a triangle is the order in which its three corner vertices are listed; that order defines which way the triangle's surface normal points (inward vs. outward). + +The volume of any generic closed polyhedron is computed as follows: + +1. Triangulate each face of the polyhedron (here, each face is already a triangle in the **Triangle Geometry**). +2. Make the triangle normals consistent. This filter uses the convention where normals point inward. The actual winding stored in the **Triangle Geometry** is not modified. +3. For each triangular face, form a tetrahedron whose fourth vertex is the coordinate-system origin. +4. Compute the signed volume of each tetrahedron. +5. Sum the signed tetrahedra volumes to obtain the volume enclosed by the polyhedron. + +### Watertight Requirement + +This method only yields a correct value for a **watertight** (closed, gap-free) surface. The signed-tetrahedron sum relies on the feature's triangles forming a complete enclosing shell; if the surface has holes or is otherwise open, the computed volume is not meaningful. Surfaces produced by the standard surface-meshing filters are closed per feature and satisfy this requirement. -## Example Pipelines +### Units + +Volume is reported in **cubed geometry length units** (length^3), using whatever length unit the **Triangle Geometry** vertices are stored in (for example, micrometers^3 if the mesh coordinates are in micrometers). + +### Required Input Sources + +- **Triangle Geometry** -- a closed (watertight) surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** -- the per-triangle pair of **Feature** Ids, produced alongside the mesh by [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) or [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ComputeVectorColorsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeVectorColorsFilter.md index 1d036e9314..a20d3b26c9 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeVectorColorsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeVectorColorsFilter.md @@ -6,10 +6,16 @@ Generic (Coloring) ## Description -This **Filter** generates a color for each **Element** based on the vector assigned to that **Element** in the input vector data. The color scheme assigns a unique color to all points on the unit hemisphere using a HSV-like scheme. The color space is approximately represented by the following legend. +This filter generates an RGB color for each **Cell** based on the vector assigned to that **Cell** in the input vector data. The input is a 3-component (float32) vector **Cell** array, and the output is a 3-component unsigned 8-bit (uint8) RGB array with values in the range 0-255. Each input vector is normalized to unit length before its direction is mapped to a color, so only the *direction* of the vector affects the color; its magnitude is ignored. The color scheme assigns a unique color to every direction on the unit hemisphere using an HSV-like scheme. The color space is approximately represented by the following legend. ![Images/VectorColors](Images/VectorColors.png) +When *Apply to Good Voxels Only* is enabled, the supplied boolean or uint8 **Mask** array marks which **Cells** are valid; **Cells** flagged as bad are left black (RGB 0,0,0) instead of being colored. + +### Required Input Sources + +- **Vector Attribute Array** -- a 3-component float32 per-**Cell** vector array. This may come from any filter that produces a per-**Cell** vector field (for example, a dipole, gradient, or orientation-derived vector array). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ComputeVertexToTriangleDistancesFilter.md b/src/Plugins/SimplnxCore/docs/ComputeVertexToTriangleDistancesFilter.md index 8129b68d76..57788f5734 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeVertexToTriangleDistancesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeVertexToTriangleDistancesFilter.md @@ -6,7 +6,17 @@ Sampling (Spatial) ## Description -This **Filter** computes distances between points in a **Vertex Geoemtry** and triangles in a **Triangle Geoemtry**. Specifically, for each point in the **Vertex Geometry**, the Euclidean distance to the closest triangle in the **Triangle Geoemtry** is stored. This distance is *signed*: if the point lies on the side of the triangle to which the triangle normal points, then the distance is positive; otherwise, the distance is negative. Additionally, the ID the closest triangle is stored for each point. +This **Filter** computes distances between points in a **Vertex Geometry** and triangles in a **Triangle Geometry**. Specifically, for each point in the **Vertex Geometry**, the Euclidean distance to the closest triangle in the **Triangle Geometry** is stored. This distance is *signed*: if the point lies on the side of the triangle to which the triangle normal points, then the distance is positive; otherwise, the distance is negative. Additionally, the ID of the closest triangle is stored for each point. + +The computed distance is reported in the same length unit as the coordinates of the two input geometries (e.g., microns, millimeters); both geometries must share the same unit system for the result to be meaningful. + +The sign of each distance depends on the **Triangle Normals**. For the sign to be correct, the normals must be present and consistently oriented across the mesh (all pointing to the same "outside"). Inconsistent or flipped normals will produce sign errors even when the distance magnitude is correct. + +### Required Input Sources + +- **Vertex Geometry** -- the point cloud whose distances are measured. +- **Triangle Geometry** -- the surface mesh measured against, typically produced by a surface-meshing filter such as [Quick Surface Mesh](QuickSurfaceMeshFilter.md) or read from a CAD mesh via [Read STL File](ReadStlFileFilter.md). +- **Triangle Normals** -- per-face normals on the **Triangle Geometry**, produced by [Compute Triangle Normals](TriangleNormalFilter.md); required for correct distance signs. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ComputeVolumeFractionsFilter.md b/src/Plugins/SimplnxCore/docs/ComputeVolumeFractionsFilter.md index 919b4cb0bb..27b6a57297 100644 --- a/src/Plugins/SimplnxCore/docs/ComputeVolumeFractionsFilter.md +++ b/src/Plugins/SimplnxCore/docs/ComputeVolumeFractionsFilter.md @@ -6,11 +6,17 @@ Statistics (Morphological) ## Description -This **Filter** determines the volume fraction of each **Ensemble**. The **Filter** counts the number of **Cells** belonging to each **Ensemble** and stores the number fraction. +This filter determines the volume fraction of each **Ensemble**. An **Ensemble** is a grouping of **Features** that share a common characteristic, such as a crystallographic phase. The filter counts the number of **Cells** belonging to each **Ensemble** and divides by the total number of **Cells**. -% Auto generated parameter table will be inserted here +On an **Image Geometry** every **Cell** has the same volume, so this count fraction is identical to the true volume fraction: dividing each **Ensemble**'s **Cell** count by the total **Cell** count gives the same result as dividing each **Ensemble**'s summed **Cell** volume by the total volume. The output is therefore a per-**Ensemble**, dimensionless volume fraction in the range [0, 1], where all of the fractions sum to 1. + +The result is written to the *Volume Fractions* array in the selected **Ensemble Attribute Matrix**. + +### Required Input Sources -## Example Pipelines +- **Cell Phases** -- a per-**Cell** integer array specifying which **Ensemble** each **Cell** belongs to. This array is typically read directly from EBSD data; the related feature-level array is produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ConcatenateDataArraysFilter.md b/src/Plugins/SimplnxCore/docs/ConcatenateDataArraysFilter.md index edabd3f966..f509fd2b79 100644 --- a/src/Plugins/SimplnxCore/docs/ConcatenateDataArraysFilter.md +++ b/src/Plugins/SimplnxCore/docs/ConcatenateDataArraysFilter.md @@ -14,6 +14,12 @@ This filter is designed to handle arrays of matching array types and component d **NOTE:** If you are wanting to instead combine data arrays into a multi-component array, please see the [Combine Attribute Arrays](CombineAttributeArraysFilter.md) filter. +For example, given two 3-component float arrays of 5 and 7 tuples respectively, the output is a 3-component float array of 12 tuples whose first 5 tuples are the first input and last 7 tuples are the second input. + +### Required Input Sources + +- **Input Data Arrays** -- two or more arrays sharing the same primitive type and the same component dimensions. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ConditionalSetValueFilter.md b/src/Plugins/SimplnxCore/docs/ConditionalSetValueFilter.md index d7ecf3ce78..f2fc44f8a7 100644 --- a/src/Plugins/SimplnxCore/docs/ConditionalSetValueFilter.md +++ b/src/Plugins/SimplnxCore/docs/ConditionalSetValueFilter.md @@ -6,23 +6,42 @@ Core (Misc) ## Description -This **Filter** replaces values in a user specified **Attribute Array** with a user specified value a second boolean **Attribute Array** specifies, but only when **Use Conditional Mask** is *true*. For example, if the user entered a *Replace Value* of *5.5*, then for every occurence of *true* in the conditional boolean array, the selected **Attribute Array** would be changed to 5.5. If **Use Conditional Mask** is *false*, then **Value to Replace** will be searched for in the provided **Attribute Array** and all instances will be replaced. Below are the ranges for the values that can be entered for the different primitive types of arrays (for user reference). The selected **Attribute Array** must be a scalar array. - -### Primitive Data Types - -| Type | Size | Range | -|------------------|------|--------------------| -| Signed Integer | 8 bit |-128 to 127| -| Unsigned Integer | 8 bit |0 to 255| -| Signed Integer | 16 bit |-32,768 to 32,767| -| Unsigned Integer | 16 bit |0 to 65,535| -| Signed Integer | 32 bit |-2,147,483,648 to 2,147,483,647| -| Unsigned Integer | 32 bit |0 to 4,294,967,295| -| Signed Integer | 64 bit | 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807| -| Unsigned Integer | 64 bit |0 to 18,446,744,073,709,551,615| -| Float | 32 bit | -3.4e+38 to -1.1e-38, 0.0, 1.1e-38 to 3.4e+38 (7 digits)| -| Double | 64 bit | -1.7e+308 to -2.2e-308, 0.0, 2.2e-308 to 1.7e+308 (15 digits)| -| Boolean | 8 bit |0 = false and any other value will be forced to 1 = true| +This **Filter** replaces selected values in a scalar **Attribute Array** with a user-specified value. The filter operates in one of two modes selected by the *Use Conditional Mask* parameter. + +### Mode 1 -- Conditional Mask (Use Conditional Mask = ON) + +A second boolean array (the *Conditional Mask*) of the same length picks which tuples to overwrite. Every tuple where the mask is *true* has its scalar value set to *Replace Value*; tuples where the mask is *false* are unchanged. + +Typical use case: replace cell values flagged by an upstream threshold (e.g., set all "bad" cells to 0). + +### Mode 2 -- Value Match (Use Conditional Mask = OFF) + +Every occurrence of *Value to Replace* in the target array is replaced with *Replace Value*. The Conditional Mask parameter is ignored. + +Typical use case: remap a specific sentinel value (e.g., turn every -1 into 0). + +### Numeric Type Compatibility + +The target array must be a **scalar** (single-component) array. *Replace Value* (and *Value to Replace* in Mode 2) are reinterpreted as the array's data type. The valid range for each primitive type: + +| Type | Size | Range | +|------|------|-------| +| Signed Integer | 8 bit | -128 to 127 | +| Unsigned Integer | 8 bit | 0 to 255 | +| Signed Integer | 16 bit | -32,768 to 32,767 | +| Unsigned Integer | 16 bit | 0 to 65,535 | +| Signed Integer | 32 bit | -2,147,483,648 to 2,147,483,647 | +| Unsigned Integer | 32 bit | 0 to 4,294,967,295 | +| Signed Integer | 64 bit | -9.2e18 to 9.2e18 | +| Unsigned Integer | 64 bit | 0 to 1.8e19 | +| Float | 32 bit | ±1.1e-38 to ±3.4e+38 (7 digits) | +| Double | 64 bit | ±2.2e-308 to ±1.7e+308 (15 digits) | +| Boolean | 8 bit | 0 = false, non-zero = true | + +### Required Input Sources + +- **Target Array** -- the scalar cell-level (or other tuple-level) array whose values will be overwritten. +- **Conditional Mask** (only when *Use Conditional Mask* is enabled) -- a boolean array with the same number of tuples; typically produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ConvertColorToGrayScaleFilter.md b/src/Plugins/SimplnxCore/docs/ConvertColorToGrayScaleFilter.md index 6f9a905448..1b218367df 100644 --- a/src/Plugins/SimplnxCore/docs/ConvertColorToGrayScaleFilter.md +++ b/src/Plugins/SimplnxCore/docs/ConvertColorToGrayScaleFilter.md @@ -6,25 +6,34 @@ Processing (Image) ## Description -This **Filter** allows the user to select a *flattening* method for turning an array of RGB or RGBa values into grayscale values. +This **Filter** converts one or more color image arrays (3-component RGB or 4-component RGBA, uint8) into single-component grayscale image arrays using one of four standard flattening algorithms. Use this filter as a preprocessing step before any image-processing filter that expects single-channel intensity data. ### Conversion Algorithm -The *Conversion Algorithm* parameter provides the following choices: +The *Conversion Algorithm* parameter selects how the three (or four) color channels are combined into a single value: -- **Luminosity [0]**: A weighted average of RGB channels that accounts for human perception (more sensitive to green). Uses the BT709 formula by default: Red: 0.2125, Green: 0.7154, Blue: 0.0721. The user can set custom weightings. -- **Average [1]**: Computes a simple arithmetic average of R, G, and B channel values: (R + G + B) / 3. -- **Lightness [2]**: Averages the maximum and minimum channel values: (max(R, G, B) + min(R, G, B)) / 2. -- **SingleChannel [3]**: The user selects a specific R, G, or B channel to use directly as the grayscale values. +- **Luminosity [0]**: weighted average accounting for human perception (more sensitive to green). Default weights are the BT.709 standard: R=0.2125, G=0.7154, B=0.0721. The user may supply custom weights. +- **Average [1]**: simple arithmetic mean of the three channels: (R + G + B) / 3. +- **Lightness [2]**: average of the maximum and minimum channel values: (max(R, G, B) + min(R, G, B)) / 2. +- **SingleChannel [3]**: the user picks one channel (R, G, or B) and that channel's value is used directly. -The user can select 1 or more image data arrays which are assumed to be multi-component arrays of unsigned 8 bit values. The user can create a new AttributeMatrix if they want to store all the newly created arrays in a separate AttributeMatrix. +### Additional Standard Weights -### Additional GrayScale Conversions +Other widely-used weighting schemes (not built-in, but easy to supply as custom Luminosity weights): -The following are some additional accepted grayscale conversions +- **RMY Greyscale**: R=0.500, G=0.419, B=0.081 +- **YIQ / NTSC**: R=0.299, G=0.587, B=0.114 -+ RMY Greyscale: Red: 0.5 Green: 0.419 Blue: 0.081 -+ (YIQ/NTSC): Red: 0.299 Green: 0.587 Blue: 0.114 +### Input/Output Format + +- **Input arrays** must be uint8 with 3 components (RGB) or 4 components (RGBA). With RGBA input, the alpha channel is ignored. +- **Output arrays** are single-component uint8. + +Multiple input arrays can be processed in one filter pass; each produces its own output array. If *Output to New Attribute Matrix* is enabled, the new arrays are placed in a separate Attribute Matrix to keep them organized; otherwise they live alongside the originals. + +### Required Input Sources + +- **Input Image Arrays** -- 3- or 4-component uint8 arrays, typically produced by [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md) or another color-image reader. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ConvertDataFilter.md b/src/Plugins/SimplnxCore/docs/ConvertDataFilter.md index ac99b56623..be86bac737 100644 --- a/src/Plugins/SimplnxCore/docs/ConvertDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/ConvertDataFilter.md @@ -40,6 +40,15 @@ Down casting can have undefined behavior depending on the primitive types involv When converting data from signed values to unsigned values or vice-versa, there can also be undefined behavior. For example, if the user were to convert a signed 4 byte integer array to an unsigned 4 byte integer array and the input array has negative values, then the conversion rules are undefined and may differ from operating system to operating system. +### Related Filters + +- [Reshape Data Array](ReshapeDataArrayFilter.md) -- changes the tuple-dimensions interpretation of an array without converting its underlying data type. Use Reshape (not Convert) when you want to interpret existing bytes under a different shape. +- [Create Data Array](CreateDataArrayFilter.md) -- create a fresh array of the desired type and copy values into it manually. + +### Required Input Sources + +- **Input Array** -- the **Data Array** whose values will be cast to the new type. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/CopyDataObjectFilter.md b/src/Plugins/SimplnxCore/docs/CopyDataObjectFilter.md index 5e94261624..9a4f24e8af 100644 --- a/src/Plugins/SimplnxCore/docs/CopyDataObjectFilter.md +++ b/src/Plugins/SimplnxCore/docs/CopyDataObjectFilter.md @@ -19,7 +19,12 @@ Commonly used _BaseGroup_ children: See the DataStructure section of the reference manual for a complete hierarchy. -When the _Copy to New Parent_ is toggled true a new parameter will appear. This parameter, _Copied Parent Group_, allows for the selected arrays to all be copied into whatever data container you place here. +When *Copy to New Parent* is toggled on, a new parameter appears. This parameter, *Copied Parent Group*, lets the selected objects be copied into a different parent **DataGroup**, **Attribute Matrix**, or **Geometry** rather than alongside their originals. + +### Required Input Sources + +- **Objects to Copy** -- one or more existing **DataObjects** in the Data Structure. +- **Copied Parent Group** (only when *Copy to New Parent* is enabled) -- an existing parent container where the copies will be placed. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CopyFeatureArrayToElementArrayFilter.md b/src/Plugins/SimplnxCore/docs/CopyFeatureArrayToElementArrayFilter.md index fa5affa7dd..ff840386b0 100644 --- a/src/Plugins/SimplnxCore/docs/CopyFeatureArrayToElementArrayFilter.md +++ b/src/Plugins/SimplnxCore/docs/CopyFeatureArrayToElementArrayFilter.md @@ -6,7 +6,19 @@ Core (Memory/Management) ## Description -This **Filter** copies the values associated with a **Feature** to all the **Elements** that belong to that **Feature**. Xmdf visualization files write only the **Element** attributes, so if the user wants to display a spatial map of a **Feature** level attribute, this **Filter** will transfer that information down to the **Element** level. +This **Filter** broadcasts a per-**Feature** value to every **Cell** (element) that belongs to that Feature, producing a new cell-level **Data Array** that has the same length as the Feature Ids array. Each cell receives the value of the Feature it belongs to. + +### When to Use This Filter + +- **Visualization.** Most exporters (Xdmf, VTK, ParaView state files) treat Cell-level arrays as the natural per-voxel scalar to render. Broadcasting a per-grain statistic (size, average misorientation, Schmid factor, biased flag, etc.) down to the Cell level produces a colorable map of that quantity. +- **Downstream filtering on cells.** When you want to threshold cells based on a Feature-level criterion (e.g., "keep cells whose parent grain is unbiased"), it is simpler to broadcast the Feature flag to all cells and then apply a cell-level threshold. + +The output is always the same data type and component shape as the source Feature array. + +### Required Input Sources + +- **Feature Array to Copy** -- any feature-level array; common sources include [Compute Feature Sizes](ComputeFeatureSizesFilter.md), [Compute Average Orientations](../OrientationAnalysis/ComputeAvgOrientationsFilter.md), [Compute Schmid Factors](../OrientationAnalysis/ComputeSchmidsFilter.md), or a custom flag from [Compute Biased Features](ComputeBiasedFeaturesFilter.md) / [Compute Surface Features](ComputeSurfaceFeaturesFilter.md). +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateAMScanPathsFilter.md b/src/Plugins/SimplnxCore/docs/CreateAMScanPathsFilter.md index 0046971cc4..09e4283984 100644 --- a/src/Plugins/SimplnxCore/docs/CreateAMScanPathsFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateAMScanPathsFilter.md @@ -6,7 +6,16 @@ Core (Geometry/Processing) ## Description -Given an input **Edge Geometry**, hatch spacing, hatch length, and hatch rotation angle, this **Filter** will generate an **Edge Geometry** representing the additive manufacturing scan paths along with arrays containing region ids and slice ids for each scan path. The "SliceTriangleGeometry" filter is typically used before this filter to generate the proper edge geometry. +Given an input **Edge Geometry**, hatch spacing, hatch length, and hatch rotation angle, this **Filter** will generate an **Edge Geometry** representing the additive manufacturing scan paths along with arrays containing region ids and slice ids for each scan path. + +### Units + +- **Hatch Spacing** and **Hatch Length** are lengths expressed in the same coordinate units as the input **Edge Geometry** (e.g., millimeters if the slicing was done in millimeters). They are not dimensionless and not pixels. +- **Hatch Rotation Angle** is specified in **degrees**. It is the per-slice rotation applied to the hatch direction. + +### Required Input Sources + +- An input **Edge Geometry** together with its per-edge **Slice Ids** and **Region Ids** arrays. These are typically produced by the [Slice Triangle Geometry](SliceTriangleGeometryFilter.md) filter, which slices a surface-mesh **Triangle Geometry** into the edge geometry consumed here. ![](Images/CreateAMScanVectors_5.png) diff --git a/src/Plugins/SimplnxCore/docs/CreateAttributeMatrixFilter.md b/src/Plugins/SimplnxCore/docs/CreateAttributeMatrixFilter.md index a4a3ac885f..3298120e1e 100644 --- a/src/Plugins/SimplnxCore/docs/CreateAttributeMatrixFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateAttributeMatrixFilter.md @@ -6,11 +6,29 @@ Core (Generation) ## Description -This **Filter** creates a new **Attribute Matrix**. +This **Filter** creates a new empty **Attribute Matrix** at a user-specified location in the **Data Structure**. The matrix is created with a user-specified set of *tuple dimensions* but contains no arrays initially; subsequent filters can add arrays to it. -### Example Usage +### What is an Attribute Matrix? -If you wanted to create an **Attribute Matrix** to represent a 3D volume where the dimensions of the 3 orthogonal axesare X=3, y=4 and Z=5, then the *Tuple Dimensions* would have a value of (3, 4, 5). +An **Attribute Matrix** is a container for **Data Arrays** that share the same *number of tuples* and the same *tuple shape*. All arrays inside one Attribute Matrix represent values "at the same set of points" -- for example, all per-cell arrays of an Image Geometry live in a single Cell Attribute Matrix, all per-feature arrays for a segmented dataset live in a single Feature Attribute Matrix, and all per-ensemble (phase) arrays live in an Ensemble Attribute Matrix. + +This shared-tuple-shape contract is enforced: any array added to an existing Attribute Matrix must match the matrix's tuple dimensions. Use an Attribute Matrix when the values you are grouping are all parallel arrays over the same domain. + +### When to Use This Filter + +- Pre-building the destination for a future filter that creates new feature-level or ensemble-level arrays. +- Creating a custom Attribute Matrix for organizational purposes (e.g., grouping all "computed" arrays separately from the "raw" arrays in the same Cell-level domain). +- Restructuring imported data so that arrays sharing a common dimension end up in the same matrix. + +For containers that hold heterogeneous data (arrays of different sizes, geometries, sub-groups), use [Create Data Group](CreateDataGroupFilter.md) instead. + +### Tuple Dimensions + +For a 3D volume with axes X=3, Y=4, Z=5, the *Tuple Dimensions* are (3, 4, 5). For a 1D feature-list with 100 features, the tuple dimensions are (100). The product of all dimensions equals the total number of tuples that any array added to this matrix must have. + +### Required Input Sources + +- **Parent Data Object Path** -- an existing **DataGroup** or **Geometry** under which the new Attribute Matrix will be created. Typically the output of [Create Image Geometry](CreateImageGeometryFilter.md), [Create Geometry](CreateGeometryFilter.md), or [Create Data Group](CreateDataGroupFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateColorMapFilter.md b/src/Plugins/SimplnxCore/docs/CreateColorMapFilter.md index 65469ab752..70cf8f46e5 100644 --- a/src/Plugins/SimplnxCore/docs/CreateColorMapFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateColorMapFilter.md @@ -1,5 +1,9 @@ # Create Color Map +## Group (Subgroup) + +Core (Image) + ## Description This **Filter** generates a color table array for a given 1-component input array. Each element of the input array @@ -8,9 +12,14 @@ is normalized and converted to a color based on where the value falls in the spe The user can apply an optional data mask and then set the RGB values (0-255) that will be used if the data mask has a FALSE value. +### Required Input Sources + +- A single-component (scalar) **Data Array** to colorize. This can be any scalar array already present in the **DataStructure**, for example a Confidence Index or Image Quality array read by an EBSD reader, a Feature ID array, or any computed scalar metric. +- (Optional) A **Mask Array** (boolean or uint8) used to flag elements as good/bad; flagged-FALSE elements receive the user-specified RGB color. + ## Preset Values -These are the valid preset strings that can be used. +These are the valid preset strings that can be used. This table is maintained by hand and lists the presets shipped with DREAM3D-NX along with a swatch of each color scheme. | Preset Name | Color Space | Example | |-------------|-------------|---------| @@ -135,11 +144,9 @@ These are the valid preset strings that can be used. % Auto generated parameter table will be inserted here -## Example Pipelines - ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/CreateDataArrayAdvancedFilter.md b/src/Plugins/SimplnxCore/docs/CreateDataArrayAdvancedFilter.md index 48a0ee1553..1d00a19811 100644 --- a/src/Plugins/SimplnxCore/docs/CreateDataArrayAdvancedFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateDataArrayAdvancedFilter.md @@ -68,7 +68,13 @@ If the parent is **NOT an Attribute Matrix**, then the user ***MUST*** set the t | Double | 64 bit | -1.7e+308 to -2.2e-308, 0.0, 2.2e-308 to 1.7e+308 (15 digits)| | Boolean | 8 bit |0 = false and any other value will be forced to 1 = true| -The component dimensions should multiply together into a total number of components equal to at least 1. Examples of *Component Dimensions* would be [3] for an RGB Image, [1] for a gray scale image, [1] for a scalar array, [4] for a quaternions array, [10x5] for an array with 10x5 grids at each tuple, etc. All values of the array will be initialized using the chosen initialization option. +The component dimensions should multiply together into a total number of components of at least 1. Examples of *Component Dimensions* would be [3] for an RGB image, [1] for a grayscale image or scalar array, [4] for a quaternions array, [3, 3] for a 3×3 tensor at each tuple, etc. All values of the array are initialized using the chosen initialization option. + +For the simpler case of a single-component-dimension array (most data), use [Create Data Array](CreateDataArrayFilter.md). This advanced version is required only when the component shape itself has more than one dimension. + +### Required Input Sources + +None. The array is created from user-supplied parameters; when the parent is an Attribute Matrix, the tuple dimensions are inherited from it. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateDataArrayFilter.md b/src/Plugins/SimplnxCore/docs/CreateDataArrayFilter.md index 05150bfd51..967cbbeb27 100644 --- a/src/Plugins/SimplnxCore/docs/CreateDataArrayFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateDataArrayFilter.md @@ -52,8 +52,13 @@ If the parent is **NOT an Attribute Matrix**, then the user ***MUST*** set the t | Double | 64 bit | -1.7e+308 to -2.2e-308, 0.0, 2.2e-308 to 1.7e+308 (15 digits)| | Boolean | 8 bit |0 = false and any other value will be forced to 1 = true| -The number of components should be at least 1. Examples of *Number of Components* would be 3 for an RGB Image, 1 for a gray scale image, 1 for a scalar array, 4 for a quaternions array, etc. All values of the array will be initialized to the user set value. The initialization value text box -must have a user entry or the default value *0* will be used. +The number of components should be at least 1. Examples of *Number of Components* would be 3 for an RGB image, 1 for a grayscale image or scalar array, 4 for a quaternions array, etc. All values of the array are initialized to the user-set value. The initialization value text box must have a user entry or the default value *0* will be used. + +This filter creates an array with a **single component dimension** (e.g., (1), (3), (4)). For arrays with multi-dimensional component shapes such as a 3×3 stiffness tensor, use [Create Data Array (Advanced)](CreateDataArrayAdvancedFilter.md) instead. + +### Required Input Sources + +None. The array is created from user-supplied parameters; when the parent is an Attribute Matrix, the tuple dimensions are inherited from it. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateDataGroupFilter.md b/src/Plugins/SimplnxCore/docs/CreateDataGroupFilter.md index 18cb01ed8e..552224a95a 100644 --- a/src/Plugins/SimplnxCore/docs/CreateDataGroupFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateDataGroupFilter.md @@ -6,9 +6,17 @@ Core (Generation) ## Description -This **Filter** creates a new **DataGroup**. +This **Filter** creates a new empty **DataGroup** at a user-specified location in the **Data Structure**. The new DataGroup contains nothing initially; subsequent filters can add child objects to it. -Unlike _AttributeMatrix_, _DataGroup_s are capable of holding any _DataObject_ of any size. +### What is a DataGroup? + +A **DataGroup** is a general-purpose container. Unlike an **Attribute Matrix**, a DataGroup can hold *any* DataObject of *any size* -- geometries, attribute matrices, arrays of varying sizes, even other DataGroups. There is no shared-tuple-shape contract. + +Use a DataGroup when you need to organize heterogeneous data, such as a logical grouping of unrelated arrays or geometries. Use [Create Attribute Matrix](CreateAttributeMatrixFilter.md) instead when all the arrays you are grouping share a common tuple shape and represent values over the same domain. + +### Required Input Sources + +- **Parent Data Object Path** -- an existing **DataGroup**, **Attribute Matrix**, or **Geometry** under which the new DataGroup will be created. The top-level of the Data Structure can also be selected. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateFeatureArrayFromElementArrayFilter.md b/src/Plugins/SimplnxCore/docs/CreateFeatureArrayFromElementArrayFilter.md index 096c27d794..77021730c0 100644 --- a/src/Plugins/SimplnxCore/docs/CreateFeatureArrayFromElementArrayFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateFeatureArrayFromElementArrayFilter.md @@ -6,7 +6,26 @@ Core (Memory/Management) ## Description -This **Filter** copies all the associated **Element** data of a selected **Element Array** to the **Feature** to which the **Elements** belong. The value stored for each **Feature** will be the value of the *last element copied*. +This **Filter** collapses a per-**Cell** (element) array down to a per-**Feature** array by storing one value per Feature. The value stored for each Feature is the **last cell value visited** during the scan -- not an average or majority vote. + +## WARNING: Lossy for Within-Feature Variation + +If the source cell array varies across cells *within* the same Feature, almost all of those values are discarded -- only the last cell scanned wins. **This filter is the correct choice only when every cell in a given Feature is guaranteed to hold the same value** (e.g., a cell-level phase array where every cell of a grain shares the same phase). + +For situations where you want a meaningful per-Feature summary (mean, max, min, median, etc.) of a cell-level array, use: + +- [Compute Array Statistics](ComputeArrayStatisticsFilter.md) -- computes mean, std dev, min, max, etc. per Feature. +- [Compute Average Orientations](../OrientationAnalysis/ComputeAvgOrientationsFilter.md) -- per-Feature average orientation specifically. + +### When This Filter Is Appropriate + +- Copying a uniform-within-feature cell-level array (cell phases, cell ensemble labels) to its Feature-level equivalent. +- Quick "any one example" extraction for diagnostic purposes. + +### Required Input Sources + +- **Cell Array to Copy** -- a cell-level array whose values are uniform within each Feature. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateGeometryFilter.md b/src/Plugins/SimplnxCore/docs/CreateGeometryFilter.md index e310c729e9..9e3a5debc2 100644 --- a/src/Plugins/SimplnxCore/docs/CreateGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateGeometryFilter.md @@ -6,141 +6,57 @@ DREAM3D Review (Geometry) ## Description -This **Filter** creates a **Geometry** object and the necessary **Element Attribute Matrices** on which to store **Attribute Arrays** and **Element Attribute Arrays** which define the geometry. The type of **Attribute Matrices** and **Attribute Arrays** created depends on the kind of **Geometry** being created: +This **Filter** creates a new **Geometry** object of one of eight supported types, together with the **Attribute Matrices** and **Attribute Arrays** needed to define its topology. Use this filter when you have raw coordinate/connectivity data (typically from an external file or an upstream filter) and need to wrap it in a DREAM3D-NX geometry object. -| Type | Attribute Matrices | Attribute Arrays | -|------------------|--------------------|-------------| -| Image | Cell | -| Rectilinear Grid | Cell | x, y, & z Bounds | -| Vertex | Vertex | Vertices | -| Edge | Vertex + Edge | Vertices + Edges | -| Triangle | Vertex + Face | Vertices + Faces | -| Quadrilateral | Vertex + Face | Vertices + Faces | -| Tetrahedral | Vertex + Cell | Vertices + Cells | -| Hexahedral | Vertex + Cell | Vertices + Cells | +For grid-type geometries (Image, Rectilinear Grid), the topology is defined entirely by numeric parameters (dimensions, spacing, origin, or bounds arrays). For mesh-type geometries (Vertex, Edge, Triangle, Quadrilateral, Tetrahedral, Hexahedral), the user supplies a *shared vertex list* and an *element connectivity list* as input arrays. -### Understanding Geometries +### Supported Geometry Types -This **Filter** requires the user to enter information that defines the topological information for the chosen **Geometry**. Choosing valid information for a given **Geometry** necessitates an understanding of how **DREAM3D-NX** stores and interprets this information. A general overview of the data model used in **DREAM3D-NX** may be found here. More specific information for **Geometry** objects is provided below. +| Type | Topology | Element Type | Required Inputs | +|---|---|---|---| +| Image | Regular voxel grid | Cell (voxel) | Dimensions + Spacing + Origin | +| Rectilinear Grid | Variable-spacing grid | Cell | x/y/z Bounds arrays | +| Vertex | Point cloud | Vertex | Vertex coordinates | +| Edge | Line mesh | Edge (2 vertices) | Vertex list + Edge list | +| Triangle | Surface mesh | Face (3 vertices) | Vertex list + Triangle list | +| Quadrilateral | Surface mesh | Face (4 vertices) | Vertex list + Quad list | +| Tetrahedral | Volume mesh | Cell (4 vertices) | Vertex list + Tet list | +| Hexahedral | Volume mesh | Cell (8 vertices) | Vertex list + Hex list | -#### Grid Geometries +![Fig. 1: The eight geometry types and the data that defines each.](Images/CreateGeometry_GeometryTypes.png) -##### Image +### Grid Geometries -An **Image Geometry** is a *grid-like* **Geometry**, and is the simplest and most widely used of the basic **Geometry** types. An **Image Geometry** is a *regular, rectilinear grid*; if the *dimenionality* of the image is *d*, then only *3*d* numbers are needed to completely define the **Geometry**: three *d*-vectors for the *dimensions*, *origin*, and *spacing*. +**Image Geometry** is a *regular, rectilinear grid* defined by three vectors of three numbers each: dimensions, spacing, and origin. -- Dimensions define the extents of the grid. Stored as unsigned 64 bit integers. The dimensions are also known as the **extents** and are *zero* based thus a dimension with a value of 10 has extents from 0-9. -- Spacing defines the physical distance between grid planes for each orthogonal direction (constant along a given direction). Stored as 32 bit floating point numbers. Spacing has been known in the past as *resolution* but this term is ambiguous so spacing is used. A value of "microns per pixel" is a good example of "Spacing" units. -- Origin defines the physical location of the *bottom left* grid point in *d*-dimensional space. Stored as 32 bit floating point numbers. +- **Dimensions** -- grid extents stored as unsigned 64-bit integers. Dimensions are **0-based**, so a dimension of 10 has extents 0-9. No dimension may be zero or negative. +- **Spacing** -- physical distance between grid planes along each axis, stored as 32-bit floats. Units match whatever the source data uses (e.g., microns per voxel). Spacing must be positive and non-zero. (Older docs called this *resolution*; *spacing* is preferred because *resolution* is ambiguous.) +- **Origin** -- physical location of the bottom-left grid point in the geometry's coordinate system. Stored as 32-bit floats. No value restriction. -All **Image Geometries** in **DREAM3D-NX** are defined as 3D images. A 2D image is assumed when one of the dimension values is exactly 1; the 2D image is then considered a plane. Most **DREAM3D-NX** **Filters** will properly take account for the **Image** dimension if it matters (for example, the Find Feature Shapes **Filter** accounts for whether the **Image** is 2D or 3D when computing values such as *aspect ratios* or *axis Euler angles*). No dimension may be negative or equal to 0. The spacing must be a positive, non-zero value. The Origin has no value restrictions. This **Filter** requires the user to enter the nine values for the dimenions, origin, and spacing. +All Image Geometries are stored as 3D; a 2D image is represented by setting one dimension to exactly 1, producing a plane. Downstream filters that care (e.g., *Compute Feature Shapes*) detect this automatically. -Since all **Image Geometries** are implicitly 3D (even when plane-like), the fundamental building-block of an image is a *voxel*, which is a 3D object; therefore, the basic **Element** type for an **Image Geometry** is **Cell**. **Attribute Arrays** associated with **Image Cells** are assumed to raster *x-y-z*, fastest to slowest. +**Rectilinear Grid Geometry** is similar to an Image Geometry but allows variable spacing along each axis. It is defined by three monotonically-increasing 32-bit float bounds arrays (x, y, z). The spacing between any two adjacent planes is the difference between consecutive entries in the bounds array. No origin is needed -- the bounds arrays explicitly encode position. -##### Rectilinear Grid +### Unstructured (Mesh) Geometries -A **Rectilinear Grid Geometry** is a *grid-like* **Geometry**. Similar to an **Image Geometry**, a **Rectilinear Grid Geometry** has grid extents (dimensions), but is allowed to have variable *spacing* along each orthogonal direction. The **Geometry** then requires a total of (xdim + 1) + (ydim + 1) + (zdim + 1) numbers to define the topology. The values are stored in three separate arrays termed the *x bounds*, *y bounds*, and *z bounds*. These bounds arrays store the spatial location of all the planes along a given orthogonal direction. The spacing for a given plane (equivalent to the spacing for an **Image Geometry**) is then the difference between two of these contiguous array values. An origin does not need to be defined for a **Rectilinear Grid Geometry**, since the grid's location in space is explicitly encoded in its bounds arrays. This **Filter** requires the user to select **Attribute Arrays** that define the three bounds arrays. These arrays must be *single component, 32-bit float* arrays. Additionally, the values for each of the bounds arrays must be *strictly increasing*, which guarantees that computing the spacing for a given plane yields a postive value. +Mesh geometries are defined by a **shared vertex list** (a 3-component float array of vertex coordinates) plus an **element connectivity list** (a multi-component unsigned 64-bit integer array, where each tuple is the list of vertex IDs that make up one element). -A **Rectilinear Grid Geometry** may be defined as 2D; the associated bounds array for the plane dimension is then exactly two. No bounds arrays may have less than two values. Since all **Rectilinear Grid Geometries** are implicitly 3D (even when plane-like), the fundamental building-block of an image is a *voxel*, which is a 3D object; therefore, the basic **Element** type for an **Image Geometry** is **Cell**. **Attribute Arrays** associated with **Rectilinear Grid Cells** are assumed to raster *x-y-z*, fastest to slowest. +**Shared vertex** means a vertex used by multiple elements appears only once in the vertex list. For example, two quadrilaterals sharing one edge have 6 unique vertices (not 8). Element IDs are always **0-based**. -#### Unstructured and Mesh-Like Geometries +**Element winding** matters for surface meshes. By convention, vertex order in each element tuple follows the **right-hand rule** -- when fingers curl in the order of the vertices, the thumb points in the direction of the element's surface normal. For tetrahedra, the first three vertices define the base; their winding by the right-hand rule defines a normal pointing toward the fourth vertex. Consistent winding makes tetrahedron volume *signed*, which lets downstream filters detect inverted elements. -##### Vertex - -A **Vertex Geometry** is an *unstructured* **Geometry**. An unstructured **Geometry** requires explicit definition of point coordinates. Sometimes referred to as a *point cloud*, a **Vertex Geometry** is simply a collection of points. Defining this topology requires a total number of values equal to *d* times the total number of points, where *d* is the dimensionality of the point cloud; within **DREAM3D-NX**, *d* is always taken to be three. The point coordinates are stored as *32-bit floats*; no other range restrictions are enforced. This **Filter** requires the user to select an **Attribute Array** that defines these point coordinates. The array must have *three components* and consist of *32-bit floats*. The number of *tuples* in the array defines the number of vertices in the resulting **Vertex Geometry**. - -The fundamental **Element** type of a **Vertex Geometry** is *vertices*. Data stored in a **Vertex Attribute Matrix** is ordered according to **Vertex** *Ids*. Therefore, the nth tuple in the supplied **Vertex** list corresponds to the data stored in the nth column of the **Vertex Attribute Matrix**. By convetion, **Vertex** Ids are *zero indexed*. - -##### Mesh-Like Geometries - -The following **Geometries** are considered *mesh-like*, and all share similar features concerning their storage and interpretation. A mesh-like **Geometry** is an unstructured **Geometry** that additionally requires explicit definition of the connectivity of its **Elements** and its **Vertices**. The **Element** type defines the kind of **Geometry** and the number of **Vertices** needed to define that **Element**: - -| Name | Element Type | Number of Vertices Per Element | -|------------------|--------------------|--------------------| -| Edge | line | 2 | -| Triangle | triangle | 3 | -| Quadrilateral | quadrilateral | 4 | -| Tetrahedral | tetrahedron | 4 | -| Hexahedral | hexahedron | 8 | - -The storage scheme adopted by **DREAM3D-NX** requires at least two arrays to define mesh-like **Geometries**: a list of **Vertices** (i.e., the vertex coordinates) and the **Element** connectivities (i.e., which vertices belong to a given **Element**). To maintain simplicity, flexibility, and small memory overhead, **DREAM3D-NX** uses the concept of *shared vertex lists*. In this paradigm, the vertex coordinates are stored only once per *unique* vertex. Consider a **Quadrilateral Geometry** that consists of just two squares that share one side. In this example, there are exactly *six* unique vertices. The **Attribute Array** that defines the coordinates of these **Vertices** would then have six *tuples*, with three values at each tuple (the x, y, and z positions of that **Vertex**). Writing each tuple on one line, the array could look like this: - - 0.0 0.0 0.0 // Vertex Id 0 - 1.0 0.0 0.0 // Vertex Id 1 - 0.0 1.0 0.0 // Vertex Id 2 - 1.0 1.0 0.0 // Vertex Id 3 - 2.0 0.0 0.0 // Vertex Id 4 - 2.0 1.0 0.0 // Vertex Id 5 - -**Element** connectivities are stored in **Attribute Arrays** that have a number of tuples equal to the total number of **Elements**, with a number of components at each tuple equal to the number of vertices per element. In this example, a quadrilateral list would have two tuples, with four values stored at each tuple (the four vertex Ids that define that quadrilateral). When defining **Elements**, the order in which the **Vertex** Ids are listed, called the *winding*, is important, since this ordering defines the direction of the normal. By convention, the *right hand rule* used. Thus, given the above vertex positions, the following list of **Vertex** Ids defines two quadrilaterals whose normals point along the positive z direction: - - 0 1 3 2 // Quad Id 0 - 1 4 5 3 // Quad Id 1 - -Creating any mesh-like **Geometry** requires the user to supply two arrays: one that defines the vertex coordinates (the *shared vertex list*), which is a three component array of floats; and one that defines the **Element** connectivities, which is a n-component array (where n is the number of vertices per element) of *unsigned 64-bit integers*. Note that any **Element** Id values (**Vertex** or otherwise) are *zero indexed*. - -The shared list schema for mesh storage has the benefit of being space efficient, time efficient when iterating in sequence over vertices or elements, and capable of storing *nonmanifold* meshes. An example of a nonmanifold mesh is a **Triangle Geometry** that has more than two triangles sharing the same edge. This specific example of nonmanifold meshes occurs frequently in **DREAM3D-NX** surface meshes of polycrystals, where many nonmanifold entities may exist (i.e., triple lines and quad points). A significant downside of shared lists is that computing adjacency information, such as the neighbors of a given element or the elements that share a vertex, requires iterating over the entire **Geometry**; other mesh data structures avoid this limitation. Additionally, since the lists are stored as **Attribute Arrays**, which hold information contiguously in memory, adding or removing vertices or elements is tedious and potentially slow. - -Note that although the default interpretation of lists that define mesh-like **Geometries** is shared, no undefined behavior should be observed if the information is not stored shared (i.e., if the same **Vertex** is stored more than once with a different Id). Additionally, not all **Vertices** are required to be associated with an **Element**. The primary requirement is that the largest **Vertex** Ids listed in the **Element** list must not be larger than the total number of **Vertices**. - -##### Edge - -An **Edge Geometry** is the simplest *mesh-like* **Geometry**, consisting of a collection of edges connecting two vertices. Creating an **Edge Geometry** requires supplying a shared **Vertex** list and an **Edge** list. - -##### Triangle - -A **Triangle Geometry** is a *mesh-like* **Geometry**, consisting of a collection of triangles connecting three vertices; it is a type of *surface mesh*. Creating a **Triangle Geometry** requires supplying a shared **Vertex** list and a **Triangle** list. - -##### Quadrilateral - -A **Quadrilateral Geometry** is a *mesh-like* **Geometry**, consisting of a collection of quadrilaterals connecting four vertices; it is a type of *surface mesh*. Creating a **Quadrilateral Geometry** requires supplying a shared **Vertex** list and a **Quadrilateral** list. - -##### Tetrahedral - -A **Tetrahedral Geometry** is a *mesh-like* **Geometry**, consisting of a collection of tetrahedra connecting four vertices; it is a type of *volume mesh*. Creating a **Tetrahedral Geometry** requires supplying a shared **Vertex** list and a **Tetrahedral** list. The winding that define tetrahedra require one additional convention to complement the right hand rule. By convention, the first three vertices define the tetrahedra *base*; the winding of these vertices by the right hand rule defines a normal that points *towards the fourth vertex*. This convention is useful since applying it consistently allows for the volume of the tetrahedra to be *signed*, which is important for determining if a tetrahedron is "inverted". - -##### Hexahedral - -A **Hexahedral Geometry** is a *mesh-like* **Geometry**, consisting of a collection of hexahedra connecting eight vertices; it is a type of *volume mesh*. Creating a **Hexahedral Geometry** requires supplying a shared **Vertex** list and a **Hexahedral** list. - -### Defining Geometries with Attribute Arrays - - For **Geometries** that require the selection of **Attribute Arrays** (all **Geometries** except **Image**), the arrays will be *copied* to create the new **Geometry**. Therefore, any operations on the original array will not affect the topology of the **Geometry**, and any geometric operations will not affect the original array. This behavior can be adjusted in the filter by using the *Array Handling* boolean. +The shared-list scheme is space-efficient and supports *nonmanifold* meshes (e.g., triangle meshes where more than two triangles share an edge, which occurs at triple lines and quadruple points in polycrystalline surface meshes). Its downside: computing adjacency (e.g., "what elements share this vertex?") requires iterating the whole mesh. ### Array Handling -The *Array Handling* parameter controls how the input **Attribute Arrays** (vertex list, element connectivity, etc.) are transferred to the new **Geometry**: - -- **Copy Attribute Arrays [0]**: The input arrays are copied into the new **Geometry**. The original arrays remain in the **Data Structure** and are unaffected by any subsequent geometric operations. -- **Move Attribute Arrays [1]**: The input arrays are moved into the new **Geometry**. The original array paths are removed from the **Data Structure**, reducing memory usage when the originals are no longer needed. - -This **Filter** will validate that the arrays selected to define a **Geometry** "make sense", given the above information for how **Geometries** are stored in **DREAM3D-NX** (for example, no dimension for an **Image** may be less than or equal to zero, no bounds arrays for a **Rectilinear Grid** may have less than two values, and no **Vertex** Ids stored in a shared **Element** list may be larger than the total number of **Vertices** in the shared **Vertex** list). The checks that require accessing the actual array values (as opposed to just descriptive information) will be performed at run time. By default, these checks will only produce warnings, allowing the **Pipeline** to continue; the user may opt to change these warnings to errors by selecting the *Treat Geometry Warnings as Errors* option. - -Generally, arrays used by this **Filter** to create **Geometries** must be supplied by the user. One method to import geometric information into **DREAM3D-NX** is to read the information in from a text file using the Import ASCII Data **Filter**. For example, imagine having an external simulation code that creates a tetrahedral volume mesh with two associated field values, one stored on the mesh vertices and one stored on the mesh tetrahedra. It is possible to import this mesh and corresponding information into **DREAM3D-NX** for further analysis. The user must supply at least two files: one that contains the vertex information and one that contains the tetrahedra information. The vertex file would contain, on each line, the three coordinates of the vertex and the value of the field array on that vertex. It may, for example, look like this: - - # Some header information - # Some more header information - x_pos y_pos z_pos value - 1.235 2.323 1.562 465.2 - -12.3 3.456 2.323 567.4 - 3.450 9.782 6.567 120.2 - ..... - -In this above example, the vertex information begins on line 4; thus, line 4 defines **Vertex** Id 0, line 5 defines **Vertex** Id 1, etc. Similarly, a file containing information about tetrahedra is needed: - - # Some header information - # Some more header information - vert_0 vert_1 vert_2 vert_3 value - 1 2 0 3 12.42 - 2 7 5 4 14.71 - 6 9 7 8 16.78 - ..... +The *Array Handling* parameter controls what happens to the input arrays passed to this filter: - Again, the real information begins on line 4, which defines the connectivity for **Tetrahedra** Id 0. These Id values refer to the **Vertex** Ids from the first file (for example, a **Vertex** Id of 0 corresponds to the information on line 4 of the first file). Remember to consider the *right hand rule* when dealing with mesh-like **Geometries**, as this will affect the **Vertex** ordering! +- **Copy Attribute Arrays [0]**: input arrays are copied into the new geometry. Originals are left in place. +- **Move Attribute Arrays [1]**: input arrays are moved into the new geometry and removed from their original location. Saves memory when the original copies are no longer needed. - Assuming it is possible to get the mesh into files similar to the above ones, it is straightforward to import the information into **DREAM3D-NX**. First, create an emtpy Data Container. Then, run the Import ASCII Data **Filter** for the vertex file. In the above example, line 3 could be used as headers to define the array names (remember that **Vertex** positions must be of type *float*!). Allow the reader wizard to create an **Attribute Matrix** in which to store the arrays. Repeat the process with another Import ASCII Data **Filter** to read the tetrahedra information (remember in this case that Id values must be of type *int64\_t*!). At this point, there will be two **Attribute Matrices** in the **Data Container**, one with 4 arrays (the **Vertex** information) and one with 5 arrays (the **Tetrahedra** information). The Create Geometry **Filter** wants the **Vertex** list as a three component array and the **Tetrahedra** list as a four component array. To combine the individual arrays into ones of the proper component dimension, run the Combine Attribute Arrays **Filter**. At this point, the Create Geometry **Filter** may be used to create a **Tetrahedral Geometry** using the combined arrays. After this **Filter**, the Move Data **Filter** may be used to move the arrays that represent the values stored on the **Vertices** and **Tetrahedra** into the created **Vertex** and **Cell Attribute Matrices**. +### Validation - When creating **Geometries**, remember to consider all the various rules for how a **Geometry** is stored and interpreted. In particular, remeber that **Element** Ids are always zero indexed, mesh-like **Geometries** obey the *right hand rule* for windings and normal directions, and **Element** lists are by default considered *shared*. Note that although the storage scheme used by **DREAM3D-NX** (shared lists) is highly generic, some **Filters** may assume that the **Geometry** is reasonably *well formed*. +The filter validates that the supplied arrays "make sense" for the chosen geometry type (e.g., bounds arrays for a Rectilinear Grid have at least 2 values; no vertex ID in a connectivity list exceeds the vertex count). Checks that require reading actual values run at execute time. By default these checks produce warnings; enable *Treat Geometry Warnings as Errors* to make them fail the pipeline. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreateImageGeometryFilter.md b/src/Plugins/SimplnxCore/docs/CreateImageGeometryFilter.md index 027f2d8d7b..3075cf5592 100644 --- a/src/Plugins/SimplnxCore/docs/CreateImageGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreateImageGeometryFilter.md @@ -1,30 +1,34 @@ # Create Geometry (Image) -## This filter should be considered deprecated. Use the "Create Geometry" filter instead - ## Group (Subgroup) Core (Generation) +> ⚠ **Deprecation Notice.** This filter is deprecated. Use the more general [Create Geometry](CreateGeometryFilter.md) filter instead. This filter is retained for compatibility with legacy pipelines. + ## Description -This **Filter** creates an **Image Geometry** specifically for the representation of a 3D rectilinear grid of voxels (3D) or pixels -(2D). Each axis can have its starting point (origin), resolution, and length defined for the **Geometry**. The **Data Container** in which to place the **Image Geometry** must be specified. +This **Filter** creates an **Image Geometry** -- a regular grid of voxels (3D) or pixels (2D). The user supplies the dimensions, spacing, and origin; the filter creates a new geometry object with no cell data attached. Use it before reading raw binary data into a grid, before creating synthetic data on a regular grid, or whenever you need a fresh empty Image Geometry. + +An Image Geometry is the simplest and most widely used DREAM3D-NX geometry type. For dimensionality *d*, only 3 × *d* numbers are needed to completely define it: three *d*-vectors for the dimensions, origin, and spacing. -An **Image Geometry** is a *grid-like* **Geometry**, and is the simplest and most widely used of the basic **Geometry** types. An **Image Geometry** is a *regular, rectilinear grid*; if the *dimenionality* of the image is *d*, then only *3*d* numbers are needed to completely define the **Geometry**: three *d*-vectors for the *dimensions*, *origin*, and *spacing*. +- **Dimensions** -- grid extents. Stored as unsigned 64-bit integers. Dimensions are **0-based**, so a dimension of 10 spans extents 0-9. No dimension may be zero or negative. +- **Spacing** -- physical distance between grid planes along each axis. Stored as 32-bit floats. Units match the source data (e.g., microns per voxel). Spacing must be positive and non-zero. (*Resolution* was the older name; *spacing* is preferred because *resolution* is ambiguous.) +- **Origin** -- physical location of the bottom-left grid point in the geometry's coordinate system. Stored as 32-bit floats. No value restriction. -- Dimensions define the extents of the grid. Stored as unsigned 64 bit integers. The dimensions are also known as the **extents** and are *zero* based thus a dimension with a value of 10 has extents from 0-9. -- Spacing defines the physical distance between grid planes for each orthogonal direction (constant along a given direction). Stored as 32 bit floating point numbers. Spacing has been known in the past as *resolution* but this term is ambiguous so spacing is used. A value of "microns per pixel" is a good example of "Spacing" units. -- Origin defines the physical location of the *bottom left* grid point in *d*-dimensional space. Stored as 32 bit floating point numbers. +All Image Geometries are stored as 3D; a 2D image is represented by setting one dimension to exactly 1, producing a plane. Downstream filters that care about dimensionality (e.g., *Compute Feature Shapes*) detect the 2D case automatically. -All **Image Geometries** in **DREAM3D-NX** are defined as 3D images. A 2D image is assumed when one of the dimension values is exactly 1; the 2D image is then considered a plane. Most **DREAM3D-NX** **Filters** will properly take account for the **Image** dimension if it matters (for example, the Find Feature Shapes **Filter** accounts for whether the **Image** is 2D or 3D when computing values such as *aspect ratios* or *axis Euler angles*). No dimension may be negative or equal to 0. The spacing must be a positive, non-zero value. The Origin has no value restrictions. This **Filter** requires the user to enter the nine values for the dimenions, origin, and spacing. +Since all Image Geometries are implicitly 3D, the building block is a *voxel*, which is a 3D object. The basic **Element** type for an Image Geometry is **Cell**. Attribute arrays associated with cells are stored in x-y-z raster order (fastest to slowest). -Since all **Image Geometries** are implicitly 3D (even when plane-like), the fundamental building-block of an image is a *voxel*, which is a 3D object; therefore, the basic **Element** type for an **Image Geometry** is **Cell**. **Attribute Arrays** associated with **Image Cells** are assumed to raster *x-y-z*, fastest to slowest. +![Fig. 1: An Image Geometry is defined by its dimensions (number of cells per axis), spacing (physical distance between grid planes per axis), and origin (the bottom-left grid point).](Images/CreateImageGeometry_OriginSpacingDimensions.png) ### Example Usage -If you are reading in raw binary data that represents data on a regular grid, the user will need to run this -filter first to create a description of the **Geometry**. +When importing raw binary data on a regular grid, run this filter first to create the geometry description; then attach data via subsequent reader filters. + +### Required Input Sources + +None. The geometry is created from user-supplied parameters. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CreatePythonSkeletonFilter.md b/src/Plugins/SimplnxCore/docs/CreatePythonSkeletonFilter.md index af0f56db77..ab03b78d5c 100644 --- a/src/Plugins/SimplnxCore/docs/CreatePythonSkeletonFilter.md +++ b/src/Plugins/SimplnxCore/docs/CreatePythonSkeletonFilter.md @@ -1,21 +1,16 @@ # Create Python Plugin and/or Filters -## Description +## Group (Subgroup) -The **Create Python Plugin and/or Filters** is a tool in the DREAM3D-NX environment that allows users to generate or update Python plugins and filter codes. This filter provides an interface for setting up and configuring Python filters within DREAM3D-NX pipelines, either by creating new plugins or by adding to existing ones. +Core (Generation) -## Usage +## Description -### Configuration +The **Create Python Plugin and/or Filters** is a tool in the DREAM3D-NX environment that allows users to generate or update Python plugins and filter codes. This filter provides an interface for setting up and configuring Python filters within DREAM3D-NX pipelines, either by creating new plugins or by adding to existing ones. -The filter requires several parameters to be set, which dictate whether a new plugin is created or an existing one is modified. Key parameters include: +The filter is driven entirely by its parameters (described in the auto-generated table below), which dictate whether a new plugin is created or an existing one is modified. -- `Use Existing Plugin`: A flag indicating whether to modify an existing plugin. -- `Name of Plugin`: The name of the plugin. -- `Human Name of Plugin`: A human-readable name for the plugin. -- `Existing Plugin Location`: The directory where the existing plugin is located (for updates). -- `Plugin Output Directory`: The directory where the new plugin will be stored. -- `Filter Names`: A list of filter names to be included in the plugin, separated by commas. +## Usage ### Generating a New Plugin @@ -44,9 +39,11 @@ If your plugin was not generated using the provided filter but was instead creat - In the `__init__.py` file, add to the `all` method. - In the `Plugin.py` file, add to the `get_filters` method. -## Example Pipelines +### Required Input Sources + +None -- this **Filter** generates source files on disk and does not consume any **DataStructure** objects. -None +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/CropEdgeGeometryFilter.md b/src/Plugins/SimplnxCore/docs/CropEdgeGeometryFilter.md index d1d76bc5e4..98398f34c2 100644 --- a/src/Plugins/SimplnxCore/docs/CropEdgeGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/CropEdgeGeometryFilter.md @@ -1,11 +1,17 @@ # Crop Geometry (Edge) +## Group (Subgroup) + +Core (Conversion) + ## Description -The **Crop Geometry (Edge) Filter** allows users to crop a region of interest (ROI) from an **Edge Geometry**. This filter is essential for isolating specific portions of edge-based data structures. +The **Crop Geometry (Edge) Filter** allows users to crop a region of interest (ROI) from an **Edge Geometry**. This filter is essential for isolating specific portions of edge-based data structures. For cropping voxel-based data instead, see [Crop Geometry (Image)](CropImageGeometryFilter.md). Users can selectively crop specific dimensions of the **Edge Geometry** by toggling **Crop X Dimension**, **Crop Y Dimension**, and **Crop Z Dimension** ON or OFF. Only dimensions that are turned ON will be cropped. +The **Min Coordinate** and **Max Coordinate** values define the ROI bounds and are specified in the **Edge Geometry's** physical coordinate units (the same units as the vertex positions), *not* as cell or vertex indices. + ### Boundary Intersection Behavior The *Boundary Intersection Behavior* parameter provides the following choices: @@ -89,8 +95,6 @@ As you can see, the edges that intersect the ROI boundary have been interpolated % Auto generated parameter table will be inserted here -## Example Pipelines - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/SimplnxCore/docs/CropImageGeometryFilter.md b/src/Plugins/SimplnxCore/docs/CropImageGeometryFilter.md index 06955dbc50..78bc0cffeb 100644 --- a/src/Plugins/SimplnxCore/docs/CropImageGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/CropImageGeometryFilter.md @@ -1,80 +1,86 @@ # Crop Geometry (Image) +## Group (Subgroup) + +Core (Spatial) + ## Description -This **Filter** allows the user to crop a region of interest (ROI) from an **Image Geometry**. The input parameters are in units of voxels or physical coordinates. +This **Filter** extracts a region of interest (ROI) from an **Image Geometry**, producing a new geometry that contains only the selected cells. Bounds can be specified either in cell indices (voxels) or in physical coordinates. Individual dimensions (X, Y, Z) can be cropped independently. -It is possible to also crop specific dimensions of the **Image Geometry** by toggling **Crop X Dimension**, **Crop Y Dimension**, and **Crop Z Dimension** ON and OFF. +This is the inverse of [Pad Image Geometry](PadImageGeometryFilter.md). Common uses are isolating a sample from its overscan border, focusing analysis on a single feature, or reducing data size for testing. -## WARNING: NeighborList Removal +### Bounds Mode + +The *Use Physical Bounds* parameter selects how the crop bounds are interpreted: + +- **Use Physical Bounds = false**: bounds are integer **cell indices** (0-based, **inclusive** on both ends). Xmin=50, Xmax=99 keeps cells 50 through 99 (the last 50 cells of a 100-cell volume). +- **Use Physical Bounds = true**: bounds are **physical coordinates** in the geometry's units. The filter computes which cells fall inside the box defined by those coordinates, taking the geometry's origin and spacing into account. + +If any bound exceeds the geometry's extent on that axis, the filter clamps to the geometry's actual extent. The filter fails in preflight only when **all** of the requested bounds fall outside the geometry. -If the option to "Renumber Features" is turn ON and the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, those arrays will be **REMOVED** because those lists are now invalid. Re-run the *Find Neighbors* filter to re-create the lists. +### Per-Axis Cropping +The *Crop X Dimension*, *Crop Y Dimension*, and *Crop Z Dimension* booleans toggle whether each axis is cropped at all. An axis with its flag OFF retains all of its cells regardless of the bounds setting. -## Examples +### Examples -In the following examples, the following image is being used. +In the following examples, the source image has: -- Origin: [0.0, 0.0, 0.0] -- Spacing: {0.5, 0.5, 1.0} -- Dimensions: {100, 100, 1} +- Origin: (0.0, 0.0, 0.0) +- Spacing: (0.5, 0.5, 1.0) +- Dimensions: (100, 100, 1) -So the bounds of the image is (0-50 micron, 0-50 micron, 0-1 micron) +So the physical bounds are (0-50 microns, 0-50 microns, 0-1 micron). ![Base image for examples](Images/CropImageGeometry_1.png) -### Example 1 +#### Example 1 -- Crop to the last 50 cells in X and Y -If the user wanted to crop the last 50 voxels in the X and Y axis then the user would use the following values: + Xmin = 50, Xmax = 99 + Ymin = 50, Ymax = 99 + Zmin = 0, Zmax = 0 + Use Physical Bounds = false - Xmin = 50, - Xmax = 99, - Ymin = 50, - Ymax = 99, - Zmin = 0, - Zmax = 0 +Result: ![Cropped image using voxels as the bounds](Images/CropImageGeometry_2.png) -**Note:** the units in the above image is in microns. +#### Example 2 -- Crop to the middle 50 cells -**Note:** The input parameters are *inclusive* and begin at *0*, so in the above example *50-99* will include the last 50 voxels. + Xmin = 25, Xmax = 74 + Ymin = 25, Ymax = 74 + Zmin = 0, Zmax = 0 + Use Physical Bounds = false -### Example 2 +Result: -If the user would like to crop out the `middle` 50 voxels from the image, these are the inputs: +![Cropped image using voxels as the bounds](Images/CropImageGeometry_3.png) - Xmin = 25, - Xmax = 74, - Ymin = 25, - Ymax = 74, - Zmin = 0, - Zmax = 0 +#### Example 3 -- Crop using physical coordinates, with one bound exceeding the volume -![Cropped image using voxels as the bounds](Images/CropImageGeometry_3.png) + Xmin = 30 microns, Xmax = 65 microns + Ymin = 30 microns, Ymax = 65 microns + Zmin = 0 microns, Zmax = 65 microns + Use Physical Bounds = true -### Example 3 +The Zmax of 65 microns exceeds the geometry's 1-micron Z extent and is silently clamped. The crop still succeeds because at least part of the requested box lies inside the geometry. -In this example the user is going to define the crop using physical coordinates and also selecting an upper bound that exceeds the actual bounds of the image. In this case, the filter will instead use the maximum bounds from that axis. +![Cropped image using voxels as the bounds](Images/CropImageGeometry_4.png) - Xmin = 30 microns, - Xmax = 65 microns, - Ymin = 30 microns, - Ymax = 65 microns, - Zmin = 0 microns, - Zmax = 65 microns +### Renumber Features -**Note:** This will work because at least some portion of the cropped image is within the original image. If **ALL** cropped values fall out side of the image bounds then the filter will error out in preflight. +Cropping can fully remove some **Features** from the volume, which leaves their Feature IDs unused and produces gaps. If *Renumber Features* is enabled, the Cell Feature Attribute Matrix is resized to drop empty features and remaining Features are renumbered to be contiguous starting from 1. Leave this off if you intend to compare the cropped output against the original larger volume by Feature ID. -![Cropped image using voxels as the bounds](Images/CropImageGeometry_4.png) +The user can save the cropped volume as a new **Data Container** or overwrite the current volume in place. -User may note that the way the bounds are determined are affected by the origin and spacing, so be sure to take these into account when supplying coordinate bounds for the crop. +## WARNING: NeighborList Removal -## Renumber Features +When *Renumber Features* is enabled and the Cell Feature Attribute Matrix contains any *NeighborList* arrays, those arrays are **removed** because they refer to the old Feature IDs. Re-run [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) afterward to rebuild them. -It is possible with this **Filter** to fully remove **Features** from the volume, possibly resulting in consistency errors if more **Filters** process the data in the pipeline. If the user selects to *Renumber Features* then the *Feature Ids* array will be adjusted so that all **Features** are continuously numbered starting from 1. The user should decide if they would like their **Features** renumbered or left alone (in the case where the cropped output is being compared to some larger volume). +### Required Input Sources -The user has the option to save the cropped volume as a new **Data Container** or overwrite the current volume. +- **Input Image Geometry** -- the geometry to crop. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/CropVertexGeometryFilter.md b/src/Plugins/SimplnxCore/docs/CropVertexGeometryFilter.md index 4e4bd5ca8a..aeedb254f1 100644 --- a/src/Plugins/SimplnxCore/docs/CropVertexGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/CropVertexGeometryFilter.md @@ -2,18 +2,33 @@ ## Group (Subgroup) -DREAM3D Review (Cropping/Cutting) +Geometry (Cropping/Cutting) ## Description -This **Filter** crops a **Vertex Geometry** by the given bounding box. Unlike the cropping of an Image, it is unknown until run time how the **Geometry** will be changed by the cropping operation. Therefore, this **Filter** requires that a new **Geometry** be created to contain the cropped **Vertex Geometry**. The user-selected **Vertex** data arrays will be copied, with tuples *removed* for any **Vertices** outside the bounding box. The user must supply a name for the cropped **Geometry**, but all other copied objects will retain the same names as the original source. +This **Filter** crops a **Vertex Geometry** (a point cloud) down to the points that lie inside a user-defined, axis-aligned bounding box. The box is specified by a *Min Pos* corner and a *Max Pos* corner. Both corners are given in **physical coordinate units** (the same length units as the vertex coordinates, e.g. microns), *not* in cell or index units. -*Note:* Since it cannot be known before run time how many **Vertices** will be removed during cropping, the new **Vertex Geometry** and all associated **Vertex** data to be copied will be initialized to have size 0. +A vertex is kept when its X, Y, and Z coordinates all fall within the box. The test is **inclusive** on every face of the box: a vertex is retained when its coordinate is greater than or equal to the corresponding *Min Pos* value and less than or equal to the corresponding *Max Pos* value. Vertices on the boundary planes are therefore kept, and vertices outside any face of the box are discarded. -% Auto generated parameter table will be inserted here +Unlike cropping an **Image Geometry**, it is not known until run time how many vertices will survive the crop. Therefore this **Filter** creates a new **Vertex Geometry** to hold the cropped result rather than modifying the input in place. The user-selected vertex data arrays are copied into the new geometry with the tuples for any discarded vertices removed. The user must supply a name for the cropped geometry; all other copied objects keep the same names as in the original source. + +*Note:* Because the number of surviving vertices cannot be known before run time, the new **Vertex Geometry** and all associated vertex data to be copied are initialized to size 0 and then grown to the final size during execution. + +### Related Filters + +- [Crop Geometry (Edge)](CropEdgeGeometryFilter.md) -- crops an **Edge Geometry** to a bounding box. +- [Crop Geometry (Image)](CropImageGeometryFilter.md) -- crops an **Image Geometry** by cell index ranges. + +### Required Input Sources -## Example Pipelines +- **Vertex Geometry to Crop** -- a **Vertex Geometry** (point cloud) to be cropped. + +% Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/DBSCANFilter.md b/src/Plugins/SimplnxCore/docs/DBSCANFilter.md index 968178fe47..2de5adfdd2 100644 --- a/src/Plugins/SimplnxCore/docs/DBSCANFilter.md +++ b/src/Plugins/SimplnxCore/docs/DBSCANFilter.md @@ -28,7 +28,11 @@ Points that are in sparse regions of the data space are considered "outliers"; t The user may select from a number of options to use as the distance metric. -An advantage of DBSCAN over other clustering approaches (e.g., k-means) is that the number of clusters is not defined *a priori*. Additionally, DBSCAN is capable of finding arbitrarily shaped, nonlinear clusters, and is robust to noise. +An advantage of DBSCAN over other clustering approaches (e.g., [Compute K Means](ComputeKMeansFilter.md)) is that the number of clusters is not defined *a priori*. Additionally, DBSCAN is capable of finding arbitrarily shaped, nonlinear clusters, and is robust to noise. + +### Required Input Sources + +- **Input Data Array** -- any 2D or 3D scalar/multi-component array (other than `bool`) to be clustered. This may already exist in your **DataStructure**, or be assembled from coordinate components using [Combine Attribute Arrays](CombineAttributeArraysFilter.md) (see the **Visualization Tips** section). ### Examples @@ -67,19 +71,19 @@ This filter is designed to be applicable to any 2D or 3D array (other than bool Take note of the name of your input array referred to as `input_array` from here on, and the cluster ids array name referred to as `cluster_array` from here on. **Step 2 (2D only): Create a 1 component array of 0s named `Z`** -This can be done with the *Create Data Array* filter. **It's important to ensure the created array has the same length and type as `input_array`** +This can be done with the [Create Data Array](CreateDataArrayFilter.md) filter. **It's important to ensure the created array has the same length and type as `input_array`** **Step 3 (2D only): Merge `input_array` and `Z` array** -This can be done with the *Combine Attribute Arrays* filter. Make sure **`input_array` is above the `Z` array** in the "Attribute Arrays to Combine" parameter. **The output array will now be the new `input_array` for the following steps**, so it's recommended to enable the "Move Data" parameter to avoid confusion and keep data structure tree clean. +This can be done with the [Combine Attribute Arrays](CombineAttributeArraysFilter.md) filter. Make sure **`input_array` is above the `Z` array** in the "Attribute Arrays to Combine" parameter. **The output array will now be the new `input_array` for the following steps**, so it's recommended to enable the "Move Data" parameter to avoid confusion and keep data structure tree clean. **Step 4: Convert `input_array` to `float32` (skip step if not applicable)** -This can be done with the "Convert AttributeArray DataType" filter. Be sure to set "Scalar Type" parameter to `float32`. +This can be done with the [Convert AttributeArray DataType](ConvertDataFilter.md) filter. Be sure to set "Scalar Type" parameter to `float32`. **Step 5: Create Vertex Geometry** -This can be done with the "Create Geometry" filter. Be sure to set "Geometry Type" to `Vertex`. Your `input_array` is going to be the "Shared Vertex List", so place it in the corresponding parameter with the same name. Take note of the created "Vertex Data" *AttributeMatrix* this will be referred to as `vertex_data` in following steps. +This can be done with the [Create Geometry](CreateGeometryFilter.md) filter. Be sure to set "Geometry Type" to `Vertex`. Your `input_array` is going to be the "Shared Vertex List", so place it in the corresponding parameter with the same name. Take note of the created "Vertex Data" *AttributeMatrix* this will be referred to as `vertex_data` in following steps. **Step 6: Move the `cluster_array` into `vertex_data` *AttributeMatrix*** -This can be done with the "Move Data" filter. Place the `cluster_data` array in the "Data to Move" parameter, and place `vertex_data` in the "New Parent" parameter. +This can be done with the [Move Data](MoveDataFilter.md) filter. Place the `cluster_data` array in the "Data to Move" parameter, and place `vertex_data` in the "New Parent" parameter. **Step 7: Run the pipeline** This concludes the post-processing. @@ -98,7 +102,7 @@ This implementation of DBSCAN uses a grid approach to greatly increase the speed #### Understanding the Grid -The most important part to understand for the function to click into place is the Grid. The Grid is a regular grid that contains all the points in the input array. It serves as a way to spatially partition the dataset for processing. The voxel cells all have a side length of `Epsilon / sqaure_root(Dimensions)` where `Epsilon` is the user supplied hyperparameter and `Dimensions` is the number of components in the input array. This means that if your input array has 2 components the regular grid can be visualized as a square and 3 components can be visualized as a cube. +The most important part to understand for the function to click into place is the Grid. The Grid is a regular grid that contains all the points in the input array. It serves as a way to spatially partition the dataset for processing. The voxel cells all have a side length of `Epsilon / square_root(Dimensions)` where `Epsilon` is the user supplied hyperparameter and `Dimensions` is the number of components in the input array. This means that if your input array has 2 components the regular grid can be visualized as a square and 3 components can be visualized as a cube. #### Minimum Points @@ -108,7 +112,7 @@ This hyperparameter has outsized effects on how many cluster expansion/merge ite #### Epsilon -This hyperparameter is the basis for the entire algorithm. It actually has two separate use cases in this implementation. The first was laid out already in the **Understanding the Grid** section, as it effects the size of the voxels in the regular grid. The second is the maximum distance allowed between any two points in the input array for them to be considered density connected. As you may have perceived, these two use cases are connected, in that the voxels side length ensures all points within the same voxel satisfy the density connected requirement inherently. When preforming merge checks between voxels, every point in a grid is compared against every point in the other grid to see if there are any points that have a distance *less than* `Epsilon`. +This hyperparameter is the basis for the entire algorithm. It actually has two separate use cases in this implementation. The first was laid out already in the **Understanding the Grid** section, as it effects the size of the voxels in the regular grid. The second is the maximum distance allowed between any two points in the input array for them to be considered density connected. As you may have perceived, these two use cases are connected, in that the voxels side length ensures all points within the same voxel satisfy the density connected requirement inherently. When performing merge checks between voxels, every point in a grid is compared against every point in the other grid to see if there are any points that have a distance *less than* `Epsilon`. This hyperparameter has outsized effects on how accurate cluster result is to ground truth and what value is appropriate for `Minimum Points`. Detailed further in the **Optimization** section below. @@ -116,11 +120,11 @@ This hyperparameter has outsized effects on how accurate cluster result is to gr For `Epsilon`, ideally you want a little *a priori* knowledge on what the average distance between points in the dataset is, and start with slightly above that. However, this can be supplemented by visualizing the dataset, selecting a couple of areas you would consider clusters, finding the distance between some of the points on the edges of each of the clusters, and setting an `Epsilon` slightly above that. -For `Minimum Points`, previous recommendations suggested 1 above the dimensions of input data (for 2D - 3 and for 3D - 4). However, the density of points heavily effects this. If you have several packed regions and the rest sparse higher values are reasonable (5-9), and vise versa. **Avoid supplying a 1 as this will result in 0 unlabeled points always, unless that is knowingly the intention.** +For `Minimum Points`, previous recommendations suggested 1 above the dimensions of input data (for 2D - 3 and for 3D - 4). However, the density of points heavily effects this. If you have several packed regions and the rest sparse higher values are reasonable (5-9), and vice versa. **Avoid supplying a 1 as this will result in 0 unlabeled points always, unless that is knowingly the intention.** #### Optimization -Before any optimization, you should always try cleaning up your data. **Standardizing your data with a scaler**, such as [StandardScaler `fit_transform()` from Sci-Kit](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html), **will make it much easier to tune the `Epsilon` parameter**. Similarly, **subtle changes in output can be caused by duplicate points in input array**. Duplicate points can be identified and removed with filters like "Identify Duplicate Vertices" and "Remove Flagged Vertices". These require your data to be in a `SharedVertexList` which is type-locked to `float32`, if typecasting is safe this can be done with steps similar to the ones laid out in the **Visualization** section. Otherwise, you may need to clean the data before import to `simplnx`. +Before any optimization, you should always try cleaning up your data. **Standardizing your data with a scaler**, such as [StandardScaler `fit_transform()` from Sci-Kit](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html), **will make it much easier to tune the `Epsilon` parameter**. Similarly, **subtle changes in output can be caused by duplicate points in input array**. Duplicate points can be identified and removed with filters like [Identify Duplicate Vertices](IdentifyDuplicateVerticesFilter.md) and [Remove Flagged Vertices](RemoveFlaggedVerticesFilter.md). These require your data to be in a `SharedVertexList` which is type-locked to `float32`, if typecasting is safe this can be done with steps similar to the ones laid out in the **Visualization** section. Otherwise, you may need to clean the data before import to `simplnx`. Optimization is going to rely on extensive *a priori* knowledge of the data no matter what. However, this knowledge can be obtained through sequential runs of the filter and some visualization of the output. That said here is how to interpret results to optimize the speed and/or increase accuracy of output: @@ -147,7 +151,7 @@ Additionally, oddities such as duplicates in the dataset or non-standardized dat This can obviously be caused by large datasets, but it can be mitigated with some changes. Firstly, the "Parse Order" parameter can result in immediate speedups of 60% or more on a majority of datasets by switching to `Low Density First`. The idea being that lower density regions are cheaper for merge checks, so other denser core grids can be picked off early if they are close to sparser core grids, meaning that the expensive grids have less of a chance of running against one another. Another change is tightening the voxels grids by lowering the `Epsilon` and reducing the `Minimum Points` slightly. For ideal performance, in the vast majority of cases, you want to reach the lowest value for both of these that still produces expected clustering. This is because the most costly part is the distance check most of the time. Logically, grids with fewer points run less distance checks. **If your algorithm spends more time in "cluster expansion pass:" than "Identifying Qualifying Independent Clusters".** See output window. -There are many datasets that this is normal in such as `No Structure` from **Examples**. This typically happens when `Minimum Points` is too high. This results in too few Core grids being identified. Since few clusters are able to be formed, most of the time is spent in iterative loops expanding the clusters rather than just preforming the early merges in the Core grid step. +There are many datasets that this is normal in such as `No Structure` from **Examples**. This typically happens when `Minimum Points` is too high. This results in too few Core grids being identified. Since few clusters are able to be formed, most of the time is spent in iterative loops expanding the clusters rather than just performing the early merges in the Core grid step. ### Parse Order diff --git a/src/Plugins/SimplnxCore/docs/DeleteDataFilter.md b/src/Plugins/SimplnxCore/docs/DeleteDataFilter.md index 0abc965f22..8b50708bda 100644 --- a/src/Plugins/SimplnxCore/docs/DeleteDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/DeleteDataFilter.md @@ -6,7 +6,28 @@ Core (Memory/Management) ## Description -This **Filter** allows the user to remove specified objects from the existing structure. This can be helpful if the user has operations that need as much memory as possible and there are extra objects that are not needed residing in memory. Alternatively, this **Filter** allows the user to remove objects that may share a name with another object further in the **Pipeline** that another **Filter** tries to create, since DREAM3D-NX generally does not allows objects at the same hierarchy to share the same name. +This **Filter** removes one or more **Data Objects** from the **Data Structure**. Common use cases: + +- **Free memory.** When subsequent filters need as much RAM as possible and some arrays are no longer needed. +- **Avoid name collisions.** DREAM3DNX does not allow two objects at the same hierarchy level to share the same name. If a downstream filter will create an object with the same name as an existing one, delete the existing one first. +- **Clean up after extraction.** When *Move* or *Extract* options on other filters left behind unused parent containers. + +### Cascade Behavior + +Deletion is recursive on containers. Deleting a: + +- **Geometry** also deletes its child Attribute Matrices and all arrays inside them. +- **Attribute Matrix** also deletes all child arrays. +- **DataGroup** also deletes all of its children, including nested DataGroups, recursively. +- **Data Array** removes only that array. + +## WARNING: Downstream Preflight Will Fail + +Any filter later in the pipeline that references a deleted object by path will fail preflight when re-run. Delete only objects you are certain are not used downstream, or be prepared to update downstream filter parameters. + +### Required Input Sources + +- **Data Objects to Delete** -- a list of paths to existing **DataObjects** in the Data Structure. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ErodeDilateBadDataFilter.md b/src/Plugins/SimplnxCore/docs/ErodeDilateBadDataFilter.md index 4e1c68abef..fec4f37983 100644 --- a/src/Plugins/SimplnxCore/docs/ErodeDilateBadDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/ErodeDilateBadDataFilter.md @@ -6,14 +6,13 @@ Processing (Cleanup) ## Description -Bad data refers to a **Cell** that has a *Feature Id* of *0*, which means the **Cell** has failed some sort of test and -been marked as a *bad* **Cell**. +This **Filter** grows or shrinks regions of *bad data* (cells with *Feature Id = 0*) by one cell-layer per iteration, using standard image-morphology operations. It is a building block for cleaning up isolated noise or for compensating for boundaries that were systematically under- or over-measured by the experiment. + +![Fig. 1: Dilate grows the bad-data (Feature Id 0) region outward by one cell layer per iteration; Erode shrinks it, reassigning each bad cell to its majority neighbor. The Number of Iterations sets the layer count.](Images/ErodeDilateBadData_IterationSequence.png) ### Dilation -If the **bad** data is *dilated*, the Filter grows the *bad* data by one **Cell** in -an iterative sequence for a user defined number of iterations. During the *dilate* process the *Feature Id* of any -Cell neighboring a *bad* **Cell** will be changed to *0*. +*Dilate* grows the bad-data region outward. Each iteration changes any cell adjacent to a bad cell into a bad cell, adding a one-cell-thick layer. | Before Dilation | After Dilation | |--------------------------------------|--------------------------------------| @@ -21,42 +20,31 @@ Cell neighboring a *bad* **Cell** will be changed to *0*. ### Erosion -If the *bad* data is *eroded*, the Filter shrinks the -bad data by one **Cell** in an iterative sequence for a user defined number of iterations. During the *erode* process -the *Feature Id* of the *bad* **Cell** is changed from *0* to the *Feature Id* of the majority of its neighbors. If -there is a tie between two *Feature Ids*, then one of the *Feature Ids*, chosen randomly, will be assigned to the *bad* -**Cell**. +*Erode* shrinks the bad-data region. Each iteration converts each bad cell into the *Feature Id* held by the majority of its neighbors. Ties are broken randomly. Single-cell bad regions disappear in one iteration; thicker regions take more. | Before Erosion | After Erosion | |--------------------------------------|--------------------------------------| | ![](Images/ErodeDilateBadData_1.png) | ![](Images/ErodeDilateBadData_3.png) | -` - -Goals a user might be trying to accomplish with this Filter include: +### When to Use This Filter -- Remove small or thin regions of bad data by running a single (or two) iteration *erode* operation. -- Increase the size of a *bad* data region by running an *dilate* operation. This might be useful if the experimental - technique tends to underestimates the size of certain objects. For example, when running EBSD, the pores (which show - up as *bad* data) are generally smaller in the scans than in the specimen, because the beam, when it is just inside - the pore, still can pick up signal from the material just beneath the pore. +- **Erode** to remove small or thin regions of bad data — single-cell EBSD dropouts, salt-and-pepper noise. +- **Dilate** to grow under-measured features. For example, EBSD scans tend to under-estimate pore size because the beam picks up signal from material *below* the pore when it sits at the pore edge; dilating the *Feature Id = 0* region restores the true pore boundary. +- **Erode followed by Dilate** (a morphological *opening*) is the classic pattern for removing isolated noise without affecting larger regions. A single erode-dilate pair will erase isolated single-cell bad regions but return larger pores to almost their original size. +- **Dilate followed by Erode** (a morphological *closing*) fills small holes inside bad-data regions while preserving their outer boundary. -Running the *erode-dilate* operations in pairs can often change the size of some objects without affecting others. For -example, if there were a number of big pores and a number of single *bad* **Cells**, running a single *erode* operation -would remove the single **Cells** and reduce the pores by one **Cell**. If this is followed immediately by a *dilate* -operation, then the pores would grow by one **Cell** and return to near their original size, while the single **Cells** -would remain removed and not "grow back". +### Iterations and Direction -### Operation +- *Number of Iterations* is in **cell-layers**. An iteration count of 3 grows or shrinks the bad-data region by 3 cells. +- *X Direction*, *Y Direction*, and *Z Direction* toggle whether the morphology is applied along that axis. Disable an axis to perform anisotropic erosion/dilation -- useful when serial-sectioning resolution is anisotropic (typically Z is coarser than X and Y) and you want to limit smoothing along the fine axes. -The *Operation* parameter selects which morphological operation to apply: +## WARNING: Feature Data Will Become Invalid -- **Dilate [0]**: Grows bad data regions by one **Cell** per iteration. Any **Cell** neighboring a bad **Cell** has its *Feature Id* changed to 0. -- **Erode [1]**: Shrinks bad data regions by one **Cell** per iteration. Each bad **Cell** is assigned the *Feature Id* of the majority of its neighbors. +By modifying cell-level data, any feature-level data that was previously computed will most likely be invalid after this filter runs. Re-run any downstream feature-level computation filters to ensure accurate results. -## WARNING: Feature Data Will Become Invalid +### Required Input Sources -By modifying the cell level data, any feature data that was previously computed will most likely be invalid at this point. Filters that compute feature level data should be rerun to ensure accurate final results from your pipeline. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). Cells with Feature Id = 0 are treated as bad. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ErodeDilateCoordinationNumberFilter.md b/src/Plugins/SimplnxCore/docs/ErodeDilateCoordinationNumberFilter.md index 2e11f06787..d6ff9c42f5 100644 --- a/src/Plugins/SimplnxCore/docs/ErodeDilateCoordinationNumberFilter.md +++ b/src/Plugins/SimplnxCore/docs/ErodeDilateCoordinationNumberFilter.md @@ -6,23 +6,39 @@ Processing (Cleanup) ## Description -This **Filter** will smooth the interface between *good* and *bad* data. The user can specify a *coordination number*, -which is the number of neighboring **Cells** of opposite type (i.e., *good* or *bad*) compared to a given **Cell** that -is acceptable. For example, a single *bad* **Cell** surrounded by *good* **Cells** would have a *coordination number* of -*6*. The number entered by the user is actually the maximum tolerated *coordination number*. If the user entered a value -of *4*, then all *good* **Cells** with 5 or more *bad* neighbors and *bad* **Cells** with 5 or more *good* neighbors -would be removed. After **Cells** with unacceptable *coordination number* are removed, then the neighboring **Cells** -are *coarsened* to fill the removed **Cells**. - -By default, the **Filter** will only perform a single iteration and will not concern itself with the possibility that -after one iteration, **Cells** that were acceptable may become unacceptable by the original *coordination number* -criteria due to the small changes to the structure during the *coarsening*. The user can opt to enable the *Loop Until -Gone* parameter, which will continue to run until no **Cells** fail the original criteria. - -| Before Filter | After Filter | -|--------------------------------------|--------------------------------------| +This **Filter** smooths the interface between *good* and *bad* cells (or, more generally, between any two adjacent feature regions) by removing cells whose neighborhood is mostly the opposite class. It targets isolated voxels and small protrusions that are surrounded by cells of a different feature, then fills them in with their neighbors' data via isotropic coarsening. + +The *coordination number* is the count of a cell's face-sharing neighbors that belong to a different class. With 6 face neighbors, the coordination number ranges from **0 to 6**: + +- **CN = 0** -- all 6 neighbors agree with the cell. Solidly inside a region. +- **CN = 1-2** -- on a flat or gently curved feature boundary. +- **CN = 4-5** -- a thin protrusion or finger of one feature sticking into another. +- **CN = 6** -- a single isolated cell completely surrounded by another feature. + +![Fig. 1: A cell's coordination number is the count of its six face-neighbors belonging to a different feature; cells whose coordination number meets the threshold are absorbed into a neighboring feature.](Images/ErodeDilateCoordinationNumber_CoordinationNumber.png) + +| Before Filter | After Filter | +|------------------------------------------------------|-----------------------------------------------------| | ![](Images/ErodeDilateCoordinationNumber_Before.png) | ![](Images/ErodeDilateCoordinationNumber_After.png) | +### How This Filter Works + +The user specifies a *coordination number* threshold. Any cell whose coordination number is **greater than or equal to** this threshold (and greater than 0) is removed. After the offending cells are identified, neighboring features grow outward (isotropic coarsening) to fill the resulting gaps. See [Remove Minimum Size Features](RequireMinimumSizeFeaturesFilter.md) for the shared definition of isotropic coarsening. + +For example, a threshold of *4* removes any cell with 4, 5, or 6 differing neighbors (i.e., isolated voxels and thin protrusions). A threshold of *2* is much more aggressive and will erase any cell with 2 or more differing neighbors. + +### Loop Until Gone + +By default the filter performs **one** pass. After one pass, the coarsening can leave new cells whose coordination number now exceeds the threshold (because their neighbors changed). Enabling *Loop Until Gone* repeats the algorithm until no remaining cell exceeds the original criterion. Use this for full smoothing; use the single-pass mode when you want a controlled, gentle cleanup. + +### When to Use This Filter + +This is the right tool for "salt-and-pepper" cleanup -- isolated single-voxel grains, thin two-cell protrusions, and other small geometric anomalies that segmentation produced but are likely noise. It is more morphologically aware than the size-based filters because it considers neighborhood shape, not just cell count. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ErodeDilateMaskFilter.md b/src/Plugins/SimplnxCore/docs/ErodeDilateMaskFilter.md index 8f81cd62e1..3c75c0ec61 100644 --- a/src/Plugins/SimplnxCore/docs/ErodeDilateMaskFilter.md +++ b/src/Plugins/SimplnxCore/docs/ErodeDilateMaskFilter.md @@ -6,31 +6,39 @@ Processing (Cleanup) ## Description -If the mask is _dilated_, the **Filter** grows the _true_ regions by one **Cell** in an iterative sequence for a user -defined number of iterations. During the _dilate_ process, the classification of any **Cell** neighboring a _false_ * -*Cell** will be changed to _true_. If the mask is _eroded_, the **Filter** shrinks the _true_ regions by one **Cell** in -an iterative sequence for a user defined number of iterations. During the _erode_ process, _true_ **Cells** that have -at least one _false_ neighbor are changed to _false_. The **Filter** also offers the option(s) to -turn on/off the erosion or dilation in specific directions (X, Y or Z). +This **Filter** grows or shrinks the *true* region of a boolean *mask* array by one cell-layer per iteration, using standard image-morphology operations. The mask is a cell-level boolean array (typically produced by a threshold operation such as [Multi-Threshold Objects](MultiThresholdObjectsFilter.md)) where *true* marks cells of interest and *false* marks excluded cells. -This filter will ONLY change the _Mask_ data array and not any of the other data arrays in the same attribute matrix. +Only the **Mask** array is modified; no other cell data is changed. -The example images below were generated **AFTER** the execution of the filter and essentially any black pixel is where the **Mask** was false and any other color is where the **Mask** is true. (The colors are the typical IPF Colors using a <001> reference direction) +The example images below show the IPF-colored data after the filter has run. Black pixels are cells where the mask is *false*; colored pixels are where the mask is *true*. -| Before Dilatation | After Dilation | -|--------------------------------------|--------------------------------------| +| Before Dilation | After Dilation | +|----------------------------------------|----------------------------------------| | ![](Images/ErodeDilateMask_Before.png) | ![](Images/ErodeDilateMask_Dilate.png) | -| Before Erosion | After Erosion | -|--------------------------------------|--------------------------------------| -| ![](Images/ErodeDilateMask_Before.png) | ![](Images/ErodeDilateMask_Erode.png) | +| Before Erosion | After Erosion | +|----------------------------------------|----------------------------------------| +| ![](Images/ErodeDilateMask_Before.png) | ![](Images/ErodeDilateMask_Erode.png) | -### Operation +### When to Use This Filter -The *Operation* parameter selects which morphological operation to apply to the mask: +- **Erode** the mask to discard the boundary layer of valid cells. Useful before computing feature-level statistics from EBSD data, since cells right at the sample edge are often unreliable even after passing a quality threshold. +- **Dilate** the mask to recover cells that were marked invalid by an over-aggressive threshold but lie immediately adjacent to valid data. -- **Dilate [0]**: Expands the masked (true) regions by one **Cell** per iteration. Any **Cell** neighboring a false **Cell** is changed to true. -- **Erode [1]**: Shrinks the masked (true) regions by one **Cell** per iteration. True **Cells** that have at least one false neighbor are changed to false. +### Opening and Closing + +Chaining an erode and a dilate pass (with equal iteration counts) performs the two classic compound morphology operations: + +![Fig. 1: Opening (erode then dilate) removes small isolated true regions and thin protrusions while returning the larger region to about its original size; Closing (dilate then erode) fills small holes and gaps while preserving the outer boundary.](Images/Morphology_OpeningClosing.png) + +### Iterations and Direction + +- *Number of Iterations* is in **cell-layers**. An iteration count of 3 grows or shrinks the *true* region by 3 cells. +- *X Direction*, *Y Direction*, and *Z Direction* toggle whether the morphology is applied along that axis. Disable an axis to perform anisotropic morphology -- useful when serial-sectioning resolution is anisotropic (typically Z is coarser than X and Y) and you want to limit growth or shrinking along the fine axes. + +### Required Input Sources + +- **Mask Array** -- a boolean cell-level array, typically produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md) applied to an EBSD confidence index, image quality, or similar scalar. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ExecuteProcessFilter.md b/src/Plugins/SimplnxCore/docs/ExecuteProcessFilter.md index feaeda0d5e..7f1f992b43 100644 --- a/src/Plugins/SimplnxCore/docs/ExecuteProcessFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExecuteProcessFilter.md @@ -22,6 +22,17 @@ For a command with spaces in the path > "C:/Program Files/DREAM3D-6.6.332/nxrunner.exe" "C:/Program Files/DREAM3D-6.6.332/PrebuiltPipelines/Workshop/EBSD Reconstruction/(01) SmallIN100 Archive.json" +The path to the executable should be given as an **absolute path**; relative paths and shell built-ins that are resolved by a particular shell are not reliable across platforms. + +### Blocking and Timeout + +- **Should Block**: When enabled, the **Filter** waits for the launched process to finish (or to start, on platforms where that distinction applies) before the pipeline continues. When disabled, the process is launched and the pipeline moves on without waiting. +- **Timeout (ms)**: Only applies when *Should Block* is enabled. It is the maximum time, in milliseconds, that the **Filter** will wait for the command before giving up. + +### Required Input Sources + +None -- this **Filter** launches an external program and does not consume any **DataStructure** objects. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ExtractComponentAsArrayFilter.md b/src/Plugins/SimplnxCore/docs/ExtractComponentAsArrayFilter.md index 30df3ed16f..b286df21aa 100644 --- a/src/Plugins/SimplnxCore/docs/ExtractComponentAsArrayFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExtractComponentAsArrayFilter.md @@ -6,11 +6,23 @@ Core (Memory/Management) ## Description -This **Filter** will do one of the following to one component of a multicomponent **Attribute Array**: +This **Filter** operates on a single component of a multicomponent **Attribute Array**, supporting three modes of behavior: -- Remove 1 component from multicomponent **Attribute Array** completely [This is done implicitly so long as **Move Extracted Components To New Array** is false] -- Extract 1 component from multicomponent **Attribute Array** and store it in a new **DataArray** without removing from original -- Extract 1 component from multicomponent **Attribute Array** and store it in a new **DataArray** and remove that component from the original +- **Remove only** (default): the selected component is deleted from the source array; no new array is created. +- **Extract only** (*Move Extracted Components To New Array* = true, *Remove from Original* = false): the selected component is copied into a new scalar **DataArray**; the source array is unchanged. +- **Extract and remove** (*Move Extracted Components To New Array* = true, *Remove from Original* = true): the selected component is moved into a new scalar **DataArray** and removed from the source. + +### Component Indexing + +The component selector is **0-based**. For a 3-component array, valid component indices are 0, 1, and 2. + +### When to Use This Filter + +Use to pull a single channel out of a color image (e.g., extract R from an RGB array), strip a known-bad component from a tensor, or split one specific component while leaving the rest intact. For splitting *all* components into separate arrays at once, use [Split Data Array (By Component)](SplitDataArrayByComponentFilter.md) instead. + +### Required Input Sources + +- **Source Multi-Component Array** -- any **Attribute Array** with two or more components. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ExtractFeatureBoundaries2DFilter.md b/src/Plugins/SimplnxCore/docs/ExtractFeatureBoundaries2DFilter.md index dec668a45e..3b8dd4d2dc 100644 --- a/src/Plugins/SimplnxCore/docs/ExtractFeatureBoundaries2DFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExtractFeatureBoundaries2DFilter.md @@ -2,49 +2,56 @@ ## Group (Subgroup) -SimplnxCore (Geometry) +Surface Meshing (Generation) ## Description -This **Filter** extracts 2D feature boundaries from an Image Geometry and creates an Edge Geometry representing the outlines of features defined by a Feature IDs array. The filter operates only in the XY plane and requires the input Image Geometry to have a Z dimension of 1. +This **Filter** extracts the 2D boundaries between **Features** in an **Image Geometry** and builds an **Edge Geometry** that traces the outlines of those features. An **Image Geometry** is a regular grid of rectangular cells (pixels in 2D). A **Feature** is a connected region of cells that share the same identifier, recorded in a **Feature IDs** array (one integer label per cell). An **Edge Geometry** is a node-based geometry made of straight line segments (edges); here each edge lies on the interface between two cells that belong to different features. -**NOTE**: The "FeatureIds" array can be any integer type, not just `signed int32` as is the typical featureIds arrays. This means that it can work immediately on scalar images that have not been segmented already. The user could use a basic threshold to create a unsigned int 8 mask value, then use that mask value as the input into this filter. This could be used, for example, to outline just the sample border if there is overscan or just outline specific regions of a 2D Image Geometry. +The filter operates only in the XY plane and requires the input **Image Geometry** to have a Z dimension of 1 (a single slice). -The algorithm scans the Feature IDs array and identifies boundaries where adjacent cells have different feature IDs. For each boundary, an edge (line segment) is created at the cell interface. The resulting Edge Geometry contains: +**NOTE**: The Feature IDs array can be any integer type, not just the *signed int32* type used by typical feature-id arrays. This means it can operate directly on scalar images that have not been segmented. For example, the user could run a simple threshold to create a *uint8* mask (a boolean per-cell flag stored as 0/1) and feed that mask in as the Feature IDs input. This is useful for outlining just the sample border when there is **overscan** — extra collected area surrounding the actual sample — or for outlining specific regions of a 2D **Image Geometry**. + +The algorithm scans the Feature IDs array and identifies boundaries where adjacent cells have different feature IDs. For each such boundary, an edge (line segment) is created along the shared cell interface. The resulting **Edge Geometry** contains: - **Shared Vertex List**: 3D coordinates of all unique vertices at feature boundaries -- **Shared Edge List**: Connectivity pairs defining line segments between vertices +- **Shared Edge List**: connectivity pairs defining the line segments between those vertices ### Z Value Source The *Z Value Source* parameter provides the following choices: -- **Use min z value from Image geometry [0]**: Uses the origin Z value of the input Image Geometry as the Z coordinate for all generated vertices. -- **Use max z value from Image geometry [1]**: Uses the origin Z plus the spacing times the Z dimension as the Z coordinate for all generated vertices. -- **Use Custom z Offset [2]**: Allows the user to specify an arbitrary Z coordinate value for all generated vertices. +- *Use min z value from Image geometry [0]*: Uses the origin Z value of the input **Image Geometry** as the Z coordinate for all generated vertices. +- *Use max z value from Image geometry [1]*: Uses the origin Z plus the spacing times the Z dimension as the Z coordinate for all generated vertices. +- *Use Custom z Offset [2]*: Lets the user specify an arbitrary Z coordinate value for all generated vertices. ### Algorithm Details The algorithm uses a two-pass approach for efficiency: -1. **Count Pass**: Scan to count the total number of boundary edges (both vertical and horizontal) -2. **Populate Pass**: Creation of vertices and edge connectivity +1. **Count Pass**: Scans to count the total number of boundary edges (both vertical and horizontal). +2. **Populate Pass**: Creates the vertices and edge connectivity. After edge creation, duplicate vertices are eliminated to ensure a clean, connected edge network. ## Example Output -![Images/ExtractFeatureBoundaries2D_1.png](Images/ExtractFeatureBoundaries2D_1.png) +![Example feature boundaries extracted as an Edge Geometry.](Images/ExtractFeatureBoundaries2D_1.png) + +### Required Input Sources + +- **Image Geometry** -- a 2D **Image Geometry** (Z dimension of 1) holding the Feature IDs. +- **Feature IDs** -- a per-cell integer array. It may be a true segmentation produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md), or any per-cell integer/mask array produced by a thresholding filter such as [Multi-Threshold Objects](MultiThresholdObjectsFilter.md). % Auto generated parameter table will be inserted here ## Example Pipelines -- ExtractFeatureBoundaries2D.d3dpipline +- ExtractFeatureBoundaries2D.d3dpipeline ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ExtractInternalSurfacesFromTriangleGeometryFilter.md b/src/Plugins/SimplnxCore/docs/ExtractInternalSurfacesFromTriangleGeometryFilter.md index 90fd3d3b71..edee05406d 100644 --- a/src/Plugins/SimplnxCore/docs/ExtractInternalSurfacesFromTriangleGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExtractInternalSurfacesFromTriangleGeometryFilter.md @@ -6,13 +6,15 @@ Geometry ## Description -This **Filter** extracts any **Triangles** from the supplied **Triangle Geometry** that contain any *internal nodes*, then uses these extracted **Triangles** to create a new **Data Container** with the reduced **Triangle Geometry**. This operation is the same as removing all **Triangles** that only lie of the outer surface of the supplied **Triangle Geometry**. The user must supply a "Node Type" **Vertex Attribute Array** that defines the type for each node of the **Triangle Geometry**. Node types may take the following values: +This **Filter** extracts the **Triangles** from a **Triangle Geometry** that contain *internal nodes*, and uses those extracted **Triangles** to create a new **Triangle Geometry** in a new data group. This is equivalent to removing every **Triangle** that lies only on the outer surface of the supplied **Triangle Geometry**. + +The user must supply a "Node Type" **Vertex Attribute Array** that classifies each node of the **Triangle Geometry**. This node-type array is normally created when the original surface mesh is generated by [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). The node types may take the following values: ### Quick Surface Mesh | Id Value | Node Type | |----------|-----------| -| 2 | Normal **Vertex | +| 2 | Normal **Vertex** | | 3 | Triple Line | | 4 | Quadruple Point | | 12 | Normal **Vertex** on the outer surface | @@ -23,21 +25,28 @@ This **Filter** extracts any **Triangles** from the supplied **Triangle Geometry | Id Value | Node Type | |----------|-----------| -| 0 | Normal **Vertex | +| 0 | Normal **Vertex** | | 3 | Triple Line | | 4-8 | Quadruple Point | | 13 | Normal **Vertex** on the outer surface | | 14 | Triple Line on the outer surface | | 15-18 | Quadruple Point on the outer surface | -This **Filter** has the effect of removing any **Triangles** that only contain **Vertices** whose node Id values fall outside of the min and max that the user sets. In general, this *node type* array is created when the original surface mesh is created. +This **Filter** removes any **Triangle** that contains only **Vertices** whose node Id values fall outside the minimum and maximum that the user sets. It is unknown until runtime how the **Geometry** will be changed by removing certain **Vertices** and **Triangles**. -% Auto generated parameter table will be inserted here +### Required Input Sources + +- **Triangle Geometry** -- the surface mesh to process, typically produced by [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Node Types** -- the per-vertex node classification array, produced by the same surface-meshing filter that created the geometry. -## Example Pipelines +% Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/ExtractPipelineToFileFilter.md b/src/Plugins/SimplnxCore/docs/ExtractPipelineToFileFilter.md index 5c9dce5bb0..ed034916f1 100644 --- a/src/Plugins/SimplnxCore/docs/ExtractPipelineToFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExtractPipelineToFileFilter.md @@ -1,9 +1,19 @@ # Extract DREAM3D-NX Pipeline To File +## Group (Subgroup) + +IO (Output) + ## Description This **Filter** reads the pipeline from an hdf5 file with the .dream3d extension and writes it back out to a json formatted pipeline file with the appropriate extension based on whether the pipeline is a DREAM3D-NX version 6 (.json) or DREAM3D-NX version 7 (.d3dpipeline) formatted pipeline. +A `.dream3d` file *may* contain an embedded copy of the pipeline that produced it, but this is not guaranteed (for example, files written by external tools, or written with pipeline embedding disabled, will not have one). If the selected `.dream3d` file does not contain an embedded pipeline, this **Filter** has nothing to extract and will report an error rather than write an empty file. + +### Required Input Sources + +None -- the input is a `.dream3d` file selected by file path, not a **DataStructure** object created by an upstream filter. + % Auto generated parameter table will be inserted here ## Example Pipelines @@ -12,4 +22,8 @@ ExtractPipelineToFile ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/ExtractVertexGeometryFilter.md b/src/Plugins/SimplnxCore/docs/ExtractVertexGeometryFilter.md index 2e03705bae..a4acf93c72 100644 --- a/src/Plugins/SimplnxCore/docs/ExtractVertexGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/ExtractVertexGeometryFilter.md @@ -6,13 +6,17 @@ Core Filters (Geometry) ## Description -This filter will extract all the voxel centers of an Image Geometry or a RectilinearGrid geometry -into a new Vertex Geometry. The user is given the option to copy or move cell arrays over to the -newly created VertexGeometry. The user can also supply a mask array which has the effect of only +This filter will extract all the voxel centers of an **Image Geometry** or a **Rectilinear Grid Geometry** +into a new **Vertex Geometry**. The user is given the option to copy or move cell arrays over to the +newly created **Vertex Geometry**. The user can also supply a mask array which has the effect of only creating a vertex if the mask value = TRUE. ![Example showing the use of a Mask array to only generate specific points.](Images/ExtractVertexGeometry_1.png) +### Required Input Sources + +- **Image Geometry** or **Rectilinear Grid Geometry** -- the grid whose voxel/cell centers will be extracted as vertices. + ### Array Handling The *Array Handling* parameter controls how the selected cell arrays are transferred to the new **Vertex Geometry**: diff --git a/src/Plugins/SimplnxCore/docs/FeatureFaceCurvatureFilter.md b/src/Plugins/SimplnxCore/docs/FeatureFaceCurvatureFilter.md index dde27f2b8c..b74f8388b6 100644 --- a/src/Plugins/SimplnxCore/docs/FeatureFaceCurvatureFilter.md +++ b/src/Plugins/SimplnxCore/docs/FeatureFaceCurvatureFilter.md @@ -6,28 +6,33 @@ Surface Meshing (Curvature) ## Description -This **Filter** calculates *principal direction vectors* and the *principal curvatures*, and optionally the *mean* and *Gaussian* curvature, for each **Triangle** in a **Triangle Geometry** using the technique in [1]. The groups of **Triangles** over which to compute the curvatures is determines by the **Features** they are associated, denoted by their **Face Labels**. The curvature information will be stored in a **Face Attribute Matrix**. +This filter calculates *principal direction vectors* and the *principal curvatures*, and optionally the *mean* and *Gaussian* curvature, for each **Triangle** in a **Triangle Geometry** (a surface mesh built from triangles) using the technique in [1]. The groups of **Triangles** over which to compute the curvatures are determined by the **Features** they belong to, as denoted by their **Face Labels** (the pair of **Feature** Ids on either side of each triangle). The curvature information is stored in a **Face Attribute Matrix**. -Principal Curvatures 1 and 2 are the κ 1 and κ 2 from [1] and are the eigenvalues from the Wiengarten matrix. The Principal Directions 1 and 2 are the eigenvectors from the solution to the least squares fit algorithm. The Mean Curvature is (κ 1 + κ 2 ) / 2, while the Gaussian curvature is (κ 1 * -κ 2 ). +**Curvature** measures how sharply the surface bends at a point: a flat region has zero curvature, while a tightly rounded region has high curvature. The *principal curvatures* are the maximum and minimum bending values at a point, and the *principal directions* are the (unit) directions along the surface in which those extreme bends occur. -The values of the principal directions can have their signs flipped. They are calculated using eigenvectors which are unique up to a sign. +Principal Curvatures 1 and 2 are the κ1 and κ2 from [1] and are the eigenvalues of the Weingarten matrix. The Principal Directions 1 and 2 are the eigenvectors from the solution to the least-squares fit. The Mean Curvature is (κ1 + κ2) / 2, while the Gaussian curvature is (κ1 * κ2). + +The principal directions can have their signs flipped: they come from eigenvectors, which are unique only up to a sign. *Note*: Computing the Weingarten matrix values is an experimental feature, and there is no guarantee at this time that the values are correct. +### Units + +Principal curvatures and mean curvature are reported in **1/length** (the reciprocal of the geometry length units; the radius of the best-fit circle is its reciprocal). Gaussian curvature, being a product of two curvatures, is reported in **1/length^2**. Principal directions are **dimensionless** unit 3-vectors. + ![Curvature Coloring](Images/FeatureFaceCurvatureFilter_3.png) -@image latex FeatureFaceCurvatureFilter.png "Curvature Coloring of a Feature" width = 6in ## Ring Neighbor Schematic ![Ring Neighbor Schematic](Images/FeatureFaceCurvatureFilter_1.png) -## Parameter Notes: - -- The "Feature Face Ids" input data can be computed from the "Compute Triangle Face Ids" filter -- The "Face Normals" input data can be computed from the "Compute Triangle Normals" filter -- The "Face Centroids" input data can be computed from the "Compute Triangle Centroids" filter +### Required Input Sources +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** -- the per-triangle pair of **Feature** Ids, produced alongside the mesh by the surface-meshing filter above. +- **Feature Face Ids** -- computed by [Compute Triangle Face Ids](SharedFeatureFaceFilter.md). +- **Face Normals** -- computed by [Compute Triangle Normals](TriangleNormalFilter.md). +- **Face Centroids** -- computed by [Compute Triangle Centroids](TriangleCentroidFilter.md). % Auto generated parameter table will be inserted here @@ -37,13 +42,13 @@ The values of the principal directions can have their signs flipped. They are ca ## Example Pipelines -- Pipelines -> SimplnxCore -> Compute_Feature_Face_Curvature -- Pipelines -> SimplnxCore -> Compute_Feature_Face_Curvature_2 +- Compute_Feature_Face_Curvature +- Compute_Feature_Face_Curvature_2 ## License & Copyright -Please see the description file distributed with this**Plugin** +Please see the description file distributed with this **Plugin** -## DREAM3D-NX Mailing Lists +## DREAM3D-NX Help -If you need more help with a**Filter**, please consider asking your question on the [DREAM3D-NX Users Google group!](https://groups.google.com/forum/?hl=en#!forum/dream3d-users) +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/FillBadDataFilter.md b/src/Plugins/SimplnxCore/docs/FillBadDataFilter.md index ac1f800efc..2eb2d2cb2a 100644 --- a/src/Plugins/SimplnxCore/docs/FillBadDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/FillBadDataFilter.md @@ -6,45 +6,47 @@ Processing (Cleanup) ## Description -This **Filter** removes small *noise* in the data but keeps larger regions that are possibly **Features**, e.g., pores or defects. This **Filter** identifies *bad* **Cells** (*Feature Id = 0*) and fills small defects by copying data from neighboring good cells, while preserving large defect regions that meet or exceed the minimum allowed defect size specified by the user. +This **Filter** distinguishes small *bad-data noise* from large *real defects* in a segmented dataset and fills only the noise. **Cells** with *Feature Id = 0* are considered *bad*; the filter groups them into connected components, classifies each component by its size, and fills components below the user threshold by copying the most common neighbor's data into them. Components at or above the threshold are left intact, since they likely represent real features (pores, cracks, voids). | Small IN100 Before | Small IN100 After | |--------------------------------------|-------------------------------------| | ![](Images/fill_bad_data_before.png) | ![](Images/fill_bad_data_after.png) | -The above images show the before and after results of running this filter with a minimum defect size of 1000 voxels. Note that because the minimum defect size was set to 1000 voxels that the over scan area was not modified (the area in all black around the sample). +The above images show the before and after results of running this filter with a minimum defect size of 1000 voxels. The all-black overscan area around the sample exceeds the 1000-voxel threshold, so it is correctly preserved. -## Algorithm Overview +### How This Filter Works -The filter uses a four-phase algorithm optimized for both in-memory and out-of-core data processing: +1. **Connected components.** All bad cells (*Feature Id = 0*) are grouped into connected regions using face neighbors. +2. **Classify by size.** + - Components with fewer than *Minimum Allowed Defect Size* cells are flagged as *small noise* and filled. + - Components with at least *Minimum Allowed Defect Size* cells are kept as bad data, or optionally moved to a new phase if *Store Defects as New Phase* is enabled. +3. **Iterative fill.** Each cell flagged for filling examines its 6 face neighbors and copies all cell-level array data from whichever neighbor's *Feature Id* is most common. The pass repeats until every flagged cell has been filled. -### Phase 1: Connected Component Labeling (CCL) -The algorithm first identifies all connected regions of bad data (voxels with Feature Id = 0) using a chunk-sequential scanline algorithm. Each connected component is assigned a unique provisional label, and equivalences between components that span chunk boundaries are tracked using a Union-Find data structure. +### Minimum Defect Size Units -### Phase 2: Global Resolution -All provisional labels are resolved to their root representatives, and the total size (voxel count) of each connected component is computed by aggregating counts across all chunks. +The *Minimum Allowed Defect Size* is in **cells** (integer voxel count), not physical units. To convert a physical-volume threshold into a cell count, divide by the cell volume (dx * dy * dz). -### Phase 3: Classification and Relabeling -Each connected component is classified based on its size: -- **Small defects** (size < minimum allowed defect size): Marked with Feature Id = -1 for filling -- **Large defects** (size ≥ minimum allowed defect size): Retained as Feature Id = 0 (or assigned to a new phase if requested) +Choose the threshold based on what you want to keep: -### Phase 4: Iterative Morphological Fill -Small defects are filled using an iterative erosion process: -1. For each voxel marked for filling (Feature Id = -1), examine its 6 face-connected neighbors -2. Determine the most common positive Feature Id among the neighbors -3. Copy all cell array data from that neighbor to the current voxel -4. Repeat until all small defects are filled +- For removing single-cell or small-cluster EBSD scan noise, **5-50 cells** is typical. +- For preserving real pores while cleaning small noise (as in the example above), thresholds of **500-5000 cells** depend on pore size. -The algorithm processes data in a chunk-sequential manner, making it efficient for large datasets stored using out-of-core data structures. +### Store Defects as New Phase -## Performance Characteristics +When this option is enabled, any connected component that meets or exceeds the size threshold has its cells reassigned to a new phase index rather than being left as Feature Id 0. This makes large defects available to downstream filters as a distinct phase (e.g., for separate statistics or visualization). -This implementation is optimized for out-of-core processing where data may reside on disk rather than in memory. The chunk-sequential access pattern minimizes disk I/O operations compared to random-access algorithms, providing significant performance improvements for large datasets (10-100x faster for typical use cases with out-of-core storage). +### Performance Note + +The implementation is chunk-sequential and optimized for out-of-core data. For large datasets stored on disk, expect 10-100x speedups over random-access algorithms. ## WARNING: Feature Data Will Become Invalid -By modifying the cell level data, any feature data that was previously computed will most likely be invalid at this point. Filters that compute feature level data should be rerun to ensure accurate final results from your pipeline. +By modifying cell-level data, any feature-level data that was previously computed (sizes, centroids, average orientations, etc.) will most likely be invalid after this filter runs. Re-run any downstream feature-level computation filters to ensure accurate results. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). Cells with Feature Id = 0 are treated as bad. +- **Cell Phases** -- typically read from EBSD data; only required when *Store Defects as New Phase* is enabled. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/FlyingEdges3DFilter.md b/src/Plugins/SimplnxCore/docs/FlyingEdges3DFilter.md index 2afbb9becc..540f4a38e9 100644 --- a/src/Plugins/SimplnxCore/docs/FlyingEdges3DFilter.md +++ b/src/Plugins/SimplnxCore/docs/FlyingEdges3DFilter.md @@ -6,11 +6,29 @@ Visual Analysis ## Description -This filter will draw a 3 dimensional contouring surface through an Image Geometry based on an input value. +This filter generates a 3D **isosurface** (a contour surface) through the scalar values stored on an **Image Geometry**, and saves it as a **Triangle Geometry**. -Here's what the results look like: +### What is an Isosurface? -![3D-Contouring](Images/FlyingEdges3D_1.png) +An **isosurface** is the 3D equivalent of a contour line on a topographic map. Given a scalar value at every **Cell** of a volume (for example density from a CT scan, or a distance field), the isosurface is the connected surface that passes through every point where the scalar equals a chosen threshold — the *Contour Value* (also called the isovalue). Cells with values above the threshold fall on one side of the surface; cells below fall on the other. + +"Flying Edges" is a fast, parallel variant of the classic marching-cubes algorithm. It produces the same triangulated surface but scans the volume more efficiently. + +### When to Use This Filter + +Use this filter to extract a smooth surface from continuous scalar data (CT density, a level-set/distance field, simulation output). If the goal is instead to build a surface mesh around labeled regions (**Feature** Ids from a segmentation), use [Surface Nets](SurfaceNetsFilter.md) or [Quick Surface Mesh](QuickSurfaceMeshFilter.md), which contour an integer label map rather than a continuous field. + +### Parameter Guidance + +- **Contour Value** — the scalar threshold the surface is drawn at. Its units are the same as the selected **Data Array** (for CT data, density units; for a distance field, length units). The surface only appears where the data actually crosses this value, so the value must lie within the array's range. +- **Data Array to Contour** — the per-Cell scalar field the contour is computed from. + +### Required Input Sources + +- **Image Geometry** -- the volume to contour, typically from an image/volume reader such as [Read Image](ReadImageFilter.md) or an upstream processing filter. +- **Data Array to Contour** -- any single-component scalar **Cell Data** array on that geometry. + +![A 3D contour surface extracted from an Image Geometry at the chosen Contour Value.](Images/FlyingEdges3D_1.png) % Auto generated parameter table will be inserted here @@ -18,6 +36,6 @@ Here's what the results look like: Please see the description file distributed with this **Plugin** -## DREAM3D-NX Interaction +## DREAM3D-NX Help -If you need more help with a **Filter**, please consider asking your question on the [DREAM3D-NX Help Forum!](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/HierarchicalSmoothFilter.md b/src/Plugins/SimplnxCore/docs/HierarchicalSmoothFilter.md index a0538686fc..64aa6d22e5 100644 --- a/src/Plugins/SimplnxCore/docs/HierarchicalSmoothFilter.md +++ b/src/Plugins/SimplnxCore/docs/HierarchicalSmoothFilter.md @@ -97,15 +97,7 @@ This safety mechanism prevents the smoothing from producing mesh artifacts in re ![](Images/HierarchicalSmooth_error_threshold.png) -## Parameters - -| Name | Type | Description | Default | -|------|------|-------------|---------| -| Max Bisection Iterations | Int32 | Maximum number of bisection iterations for smoothing parameter optimization (see above) | 53 | -| Error Threshold | Float64 | Displacement rejection threshold as a multiple of the reference edge length (see above) | 2.0 | -| Triangle Geometry | Geometry Selection | The triangle geometry to smooth | - | -| Node Type | Array Selection (Int8, 1-comp) | Array specifying node type (2=interior, 3=triple, 4=quad; +10 for surface) | - | -| Face Labels | Array Selection (Int32, 2-comp) | Array specifying grain IDs on either side of each face | - | +In addition to the two numeric parameters described above, the filter requires the **Triangle Geometry** to smooth, a per-vertex **Node Type** array (Int8, single-component: 2 = interior, 3 = triple line, 4 = quad point; add 10 for the outer-surface variants), and a per-face **Face Labels** array (Int32, 2-component) giving the grain IDs on either side of each face. These three inputs are normally produced together by a surface-meshing filter. Unlike simple [Laplacian Smoothing](LaplacianSmoothingFilter.md), this filter uses the **Node Type** and **Face Labels** information to respect the topological hierarchy of the boundary network. ## Notes @@ -115,6 +107,10 @@ This safety mechanism prevents the smoothing from producing mesh artifacts in re - The conjugate gradient solver handles its own internal convergence; the max iterations parameter controls only the bisection search for the optimal smoothing parameter, not the CG solver iterations. - If the filter reports rejected nodes, consider increasing the Error Threshold or inspecting the input mesh for degenerate triangles near the rejected vertices. +## Required Input Sources + +- **Triangle Geometry**, **Node Type**, and **Face Labels** -- a polycrystalline surface mesh and its node-type and face-label arrays, produced together by a surface-meshing filter such as [Quick Surface Mesh](QuickSurfaceMeshFilter.md). + % Auto generated parameter table will be inserted here ## Reference @@ -122,12 +118,10 @@ This safety mechanism prevents the smoothing from producing mesh artifacts in re - S. Maddali, "HierarchicalSmooth" - Topology-aware smoothing for polycrystalline grain boundary networks. Carnegie Mellon University, 2016-2018. - S. Maddali, S. Ta'asan, R. M. Suter, Topology-faithful nonparametric estimation and tracking of bulk interface networks, Computational Materials Science 125, 328-340 (2016). -## Example Pipelines - ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** -## DREAM3D Mailing Lists +## DREAM3D-NX Help If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/IdentifyDuplicateVerticesFilter.md b/src/Plugins/SimplnxCore/docs/IdentifyDuplicateVerticesFilter.md index c93944fc51..52eeb1d9c7 100644 --- a/src/Plugins/SimplnxCore/docs/IdentifyDuplicateVerticesFilter.md +++ b/src/Plugins/SimplnxCore/docs/IdentifyDuplicateVerticesFilter.md @@ -6,7 +6,9 @@ Meshing (Cleanup) ## Description -This filter takes a geometry with a **SharedVertexList** and produces a `uint8` mask that contains `1` in positions where a duplicate of an existing vertex exists. It should be noted that this filter utilizes quicksort to speed up checks, quick sort is not a stable sort meaning the vertex point deemed "unique" (ie not labeled as a duplicate) is not guaranteed to be the first instance of the vertex point. See example section below for a visual explanation. The intention is for this filters output to be used as the input for *RemoveFlaggedVertices*. +This filter takes a geometry with a **SharedVertexList** and produces a `uint8` mask that contains `1` at the position of each vertex that duplicates an earlier vertex, and `0` otherwise. Two vertices are considered **duplicates** when their X, Y, and Z coordinates are all equal (the comparison treats coordinate differences smaller than machine epsilon as equal, so this is effectively exact coordinate equality); no user-supplied tolerance is applied. + +It should be noted that this filter utilizes quicksort to speed up checks. Quicksort is not a stable sort, meaning the vertex deemed "unique" (i.e., not labeled as a duplicate) is not guaranteed to be the first instance of that coordinate in the original list. See the example below, which uses small text arrays to illustrate this behavior. The intention is for this filter's output to be used as the input for [Remove Flagged Vertices](RemoveFlaggedVerticesFilter.md). ## Example diff --git a/src/Plugins/SimplnxCore/docs/IdentifySampleFilter.md b/src/Plugins/SimplnxCore/docs/IdentifySampleFilter.md index 333175f841..dfa14deb64 100644 --- a/src/Plugins/SimplnxCore/docs/IdentifySampleFilter.md +++ b/src/Plugins/SimplnxCore/docs/IdentifySampleFilter.md @@ -6,21 +6,21 @@ Processing (Cleanup) ## Description -Often when performing a serial sectioning experiment (especially in the FIB-SEM), the sample is *over scanned* resulting -in a border of *bad* data around the sample. This **Filter** attempts to *identify* the sample within the over scanned -volume. The **Filter** makes the assumption that there is only one contiguous set of **Cells** that belong to the sample. -The **Filter** requires that the user has already *thresheld* the data to determine which **Cells** are *good* and which -are *bad*. The algorithm for the identification of the sample is then as follows: +Serial-sectioning experiments -- especially FIB-SEM -- typically *over-scan* the sample area, producing a border of *bad* data around the actual sample. This **Filter** identifies the sample within that over-scanned volume by finding the single largest contiguous region of *good* cells. -1. Search for the largest contiguous set of *good* **Cells**. (This is assumed to be the sample) -2. Change all other *good* **Cells** to be *bad* **Cells**. (This removes the "speckling" of what was *threshold* as *good* data in the outer border region) +The filter assumes that the sample is one connected set of cells, and it requires that the user has already produced a boolean mask marking which cells are *good* and which are *bad* -- typically via [Multi-Threshold Objects](MultiThresholdObjectsFilter.md) applied to a confidence or quality array. -If *Fill Holes* is set to *true* additional steps are taken: +The algorithm is: -1. Search for the largest contiguous set of *bad* **Cells**. (This is assumed to be the outer border region) -2. Change all other *bad* **Cells** to be *good* **Cells**. (This removes the "speckling" of what was *threshold* as *bad* data inside the sample). +1. Search for the largest contiguous set of *good* cells. This is assumed to be the sample. +2. Change all other *good* cells to *bad*. (This removes the "speckling" of *good* cells in the outer border region.) -*Note:* if there are in fact "holes" in the sample, then this **Filter** will "close" them (if *Fill Holes* is set to true) by calling all the **Cells** "inside" the sample *good*. If the user wants to reidentify those holes, then reuse the threshold **Filter** with the criteria of *GoodVoxels = 1* and whatever original criteria identified the "holes" as this will limit applying those original criteria to within the sample and not the outer border region. +If *Fill Holes* is enabled, two additional steps are run: + +1. Search for the largest contiguous set of *bad* cells. This is assumed to be the outer border region. +2. Change all other *bad* cells to *good*. (This removes the "speckling" of *bad* cells inside the sample.) + +*Note:* If the sample contains real holes, enabling *Fill Holes* will close them by calling all cells "inside" the sample *good*. To reidentify those holes afterward, re-run the threshold filter with the criteria *GoodVoxels = 1* AND whatever original criterion identified the holes. This limits the original hole-finding criteria to within the sample and not the outer border region. ## Slice-By-Slice Option @@ -46,6 +46,10 @@ When *Process Data Slice-By-Slice* is enabled, the *Slice-By-Slice Plane* parame - **XZ [1]**: Processes the volume slice by slice along the Y axis, scanning each XZ plane independently. - **YZ [2]**: Processes the volume slice by slice along the X axis, scanning each YZ plane independently. +### Required Input Sources + +- **Good Voxels Mask** -- a boolean array marking cells as *good* or *bad*, typically produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md) applied to EBSD confidence index, image quality, or a similar scalar. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.png b/src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.png new file mode 100644 index 0000000000000000000000000000000000000000..e6b436d53ddf26e399e9b16308bf37123ba37e8a GIT binary patch literal 164940 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

Yew;2kn=JGIb{?p%Uhsdox@8Z>9D} zIJJsA>NB>9S_yRI_IjzPueUdRGta2Vp?+S)e|@8ry5>7yxxeeX)lgLAI{j~t_xMPr z$D*(w@5hp{R_NMB{n8wBo!+@5^JLKXz<(`^K0|0T7 z!7;h*F|fZlm-!a{w0G$OgR>i%mKi2QW4#)OJM;iIx036Jm=!#wjgXWOONkqb;?ThS$1@71xH(siWc=2DUyy3>T7C-s~h^7 zE1c$x^$nm{WytS&;T{2GtC(&bT6pHFCX*PJ*?|dI&l+>u;)Gl5>`=KjgwlV0D1dj- z=#<_6*NfY!NeOO_kaF(5dJq3{&yDq zUz-K#C`~>$4|two#QRrI%-9 zWVrwH_aB=OxgG>Nl|tS+{2{%u2KL$exBdE$l)($qf`TJG1x2E^^iq!qG@S_LWL)!| zF+ws)8gyUyo{GpR{34cw_{adV}Ryh6&D&;{lKr)$h$^X77_fZiv8Be;( zwAAAzcQ<-@toix({lcSpMl{RB+;?!&pYQ&BXQ|z1e5t1pKKxwmyJCl@30k~wy^A04 z?NgI`(glXnzE}@sn*fOpKOA?UH#FaG74zjHceXG$sVaLg?4dM`d-q0o+9J{_Dx{QS z@|8e&`0;MwlY2Frr{}T@vn!-fn&H<3?eq5VzKytF4qh|!I;i|M#4{4bgY&p)*78Q% zmox??1%A#vzn${#a+|I>B{WFxWxT$=Qohti!`Xyg4!&{9Gho_$`S=gMClgne%gnz- z(Ya|Lj)#kj&lLg>)Ng-SA5i=vJX{?k0_*sEF}l4y-@7{FY3a8&C46i1^Rn7sr9AH~ zv5n!@`8k*zYxGNUrbLlYmrSI+dxx>(q_Hzc4{oPC5Ha0-CQRU*_T(36EBJa;voDo= zzaQ=s{3wYZ6f`SVJ61m442! zt?cbRRR2)q$A>v;*w_;apLSIC4>;l|>v^|PEf|c;x7d|4ZsWlx_E4Mc?G+1Ak&zRT zW{+_9E?=gz4~IS^C3Exd0#`YH>>^ZwQN|PeC>GCgbSJha=oQHv$C|fwJJ;OH1 z+mfSK`08-ayIfqUB@jIj ztQAClK~$~5sNqHhvpUC@rN>(}Y1M}#dRtvrc}&z?oE2vPseI-m#<#xNjEss(FD~XW zPd68y`#Im%Q}UQPGIFZZ z0X3y{`9-xHYM?ES-XQ}NbdgaCH;C}tN_%a}h5pP!qp4YNJRPSxCDLC--BY`pcl+_P F{|8So$Y}ro literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.svg b/src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.svg new file mode 100644 index 0000000000..76ecb0ab91 --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/ApplyTransformationToGeometry_AxisAngle.svg @@ -0,0 +1,59 @@ + + + + + + + + + + Rotation by axis and angle + Apply Transformation to Geometry — the "Rotation" transform type + + + + + + + n = (x, y, z) + rotation axis + + + + before + + + after + + + θ + + + + + + Rotation parameter + rotation = [ x, y, z, θ° ] + unit axis (x, y, z) + angle θ in degrees + + + + + + + i + A true geometric transform — the geometry + actually moves (image geometries are re-gridded + and interpolated). To rotate the coordinate frame + instead, use Rotate Sample Reference Frame. + + + + + + + Transformation Type also offers Translation, + Scale, a manual 4×4 matrix, or a precomputed + transformation matrix. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.png b/src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.png new file mode 100644 index 0000000000000000000000000000000000000000..c9687af8b08508a6fe9f6e2f9ca6a4af149b0b25 GIT binary patch literal 144338 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 z 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 AJpcdz literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.svg b/src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.svg new file mode 100644 index 0000000000..5429026176 --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/ComputeFeatureSizes_EquivalentDiameter.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + Equivalent Sphere Diameter + The diameter of the sphere with the same volume as the feature + + + + + + + + + Feature (grain) + V = (# cells) × (voxel volume) + + + + equal volume + + + + + d + Equivalent sphere + + + + + d = 2 · ( 3V / 4π )1/3 + + + + + + + If the image is 2D (one dimension = 1), an Equivalent Circular Diameter is computed instead, + from the feature area: d = 2 · √( A / π ). + Outputs: EquivalentDiameters, Volumes, NumElements (per feature). + + diff --git a/src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.png b/src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.png new file mode 100644 index 0000000000000000000000000000000000000000..689c90abe84604df60ac3491552b9ce4ad11e599 GIT binary patch literal 148312 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�qlaT=l0^kKA1CTVe;j@8eYM)(0$KT)NVG3Uz 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%0D-X7rKOj4TB0!Wo} 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.svg b/src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.svg new file mode 100644 index 0000000000..a3f170a6ee --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/CreateGeometry_GeometryTypes.svg @@ -0,0 +1,103 @@ + + + The eight geometry types + Create Geometry builds each type from the data that defines it + + + + + + + + + + Image + origin + spacing + dimensions + + + + + + + + + + + Rectilinear Grid + X / Y / Z bounds arrays + + + + + + + + + + + Vertex + vertex list (points) + + + + + + + + + + Edge + vertices + edges (2 nodes) + + + + + + + + Triangle + vertices + triangles (3 nodes) + + + + + + + + Quadrilateral + vertices + quads (4 nodes) + + + + + + + + + + + + Tetrahedral + vertices + tets (4 nodes) + + + + + + + + + + + + + + + + + + + Hexahedral + vertices + hexes (8 nodes) + + diff --git a/src/Plugins/SimplnxCore/docs/Images/CreateImageGeometry_OriginSpacingDimensions.png b/src/Plugins/SimplnxCore/docs/Images/CreateImageGeometry_OriginSpacingDimensions.png new file mode 100644 index 0000000000000000000000000000000000000000..00e09704efe72c2d1c738ed085f8f47ef4e7f68a GIT binary patch literal 149507 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

Qo6S-GF{`8)F; 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 ~`?SlxcA><_m25$s2TXi_ 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 + + + + + + + Image Geometry: origin, spacing, dimensions + A regular grid fully defined by three 3-vectors + + + + + + + + + + + + dimensions X = 5 cells + + + + dimensions Y = 4 cells + + + + spacing X + + + + spacing Y + + + + + x + y + + origin + (bottom-left grid point) + + + + + + i + Dimensions — number of cells per axis (uint64, 0-based: a value of 5 spans indices 0–4). + Spacing — physical distance between grid planes per axis (float32, e.g. microns); must be positive. + Origin — physical location of the bottom-left grid point (float32). + Image geometries are always 3D; a 2D image sets one dimension to 1. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/DataModel_CellFeatureEnsemble.png b/src/Plugins/SimplnxCore/docs/Images/DataModel_CellFeatureEnsemble.png new file mode 100644 index 0000000000000000000000000000000000000000..5b86ff9ad3d3661e94eae103cfe2dd27130fa1c5 GIT binary patch literal 97329 zcmbrlbySsIzb?EG1Eds`kdl&;?iT4*x_i;R=vGM)knT`Y5fjG$dEfJ%@$2jQ1;3M*zT=i9pTFCEXpMO78N?M(&nIJjUcgf{*!KdBFtMP)CE8uGUsIFkV*y^1tTg z1^>VMnTh=6UynFi3XrSIy?ZHQ>i~Vp!N|eLOfLBNCBK8Q39q84_&+a$zXZt593Aa= znV4K$To_&07;PO)nOJyuc$k=3nOIpFz!MBGHycL-R|Xpx#oZKt&mjth89A8SIhxzr zyu6#!z|hvoQGlErjKBP6a;U5Mzh}3B{j+^=5KMO?Oe~DdO#k_DM{|?^&Et0?|Lt)* zGh0Vnn3=8Je{A5teBwWb|J#e;`2OctTn+60r-$X_{?CtFTmP4Bz#PS#!9o0UsQ+b6 z|M~z-+072hqzHxCIyo3Y#hjrwjud~L#ND~@zB6})TB(bgTSIMN;B*DZx!IZjmr;%X zG|JBPpGHM&t!y2XfLK8V$XWh+>F(@!rK}B1p=##Fj%NR!?cW2kP#e>`k$=tf*T~)K zteozySH;F0?1%N=v#I}kOn{t=mFYiyNaKGT`j5Nd{cC-4w#Hz2Y=2Go?;$A>k#`QZ zCgxUP45ldY_NA1V2qy~((M zv@-uo#$Uet>!x`PjP4FefZWc(*4W7iYW&x>z;u6)!fZ_(T?`zc!lvMo1;~X>Ow7S? zy1fMIV{U2#b$H48l9iE@k>kI<+1U(4fX`fnTH|LcMOq^jV( zzkdTJ0N4_y|1c)tkN+@7P#a)_9DuPQnZxP=2JM46xSIcVB@hTrgi}Nxz3BUA?LurK z6yh1`>guxSd1OMYMeoI5SPZg@6IhwdUMU_eoy^K6TE*mlZ)t-+@Ilgo=0A&wEPEY{ z;oi%pM3LZ8bLP2wmI~uN(=H5PlU9Xq1zHuP`(Fu;c^WrCecHm5Oz@iDi>bALYJzaI zUozkh>7FH4SzKQ8B`%`sAjy2%kN?fa_oHJ#tRjK@I@unoefDAPaFm1C>GYoOXm zYQP{6G@QGCNRY&2dw%S8e!wYoXvDlAWDnmOG!JIvvM;nX|!jP ziY~XCyC0uve%7*gL2J54M)u_6t0#-Q^%FCD;c^cLDWA|pm)G|32vB!VSHaeHw~y;# zP?h1AY+REc3UIH8v8PiA%(nUHkamv4@hFThB-SZrV;NqIN zRB``38H)XxdVCUc`olu@IEd6gbL{=xW>-v#$F~gq@@3b-9$d@az~U|oC+qK)7WF(% z4wi^@$$uX1W4pV-u1)lRCNwzLp*)#k{O6^&S4xt;l>hwkobnC!-%kZS#(s%IIeDRjuXpsY^(xjPdl4 z?JTp-et>^`{Paz`fvgoj1k<^Ed}^d-=i(OU`7_)Bm*Hr_Y!B$B(HBCFV_TYmloEp} z-TFj9JYP8(lf`9yHOomOYI3)m9VSTp^~|GE3@djDM09duZ*IHZ!}$|aY8Ll%-z44} z2W@iR6ihxXLZThZhE$)Z;bU2GSHgtL^suK26!3(x^ z1*6tJTq(K=!Uh96JY4DQh}5)06ea2}b(SmVH7ee_V;Qtew}jFTrsjyQn9D8kx@)2FsOdakhexoVD)D24LcPTO2;Lx>C$nlqyI+0V%pT0G9%Oy#`uTzMlcnhfMDjhC}pb5@Ob}*V;61z=ps+-PSAHz zfLK&YB!`DVdscNI>?dc?Q7%%NX2g{ze^Ghqd}w%s1bnOnI_CXKi1jgZEr(8-IW<|k zLS$sD@RInf<@=pUeKU?`48|wb*>V-Qs-3JvS~g%-lLRd>=ah+D2S%GMkBUl}*ZSCBV1%eyFRHsz zW@o>0v>A&WXnyovRqqxCG}LOmJ`R~|L7IoJ48!=`SC{Jw{lr~>(B;1UOUf_FwVu4? zsK)wmMviO-Mp}c3#Qfx{CnDk|oIp3tNBDhhz(K3^1yr^em+uO`Nf1YF4DMj-)~$>T z#+nKDuW~C}BIG*Eb_&UBA6o^2Wi?%o<(or7DAT|2?qfJnI|30YTvs!g0pla@(=`S* zK|4$)-F!)0Hia42lD>=Xf+#%5@VZ<;yVCK&@%-LaD-g!@(IUAr-icaEp-U`MYHFr5 z%zQ28Oue47`LdI^_+)8{y#PluoQ~^H?sMgP;ZGLlr0%TJ(}f7r7=t(A0c5=?#xgW43G1d{LOvN@^B=RYB9b0{}Z}U~(t1EYRNHIl3#(v903+L}DF4NjS zIxs%yW(p1tHC?S;LEL04L=a(w8xM+L*&Pf%kA+V?Y&>TXKx>d!R&R#`-EsR3A$)|;wfD=jn%-fgLr%=yuk|EJII@1KH zct$xR>8bcwM%DJ=OGcK2c?ttWeSXa+bHefHiy=Xgd{rf|yviT8b{C0c-`}rgXp}pn z-PG&8PC0pwySi#trkU!qhK5Okp*ENzh}Q#l91JAWMb8_%OtWW&J{VDDw1my$y6qR~ z-F)g*%X-3M(yb$Io-f5!4zm#_pr=o+Nv&6?_ zH-x}9E|S>q)Ml*8UH#lq%NqeIT7oF2%HyJM8i-#&ULX9%k>q^;sUvsv1D{_xav_jE zr|ZXYUCtZQ_kL_7aLMAOMc>1J)t>k6;2^1Qgy+pv-7QLyz0^o~132K?7u6+>JtkD# zF9bXxI((%jM+Mj0e6C+w>A428#URM;PGsxvavD?hDw*(V3_ z%Oo{scVBG^qNEtt}$zsj~NjnmjiW5 zT0n~%Q<2GD>y-G9GTbYe^1vaClRV@Q*0rW1Y}Imkl%d#!w>K&vso7wSRr4`ic}jO~ zA|eJ>4=)!u7JX*haDM+qXnI@On1~Z$YCcu05wp~%TiH_i zUZkk3$OOnMWlnYp+dA`QI8lzv7$(PPUt&*9^!$4Lhq{fKd}O{)n0KF4wVjmOT9tFv zmz;YMF5pbAh#FQaAb`(NDulIY5^nyqsHXUERNC6Mn{X)X&3#5T# zv@>AGBWB(V*q7t2fnb3qGOHPwuankUf3X`*+w}51ythHOn1A_hO3EA>A3naxv5olW zTNTLt z4Uu29S1??&Ku~gDzx82rSve~De8y+X9dOLo;&NobUd!=)!tc*RGcn2LKUg;-+Sze+ z?6!k^mXX#dvwsA!52ig{pT=Bc+=+&{avi6yaopBF2OC?h3D;F~e@52@Zr4cAZOg5Z zx$o!gICTf27dq6NzQw7jW;5NisFGy!6J5*s!BD+Z2rn0rOc#4}?277?jfsV((Vw-P zFGg4E29U}Tm(`Q-dgPaaEdJRy_0mstbPK4!|HWr9+zx^zVlHF_Q%M>}F3W#3Fs0RB z-=mB9>@C3i)cy~VIe~`NG>J09n?F}6cpFn0I3U;+#*(7~VZkF0t@`VIj$sRqo6uU< z)ldb9q_k9yb=Oa*&q+eC^u(i+jW!T#a-uIx*2703KMvWfraO}Q=Ddoed6b6OCMqd% zMddn$5wr}Xe-BS05!dVanZBqQ6_Hu;%U&>NY8 zf&v6eZi_KkV2yH*(3#BX@Fe0dPCP)w_8?tit^7;!ab)Cb$ZcHzK13xEgZ3`yN!8?(S~L$T#^xm|`{gloBcO$rl{r7TUw8ohllc^9}$RS?x^KQ zcnHW5UIIIJk`{&16#xXl$)XUaRBH3UL%OU0n=hK z++Pj1Q=cNoSY0*Y$hLiIS7thtUteNA0ic2e%f%%RP5R?LUNVqHu?A>lM};o0+R-{R`s>u znu24Svp@0=E7HQLZBA0acJf$%?P$8!>7u@Na5&o1?v;+YaCfhyZF<`1tE-duK(em7 zyuBd;uSp{8XwXCNDU7F}SGZ?~yFRkUa)dWbMmGCfV4i~>pLWSJ?-dK!KpY&RZ>tvm zDzt!cd!VC+EbP?T*ktVqG2x?h&s`FmlbCrF^yWY~##eMF+jTicn%6%S&$6(o64dhA?xowhhb{v~_M) zD3=H9x^g%+7*rz`yeR@tmom6E1#2o69tn**CF> z`IY;e`uq!8$7Apn^$G4Z!74r=AV@KNjXmJMZw8h@P*H4trUg#&9*ge{-o%*RCC>v zxcKfnA7R@00=Mr9yW)>LqApSIoqCqdFdYXt8;)Lv_j+s!xreqVaUyd3H;t4KF@6^kZ>6E!Ar@pD?fmoTN*8tItKx!Om{ef^M+}d=)_ufQTnmZTe zNo#=Pg@1X`2133~M{A#xbLlZ}J^EYD>Za>xJ$?1msn*VKhy%Kq$9U9_SW93XOf>f` z;88+zYAY+6V7D<>@O+Oq7uVDpqgp{8aUi3frnr~%hu()tqb%44q&eoUJCi00fah)tF7FoNDAC6bG&F6}5S)G(Wt-qDBjGH75vH{;<#x~Tfw?KK`5njteg zdk5pz zRkdp~uaY~AcpLGNXRc~$t?$k$8 zx^4rqVWK=*WQxr7ovGcPZ1pjZ+Xce#3D`z*2&h)(ggy{s{X@K{YNRWqUd-(?hypfdG`6E_Cg4A0@ zx>hQxZ6VKOcy`Z&#_nOiCa>ymia*RI$C+n+hQeMJ7h}MrSc@Iv_pkWABpg0&=)PUD ztqTAyW9}5FoNY!Dht2)Q>=a>R6T(?hQeBcwcA&ZgN#jrzlJ(e#!CS5gdYRnr66A)wQ8tX>u89taL zyGKKF?W!QhbnUc)h^Uo1tB`HoF7(!4Jh^`3>Q()|P&GPnA4OlSe@-A_6bVUFZJMCU z$FK492M~5k!`vim4@{b)ScgOO=J7UJH-AzSrrHgdo{ZSZr7bXgqIzK&xs`qzXsR>< zkuh^siOSvqQ)k4=0VS)e&-YvC101~hVBY!d$ie15^=Gk0&T($7~P z-#&gEa&CQKu~MVTQ(L5R^vc&DUK^SM){@8aHLq5}`2q3!fU(sTy#3`oQWg^gy(h=c z*_5~3+aMpT4Pg+HgWGZ4@~4&c-tclbJk+Rg3TLfY*0il-7E7StKSfi*KRZsM%*r0} z*~U4)bhj7e#m!d@(ac{=!qUCef`1E6J0tG8?7@3=w6A3QH8Qrzw@5*?W)wc_@gPQ8 z3?!JzJfzK_jF3A*S3pS#+w6Wom1Y^JtaAF~E^wv*xrSL=9D>df2=cG-!W4#@PqcK5 zZ7s{Is+Ar`7wvBQonw++9meyY6b36JxbO@OX_>~pEB-jYN{O?Psk@5d6(V}kw9p^) z;;hVi;*0-~P{WTa;Kcrr+~nP_<}PGaymK? z2K^#R=8J1RtukuSeXC1cX*DaB_bj&G@;a^FqoA(yD~q9e;2&UMaO!-5?{S;1S>m>n z5KP2FBCP7nDAFdNl%Gsmdn%jXE)Rn3ktAoucj_(M{`4BvCTJHA{5dc^PL56~*%#R_ z!~G6-*My>?6MKU@^6Kbb^o)>Y^~z&DYojW5K4O#?Pg$$j6Z{_GA_D9kD1Rio2;C+u zmpcAdNU3x8Y_;o~`uROf0&}Bla3m?Xo~Ru}Zt68qF1i@$A4b5?^B*_rLr6%uKB^G9 zeARo`0S{3va_qqcf?@G1N-Zs+qsfT6qqoOsouY5Br7vk+#vZZv=6Y}CN5yTT-;>)H zgP$l{1X||CLO70mzF($!Yd=L_I&HX^FQdb#&JOiTIO(|rUP~f_cCGsY9|Q}#Cn*WH zN2cfQ9Orx?J`xYkFPJZ<&JIqGa~<*v80EXK50pR=3(56%BnQ=MQvn3{7*l5vU!#8? zGtIWPc0TnLc=R@!KMmCI817xs(9D+++p^cm270oNbV@UR^SI?f|7VXWm$fs2K zCj3B+A|+_8j1WO;Mi@7E-I93=rka%nR1cUT?43)&feZb#Pq<8aKlG%AY1Ru>!lNb+ z<1AqJb>dB{)7plchx`828R^2_mP%H#Jf?H^%_*`br=|8*5s-!Wv!R?ywd3_=yk~|+ z)~&y6XW_A@DRHUka{3UkIL;mPMMW$AIq&o8;?22KWQiCOxaliF$u5)70p)2W&HVDo z1D3d@i__+@=)K!n%diF=y1em@jv!EbQ2IFc`@3OQSdEKS^LGM0I+2a-%?akS9EE5+ z{s;bI>RKACTT@s+SLXU>VtD3!M19l370;kAFfdQcuMSTR}(^T#Os&RyP%>4lAP z9p3D*JNP|u0`&~p;}!1WVi>rl^lvqm`9fcEhc@O18536ia)*aoUWx{8Fdhh1ng6;S{aZ!`C z`gi#qDF7m+8})aE|Nm5>|GRLX`x1oee;4kRzy1qFAfx-gD*TUSjaZLYG(Zo;Yt#Gpsq$BM|I<;>io1$1xU{j?bZdUW}_uY19pcK{z>mw^{t)V1pH; zAIy6mKUW+ov2pFrq7Tl@gx+KweO%DZ-SALS)I>xSb~Gg4w#wL7DEBT#4sOk6yhSozPZy!F`BMc~9xK^1$-IO*MkJFC3?;bv zWDV&-(ZjN_1vAbvD;S~N%>l%hwtp(Gev@bSX*HcSFy`Z~r-TO^{i%KaTCX8P-mNFO z;dAtHBH=~n4}#a~MH|^&F8N-8;jn%6`w&8x2e3a^p~w})mm(-a*JGc0l}s6n`OekL zcHA!fyETe;nbsPhePra{Z3KP0dzj|WpoBMv7yclKL7dy*y+JwXGcmD1NWcZMt}d%w z8Vr`d&N}XmYfd=Rhpv0P_f(`q^49%AG+5JiJyGQ*n$jS;g&WHA%smn_KZ*9T*x`_y z6jmm&x|qeCOuTK;-99|*=O$E(^~Pj0|B>qt0uAl3niI${VlY|BG{bz1_05Fyc8fXD zj`db@dnX$n{v=#0^zy}}`{7Xze9qzGW;@iBq{iCq8mIPZxw1y*KAGRSS|pGW&|V$u10@_IRjY9^SFuT5oyoxl z2?>ySg4{dhQe@m?pIb9Omh%G=zpI{)tZcz;B^@mT^rAXNR8*(2Je9+%rVJE)oRfKB z5j{0nho?t4@AEKHRta4m0*J-*xWAq<2U=*{!wFpZP=B3ZM&LVOE(oX&zg%?|1BO$=e$IAGy z`Am)Pw7)3o{<#NRrUF;}1@!6PhR)$Yk;t-qn~JI7E2+2EXAdt^AlaQA2;nT%1!G$Y zpd$R!$rG@b(S5V-0dNz><#W7)+?^p);f^-?YerP06L^86a_BX zp8cv6`=z-PZBk~MuAiLf+s0k$Mi3c=^e#KM@_I$E;rqG1?f_BeQv zihl-)TZ#fMD-zWAEW~k*0#1xZvS(^fk279tmOaRqZ(qWidDNJg??FpLWB7aAAXoY4 z)+}F4?5_#&C~;j-BKwl&bNi`aN2_>m-yS=1aR0<%t@D7QsJJxOLDt3_sew^fCS2Zn zeUS0%_OvH>4dEZp4IHE0Tw`jf#VXbtZ(%YtRhv}@ZR}Z$8M~iUjdkU^g z?#`J;TdUyKjn6)0)E;yjA)FX=YA~oD@jX1*Ra`k28r^Hj`#`TVS+N}VAkTd6Cv6ki zLJL*);z(l*044lGW2k^gl}(*K#l{T=nFepUxh_>&JU!}by^2r6$FDtWrwO#ypO|QO++u!8in^9XP14pqTq;chYFJj2PQFJ2YIe@WIhHkV{+z6% zG}a1nV$ZM1jsGaA9COM3kc6g&9m&GNvM`(w;(0z9l^kCGyWA@9@ayMaMNLdnOr+R3bSGXD}qz%5{q6@yrdYpv<>(#XnKIp|a~}`@Kjq=eI#q+AZQvVcq~;jF!lF!dH3U}tydN?A_( z(fB&quQ`&IZ~al{7wnY0oWcoP--b5EpL<4&r()31F)oy(tuBl-hGOY@MS@)Rpr_m4 z*my;`ldqxi2|hok2@Pr8%`*@vff8_zCIN`W=5C7d(a>OmUPtD;g#Dk~y0{#`3ExA$ zTJQf!8|p>KYG}7-(GL7HCQ)cQ5M2OQN(orXKuLnskhuWF78DXCfYXLpAig&s`Oxltm=E=*G7oe{w&#EXGK#bFCWf z%M{5o0f=5|F)IdS?Yj{GJ<~rVg+#6@YLn-2?yP+BNfQ9B{gu`xw^@9;xwe?B@1rZornJt$CURipq2Z~tofkyKZQ$>nS_OjH^3Dz>S(;Jy#& zIfpWgwk(>S;(x@I;L{TH+A=5c)_>_^HJ&y7>CR2+RUn&6cvL%^N$Coc)nNHK@CZgk zh`48rZC$wSlCs+@cjE2wx6cdes23Wt0h@b%>FNM1-C;^kXV==hb*U>aepEiEFxWs* z?a^;a-T14Q@7IjDy$@w)Y#x%e2*?4fu*KTI8rm5|RtKtHCU$8Bnc1eaM+zVeOHJVp z00Ml6nHS-_=jU}t0XE2ddBj(^j*tH6P5BOAcj3*9*+@63nyEw^=3e{2{!nz>SiPCB zgXY7h@A2Z9O=wa{3P5Og=fE)iQ(FdqCp&*Y@)O5@A--l*;7f8Z=|W|j%V>MwyOMiy zsLsgJvyPwJnf#~pjoSmUXED){(TQPoIs&f**lXJi9CG^f$bo!Pw}+?Kmmqr!Vr&dl zVLS>G*Ecr^1I5Wz6BF)nl|8r5Rgsb=@{Hi@0SGu$B!>pRd>>t8)yn!8Fh6abO_)>e z0S#LkTC@T$G*iOj(mXQ}g|(IftPadzwdmU;3Ajl0$(2n+FVJ9Yzw%$Ru(35Y6_A)R zwM9mzcD58X+rjr_yG(8zZSXq2^(&RFE-Y^QYI#XO1xJeZX?V-?C;1li)xx>blHTYm z33bcL**Q5=zT!lJ0K+^?_Z-vtBwDeX7c#Ju6~OPQTXe_0GeZ+gGA8cM)cOA4y=QKsKJd+6tj21LLd z071c-eE86g@^$23F{^x9LyM77;Nsp^r*CSC+2$T><|v$G6ibf@%iYmJWUZV5MaT=2 z(2^e9f&H&V@35e1-;{ieP>c1Gs}fM~!5$wD2di_mo>Qz!-S2=M?+rvS?%Xq<=uZ1k z$4lS7&GY1QgM!GzvyG2YpNK^+otqKAlcP)-^(`!ZD}{#|s_nn`PAo}oga}oa+G;FS zwTI%jv`sT+Atm3#?AcdKNb^Bqyt4!tbxq4!`K4+ zAmgBvCyV7~gB>^-pUJFNO|sWd+<~q)KH;z8=7G@US$J_6eRHs?Qk4-PybHuZZK>E{ z$p!$kk9=t9(=>nNS&c^7s z=i(L|wB`w*?tHN5F-O}TW6ti%3JQ%4zIu+{pwBopuCWy*AQ z{LcG82vS`Hr<&;_km$NL|KWS$a1Q|QIYKv>Zw%hEXz;jYW|}T;Zo4)w&1feB0!5yE zTGS_9T;rAdF3XuX_=@S`?jiAHixqxNGRY3 zO!%krH{a@dYHyq%H4|0rE3L%~x;)U#5Bt-LIo8uR)|D~pb?xD3d{lsJhA0EFzfpZL z+*f1Mm%C{lezv1aPmbs7QGwUHPu;o8<7|=E2{x zsE|hHKsqwo{5DupVtoI4qUDLrdhg9wJ4khzZR;k32R>gdX}i4WK$%w;?@6>u6$wlU z*cjmcOc`}eS~!qy%bHAq-M}+ia$E43qnncMLICvbeq&z^QhpNGtLh^Ig%JkMv~nWn4#Ai4!;gVa=+2t8(C zsxh!_L?J=nfd_>g@63Mi%VfXv9Bgbjyk+K1$e%oB3R6L@__sy0(!N|;p3F`Hb_M7e z)2tgVP?g4hS2{-8)|M80B^;boBB99g4|0&^!m{pUeqdZId*&t)_sXPO$M))cv;2AV z)qhrI8m_B{_=*Do>=n~nP#1l+SI4eF8xo$wx7WZg)=AIRkUmM|52^*cW!AzCyTp>x zJ^H5aP#Tz~8gpy~b+QaLXBtC8`98%wWP9`0VG_gRF*vigzbOcW9GGWQ)jpN*$c)-^ zA3w_o7=6-t)p_!w_Ab0MJe7ZCPl~mu@Q}%k_og;?hRM;79Ycx`Jg;Ncd77 z>-$qNr<_5(f+1+X<7j-eq^-FpOWL>eR+772A$8@GT3XBOXaI=%&uvB*C*e_(aM;|p zB>?lVCpvr#^Bc&qyxfZ25id~7LH2N3t^Xk4x>d3P!Z%?M&K81?^^OLR3c8E&l&2S> z2)t8NlomE%p~`|vzf5wJ3m;AcdJ-KSOM3=0l&(HZC^H}MtLoyyCQfPu(I0__-mO+W z2|(>O`FQYGeN@ngWTfjf89}Xovcd{6gd(HKcSaHYwp$>I7)*Fx9#GyZU^>RnA!Cg{>2SSNvp4Q zYEruFrL=348;_pD_72e=69~C8l9)g8n27$o*q*E4V7Zs8pA96{45fMZyjh|u zTcYVM+FM@j&-`iy(=IM-%C>X%(9$yGVXH$x7%J-j8I)lG!H1TSmTK|%fhL!&=L|3K z{Fpd6M($45f$*HbL%lWU4@8&(!9bJqRn>TMA|f6up@! z4u}}HMxbtO(t^GomKLEUNwp6|X3T~fghwW!UL8I3FZmCNz!w3>Qt;ZIkvfBMe%mZO zCy<`+)7v}OAk|g75V=@`MFe8psQ5^E*JYj+K~@fqZz5YJpvr)%fHlT@!mO(hINF1X z$s-Jsu2!lnB3@_3iLsvvLezcQlspW`!1RIwN$o)=J3uCBhs@5M4m1OfcMxbwB;=I* zk^3E+B3x`G4)1=XYZ#FN$ou^oQ$%v&2NJKcQVuD(zRc9n=b^Ry?|vu~Jr*!OXH?z> z2orgsIfb`gd1|At__(^py+Y_28A$Tc=$<2a&$6GMRPQuc0=}YcBnb$?<`69{@ut*a z27hW}?h^~j8@xwlxaS$88`<85zLLY!<+gFXcNe?>l{77I^U%S8u_@gNIEdbh=+9|D zv{Y(75dY}miSi(*dVJow#AG{YT0n3L?LEA!65JgeD1a_6ufjn3Gve;4d7qv9d>vKy z@|;>bg&0)p4Ys|mqg4**ekjwCxa&h2nC3b_bWZ!4@tX?UEg_}|pWX3&oyiAuBG2fZ zET%qkXq{qv@ql1C;Mw!I{RNkXgHA#v^C5EIk)*S9)x5%ze7ALjEZ}7B61qP-00~-S ztyI9vdM{9FtLCj$oeGkzN^TySyeTAr!J91g>U*C%0pOarPiaZw@Ur;i*KBQI^0cSB zqm4*f!A^mPjV~aR6guuW16%#xS`V1Y^M$dj+UpB+X=xdP(FVTvc#K7^C#ocbY|*Fr ziHA$JGHx5ZGOAmSyx?%lKPtZY=%Y<7S?EQcy&8(3M1_VrqGd$8d8hFK@# z5EJ%IrS&yVG=+h1>T-ZE3cGDgjgQB_OTAVZ=YrB)L^dbXX)gfLG6QhL zYY#TqL3X=u2g`PebG|C_rtTq}bCrLWXL18hbbnJq$iUD_wB%KNDF*udS=QFY>NOrx zb76A=nktL)`N(YPjR5cARAgE0p9QRObuF+g(NNB>r; z@v$dnF>!H91tW$wCiu9jnyTW8(hr@>M>!Z_-t@=r0-fdr!!8bupvcY|8c@s{dZ_UX z_qh?6g5hO;9te3=ttXo^G6JV#4`(H%%xOD+B#ci@C?|2Lx#cs4osJR5YSQv?k(Ozy zSO=L)Yraam=8sDg^e&UX7#0&(#RPF8hxa2u$nWUxt=rYEAnZi+whj-Ab_(%vVb!>E zI^B5ZKuwH{puzrC1VE5L;<-Xn>q;BO(=~c@a;uvgs|O-d_Y{)Ar1NVAvX(mfSDbeQ zae&TP3rnDP>8st04mHeNtkZ9!V}ARfb*<^+c&>}>bc3yRN|dRi?|V2U{T9VO&(IL( zE`S9LrSe%F8-DctIb)B0gW4CBDjH#zy5;t!%nV6?1~OntH9F78T73MD|3y;2A3#E> z(JKE>LHz%&vi(;<{C}mi|GyW^|DUG)vgeG{q5|LszvX8Dbw4<=3971^kR!^YfTus9 zD0=|{F+^9{vuDo@tc(G=2Q51W*a>K&P$}2YP}eskuK++nh`3VkO67fEsR6SI5GMhR z9kEyXBN!FbU7}-S-)n1ruKHmf+7~%E$ckW3d~w9e!dd@gtxqUeK8G5fo{lJ=+_3&N;FOdlYj03O zz3SFye^{r4J$OjG^%9v5w{iHNLF`n7MOla2KKsx1yy7H{?{p|U6P88gf97^v$RN<@)m- zcv}_64Y09awnDkFf&g1p(z^xc>YShWDKBIw zU$39|aDj_$qI~UTgXcAg0B=Pei(KC&wV{cL^m>?(4e#wIiDtJ0A3fEHY}Guo<(*Dy zTLFa-NCWQ*;LLXK&Of=T71)@_T6K7gjQaHk2_Ucw{x0>9bU^#bGs@1TVw)kA-P8^wHKXd08`o@HZrnt^|Uvq73$UXQxkDP{n{e1 zF&-?b>%K=1;jOUr&-ldPfkm`rXLf%n)jJ9!B-_Zu!a<_f8nl!E?(0Z-Qo?LPd4GdH zD40x^Sp@*piHtTTB(7jzT`Vb|v2UVF4f}2vyM*If_c95;LN*wOwoW|%G{YhMtQPoy z*m55Nw21#|cnh%7jrW?25L$hJRqf}OA__v%Z{&fR`tr!qw@=8b5FUXl4u?o zRW^?WX{tBUvhvW&SrNcHUD_J)J$97?GeWHEgK=ai>JDBtwLdtYl-Jq5v^ko>I>hZ4gwP{+y4~-bpsSjV7 zQ@yr8r;k<_MMi)jxD#Q6r+^9#c)&=e)Q>bPP||g}Rzb>B3{_)>Ja{1XYpObM0omQa z(D05-3rO;SN8;C*edA~`h7EA+hGPPh1BJUX->>i1hvVayu16Q05a92Q`lH}?Y})HU z5wLH1ef$_~Y-encD`i<9ssT8EJ`O&YXRilvgRP34){$0JAyNhBT|U3yAE_nL3{#+TJ!$Ee1)Me7Lx{oV$%B;TrtEuEMwvyjIT zvc-;4;&I@=$9znAM+5`p;&f1AuRpu1UNW<=6quEiwG1xK+LTE7I>tdw)<7_dnU3hk z0u`e>$~7vjc_lAleg9ll5J%pOPFGBB~DA=XjSxDMMF+F~aw7)L=QTiQQx%Ygr zJVq(#_A}^^0>t}Pz?2f4;iH|Zdr?`WKe@L2{F$MZu_zGPyOyZn4w!V}94>q{#6`~- z5R)tFw1KpCGSw*n-Z*qBnaUE-Vekkz)2Z!)JHMn}Ntc;6E2Pzlfocn2tRsUY=(XDe ze?VtW0F0%#c_W8_Nb37ExO2nvtm__csZA50$8tNJlFwZi``$69U-M&I(#z<&8u9}I zbq8qIiE#j@P=r9sss>Fr9Ct(u+~+vXhv>k*t}Nu}u1UXjh&fbncfAjIeTcE4wR>L^ zQkp@pl>Qqyj+-8lkZcupU*bF)V}(Vw1^`QY0l*Xs$X3eOu59U9X2>U9nd65&xxfHeNxq>X=C zN2jB+M`=|_0oW9;tyKeCt?;P#Yi`FA6?a(=;`hfGLTAuB*O}-hw79$Z8<1!2UZdKB zT2>UUHNLOEm{*aOk+}fB0m8z7xf5dg8^+Y>9kF8rHUI%Er3Aps$l2i#(3$H_mUyf9 z^Keh3U4H+%-B!6q5OC|G;NGHUE#}}JTJtWJ^Vj|&caJIU*$~GA5zXn70SVZ2xx?cFy{Cj}_uu5LB8>#(0d0)GTf*XUV|9KF z59l-j{c;l(Hi8Y_XJkM)0sSwlR@OZdk3tz2ymxqmz7E58u&_!!QbsfXqLr+YsZ*7DW+SIX^>T+9Y&dua3qC;+AZ0J?|D_jpj!Yh_cfcOGre75akiw3hsO zwx>CL5kPJF8W`HTyQ8y8>P^Oe^4vea02D=LfX2~Ym_pYMfg4G<9HIuX;sS7R&L>vt z0%sB+(+vb|ckQzxDhOj6lQsm;9NSjXSrIdrsmuOTpeH|d=GuraQ9`-pK;PU%jWY?% z=g*x)0975Wc9oaA@~Vp_`3cH>z}2P?ZN>8%yl!_Xc&D4bhl*(cI!=IY>ipFh6CgGO z5`MCEI{?nuZ0iaHHfzP+S#+RqF+2xnbQ{9eU8R~L&225?_+{0n3*=x^$UsQm^nZH? z0oe4{*a)fph$YbavsE6QQ(H@vA|F^(^pvE4kzdf}K1JZklH|Hn_I17A%%uoKgsVn6 zOL3Mvm-z|=DxFPoA>5#ArKjc;_GeoRu-icSR9ND2N>P^VhK()_DVs|@=vy&$dwD7b zVfoI3Mqq8aw~0W@nO)bKOKC-O{-PYSuesP)=f&s+Pv>%uJ?5{5vJ%Ty6Vc8KegUo z5yq(T$9)M6Ex5eSw@L!tq{eeiM!p8Z(Z}6ZA29=23l%D~cpE@42EcG_sFu?0&ku=O zUZ&6>y<1%!0CGj5J!g{Jw#Gn{jC;D5>@X<1OIIV z`Y}Pb(bA2uiiiJi`c(L7Ipi#L+z|`@=}oqUrb}S<^umb3 z_1mVQ+n5C_RoVk4B>+opZ1aC^U9SJVS1c;dR{cR~Zf?9s)xayHL7maU4+gbXAlS(1 z6H_DbaR>dsM=V94r1O6E4P}l=p;I3cl^kewjZd1XU$La0>)^DUMuEZD?pldt_Pl^A zr6@EvO5{AH5~R%pD!Dp;rAP!g@17YqIIby9`O+oZ>Jm5Y~|w%7OI89zS5=f zykE2ACJl(;((~Tix-D^;GkBkDi5%!t)5TbK78dmR!BY=-aJHI~++I&q{I1k3wn8Fx zb}q}S_V{?S??o;~dxm(*nP-?Xf&S37OCx&tCLA5nOsW|q%hpOpi!@RgIZ-MQuFfs!fKh-N~Apqr22jPepSPKi=OFFlP#v7XeA zs;Sunzh{Fb4urk!sCa87edw+~{fuE)-+PJQ7L}A4T&5y_xjpk?PLOp(+j|oyza!O$ z;IY2gOni~*dEtdgD)1pLkg(3fv3Y8!Zi4rANb=(_!joSB1@oAKfg(waehg>!8!>M_ zu9p-64z-t*jW?N|*YT?l-m|`L^NYXWg7;ri!+i%2AA8pFGviw@RWovMJQPejrSOH$ zFZ`+s$%VsBH`{Gltn_WYbt)sBl3X}x^Ypzzf8idpL|E$(7u`qFY|l5LO^qFVj5GMO zWRr=xLA~pxn&<(VvGAFe6fT_*>8!=|VA0w0eKbhh7kt3V#DZ|?vPI*OG?4l(m&#gf zZJOaddvkLt5Lc>;gmIQkD2}n9rx0dI#MGZgt;gbWkaXHPg-+ZbqIaV{a8ApV z8A0xaN(Ei1tf~GQnL1&$tu*$OM7^(Z_4+R8Nn`mk2+wacg(8rWDA)eoh)5%Gk zyvF%AxUS#Nw?F}Q;lSQye^3d_VOta%EjHg;vvT47=aa10>gBi~fKt8XM1JJKN8(j< zA-w!ndk2tqQ4i0k1n2|7nGO|sG4tlf8hX*<2>tmC0EhbjkFT!|i~9Sz#Y9C!0YzFG zrMpv7y1Tn$=oFA{knWQ1u0dLI7`i*9yWt+bzqs#npXa@QIr6~FXHM+1_F8N2b9u24 zy8tV5XpJQitT=u}Zsx>%dF>KR)v7N$`OZBeZ1?MA(}nOEE_ZKJXW?W81pgRREsk#s zKVIC~{Ns&(2TbD+Yqd@H)>*19Gt*{!`i`iZa>Old$Au$LY6R0uO0!mutVdK7)+Vhc z*2sGg39_IarFV8|XHd(&OxX2=VCXOcx-2^|pQ&4CIqvyRg&{ zMFj?gQ03E3;1yEVbA1Z>WF z5!|}U$f)=hR-(D0bkeUivVj^FIK*7n`7Ugnt1s zsAqs?HI7H|EzV~5a2gc4dfH&Qs_miHln4f(YpTbq$(wMUQd!daJB^sbl`*=foBQ92D0mNA`53F@M|*s> z6Cob`IDI|ZD&+W8@TEnMX$dynM>TBh*VXnoL7_whY$@*kVa)7C1k=istF2}J zD*jpDc!j}+ri&et(MXtaU$9@RyQ{3KW>{tPlZW_HxbN8tBtR7ihMbyOcY*VQru7Y) zXnu&h8-Mifz02|=e(#&a&o-uW3g**z16Re3fovaOzqz@r9T@MS!ggCC6JfhlG{5fm zTNsQnR$;K?xM(fqj#|_e*1SLNk`#vZBulikhv!_pMxMgShrSW}O}b&X7SBA&OOk(Ej{vefwU#V{XjX zn~-apc|W_RBuwXt>+zbfRr;9f62P&eQuE8xI#1#&wK28a?~xGFnz%CH7hcB-nle4m zuflBT*#6DUxOzgbmp!#S0$NHhce~mh7rb*DDdg^1;v9KWdM%KxG?#%d`=e=K(584A z-W(`(SOZZTZHy{;>B;rmw4YsarA<;g<*87ab!b)j@O!}k!`tmZ8*!&AK08$^GSmS% zjlwb0t~uu{gCn2RxyFMn4w?}H#`vBQqvJk&iWe`BjE=5LQys9Tg5eCA3~4RruW)Dl zX`QdkA-3q7-5bb(d|h%%Fje0PGfQ(V{vF8CjsF=qJ`!DxWJMy3>_f z%07%)ms^px>1X8*BX2b0FYwzq{6Kccui{K%lEB6~IYW2$%M7lnLTAz|UR1=$>2bds zFMi5-edP}lx=0Sorsup3Q-RDT9g9%6Q+N_s2Vjl#Hwm#<>1Lkh+yfpz`)98E2uyD2{BRr@-pL>>alj##0 z=0q0!iUm9rw-TV8tqn(&oxP!zH&h057BsFT0-e*DA5a^)iOv|3n^FqhDK)X zn@dj;PS^aOGM~^o9h9gY99ipKg|{3Ik}X(o+pind{8(i)HGO@u`9X3a?*;HGCor4g zfj8D4jkp8Z_VH@pezcObK#S(wqvO6}PkII2Z+^qv#EUzwL4AYzvVVH|0Hqy}j=;k? zn`rfyilX#WOIdsb?>)mEp+fn$aZBpKjb?L$+#>J2Sk0z| zyE_-AN3=iLKYuC=Wtj;BEPLrbl~!~C;Q)Uh!K;PvrlaF<#QQzSk>Zx4Y}p-O==3BG z;Bd$O3G85eeiF18oX|p_Cq;}v*NrxX4@rKr>mASR`iL|-kj=BmP^1NKb@lyGcP}z9 zawJTv67Blj%H(5#y=Hss(8mAxCGwfD3_9fIl0sBO6znKO4mGphUW!Y|Hr|`AuISi= zugZ*(|b2?6Z8xwy7{)0vuX)-7#bWY5aM zR%U!k>UR=sTJI@B(D5vZ$qMson0}p7UBbmiioSe*h|WW`EUMW*?A_u< zXl2%unJkodX~}~}JhjW(M*eaBNo&dv!_|}-m4;D7%*KV}i7&OYYYwdWv0x;DA46v@ zmJ9Gw%iFtNndJRy6=A@;YE66glzK1>%#^HxMtc*9nM$20S|^FY#ibKyM6G}FK0?_wFXdjz;3#IO z+iAPi>%Z7NXy*&PVa@(*SaAZmXRY!RA0Ntg`^GIhdwYXEdE)CXM=96qAcoJmA`u~; z>ijLb{HY{gGrsn28DCUOwyOY{qwX-VRov;X$K7m$e^o!u-|g*7^J&=0_Ecytev{9w za9E}NIiGmYr56DaM|e^x?(nAa`5g0eM5T&F2lo~t=N^=Sfz+Kt=GJ^svkJc zahLYgN-|0Y{}_#Ug7rn7T6fRvu*=a_a!V&MNJm114XWx807g)0bY_8Z+L6t1IBJ6x z3%-vGn2ug#4p0ZJZQMehiPE7fi$0%lz^dnmqCbdVi13GISWY^xJ3D@Iqzu+_e@f1t z@}R3cTHM$b<^T44jLEO>$cpqwT@|VZDvAhZvQ-)enfKWqJq@kUq2dZ)-qap{AR`7p8lwa_$%yJ;;E~7fz&hF0A zyO2XLN*^t1n{&R8QD{0{&YJbOePIaGdh~l;;~MlYS#OR@``tMeIfm`{_~5oQxV&ck z@MvU(b}T8L%hNziozUhTF<-;0*Z7l2t{iIoKDUR5c4Tx+(OihSAoU^mOcl+phpUNa zi4)3l9=(h6q3utrds%H|HO|)@S-LzcVz__UqcRY+zFrBw!;TYhQhuQUaL4vqD{|KJ za){?^5Dm!oT0&3NvZm_KX;DI(AAR5SDSvwD8Xb}7B}xb2oq+msXZX9f{K;tngE~(y zuNRH2x`#YuK&(t&d7013HZ3QsC}}8(N8sgw!gulT&;K99UUZ@aAT+aHL{*TD*chL+n+yUDvuA&7+aR+JXcw>{7zcOrXuGfQ>cnn z5gtJ`XPpMLf%dt%K;exo^oICqQ3m9AphQ44dgX7GY6(8wTQHO^fJ=7xm2>=%HDsuUHo4c8HdSPCd^U4^vu zip^|`%>2*VRde-t_xJQSJ}CPkzuud90`{wmumi{(p9;zZ{2h-hX9?54Us~DWe*2X# z@)EkVyEHiHF05Q@fTF?SYr9~fmsd~%{QXbJ5M3pSbKul}!sGQ`QaMI;Jd1p~^<`1p z$mnu9n;b0kNG)Y?00BsH-v9imI8-aFbT}beagL-Ir9fe1sL6h@eGt z^eV{4!L-R!BgOf5wWOJ^P?nHh4qqV?%d?I5=z2vgD$8&Fq6MbacCWEo5OiQBUp-!3 zbtfn-`&j+W;PUnafHG|>NF0lr87_OuSx9$3&FB;5-ddz1vI;TbUWx*z-K^3;DM^rf zl*@SAvd1Wdb`!I+PqK873)z3ey#|Ys7Q;iuE^Z7Jhpvlo642BJmor&tl zg~jf25wRbZcJJpjRRn!r7+4E`k3AF@`(*tv6%6C(IA;Cs)l%I0!7U$W??t@p|j4tm(SS!eT=s`^wr1{TRIa?obpZvv>v=8-?`Fcfb=;Vp;?OWgAWqdPHqqGsD?d}jX1aCb2DCk>( z*=roGNP$LPtv%?PDu6t!sS(q8$vxTH2047ivT~}La9W{?%Y-zr0yDa#`GjOX{`tr9dECal8taC9tfEq&X^)3Aov==LAn0a85rYdKk2bvgHSIo6(8&z4HO z_&OeaZsj%aYsXpIsBPgl#4IgC7485R#-pP-F1R7na5>{6>MkD~Glwti;Z7ycwO^xQ ztqQ9e?g^&U*4?c3oPCLih#Jft@gU@=jZo`;ZDIU(w=Hrd(2aEs@g!&MBy5NOdntxW zy^#m`$JtuM%5|!hDgV8vzq?0LKzwStzI-j6Uk2Z*+pnQ}*l|LNcv3vp987+ycejUj zE<$#?yrnNdkF^k#+#B9V=ueQyFYa!29d`VTtwZMzcn;!WI5b%>wDmhkPuriL2xP&B zT9lsddoVwtprEKyr6A>WUSPv#VEygS%Y#3Ed&BWpf|PSkqt2jT`tRQm0Ec{g7(80F z^KzuZsf*_8q8~LAZq8=lMjPF<34=zFLw7Pwhj11UM;T3**kb^D!qwogItOb3hMtsCkQ{?E5wt-{t0sBHtEK8ERBSTZEcgOWU$eu` zt7`b>e4aV+uj$w5h5PAg_P!_g^*7x28VdHvV21(}rdsnkh(8iKY8y^oTGR%gpS`VZ z==vU7JypjF6MC~PuHd!m<7Zuy`Hso8FribUN{pK6u)6-J`R2i=yukVA+`Y}`pP-1lB6LLyM9phbC zf-)dYSlL_mUjKgRXTa4HUvZvJa=)c}*2kl@u)RKf|0GPtFq>hD=MH8jVoX5!3rUiypzrlx% zOwbVz0nXGFtblx$gm`)gbvxn-Axp~(DaQ%JXd+`yX0gI*e%Cji>mWMV1m-s#ozy`J z8s9GW+B9rL%Izy{^bU+&CZ97cocEt|Q-pR!rRU2R2+0McWy|It9G`LSvj>h7P>Cqj z{X8+B)kw+75qhB`lTDM;(8bH!&NykI0Hz8M*R$#=55%s3EEYh|cBc4l;~xr+Wk5Do zQE=srm-pjsF%dOgj02xXD5-V5boa8{<`DG|JweQck=VC^pZ`rie^gHU6!*pqL0v&l)|$>0OmWki9EBQ@ zrX+SYSyesL%0s`WGb=i|Cjb4T|B-m}C0T(d4Cw0wjEwfqA?ZvC4$kIqzB|R}W?H8{ zy^K+juvt#VpmKP%G zBYM|8i|}G0?%r{}8;tqlEiCtV)JG3wJ?W+?`)IyNss%}^E6QFjmgQM71AnFuUnlC{G27;s^-GAe@At>4pX zb8{ZR5@5a`prxGN@0pR5?9tbNfP1vASPa0lipqLnm-WVfXZ81S$o7=4*dy8Z1x||^$hIKYyyA=1}cUs zqqEi)evu&KPx`-vaSDLn5!D)8_1F4fyRgfm47Dm^u_gTc9=M|(-?~xGP!tx3O7;O@ ziwVee`GOYJ1d#6PudR>Ne>KiBvp!M>bx?;#)@JfTF8~4muxytJ>sdM8;fv>V9j!mDv%*>q z-+|SE05Su*?LHJRW-HYwcYS~tMR*VLyoBflvM+?mbJr-xQ=|BzB9c!Qp&XWr1BX%~ z=UfB=No4L#Y8&j3WNZ7K0+5C7bc=U8DFx0>r5 z$nrlvszf;i@1|1iL2>V~B?^QQ_f(fP_q*F+xe!dc0E@=+G&)N`gZH2~tLbW%2%NTu zyE_ZcM_%O*6tJfAKEwRwD)#vO;S(&0nZy+MR8OQ@DK;NpWNPc9Zd6??p&DRsKsDZ)F7#Ms zhyg(_HfE-dANp{1mX0K}*dYVXx2wASIRL%2A2=pFD`tnkgc+ivC8>zZ2uheK2?z8I z&b9hkKC-k!wrlU6DpA-b{MQsjeDZvLdRv&&H87R{nD)nIt_$x#E)RUffuUmA1r2`T zq<6tFo|Zbx!dkYUx;T5j0*vO>=iHAi(A)=d_f80ni)6V|qj zDmz?BIk!I@)JDkFjV8PK5v#u(O%x2H$yuTaqiM(~DFAH)nlK)g{SF{PRxl+YlvP)g zUh(#0>iIvtlF^WB517HvF%rPoYrb`9urr@}$rgqaya70?qGJ1#(4fUT4lDD~)7^|l zt1cjs4B~#Ba{MzJb#n665yXmCjD@=n5SkDQOkZC(Icpb>9Br}O>+QA0sPmZ8o-f!C zJri_!(}k1kF7iohAo;7aZ~dAH%BS0{U&ClvgtFfX*ft&&8>inW2%ZhOS zq+k*}UiowC2h6ox&*IiXm2fnNQ?oNIb{)YBC>jCj@A!aWvxOB;Fin?&HzGron{p+O z1;PzNncV=X$CdkM{ARXPaN4L+P&_~14*Zs*D{`-C%xI)}yIg*41=flrrDnAkXjXP` z)R=Y%Pgx1g>=E;%Q%` zLz`|7C%#{9813F9+?1Q+COPaFtS9qKf`+^MEoV3<_&9U8*!JB@$RrPeF$T$kvXJ zXgCfW%Jt45Suam*h5XzDJy8X{R&Qjv)oQ|%xV1WeA|k@cMhiQ)3AO=%=r9<{Qey?# zW;RWR-1XasP_TC^Oiodno>>v}&gW{lRLL3ih>RH(1&N#EkGv@Jh@x$|zl?5N=wWC=n(}#zqw#w(C=G&~N<)hs|(4kKBB+CTV-$ z{evS5#xKt+W_K66ETDQL@Mx*0q=<-%=0duqK{ooJm5Q~IP;S`q#*1;40?b&W~O2XZRh>+k@dY!>H-wIw+X`=jdZqe6mufsX*&Z+vf8vI;SU1C6B zs@tg9eu4Z(`{FmZ+kGGYEaM*A^s~z+z-%P}h+%fe*Z<63ojVGPCdX?U6vtov7YRU! zLY>c;Gg(32n~26pbNdeB59am7)0(~M?z!49wp^8|5@y#k{0y_)GtlVv9qMLyoWEM- zwLLf)M;x_&0of7|06J$@Vwgi5QI47(&ttxIj-bp9?6QRD9-T~aUfc)-osi6WwC6E& zdF()EWD3V-4>!d)4`!1dyef^Bm=HF}<0u#H9SM+w|5;4J2U6%8+HeCb?lP1o*C&f3 z`IR3XW{7}M=WtmLMcXV(?+CGUd26p%BfO;_DAt)~xwM4rj>c;YCXL+cO(^&n9I4oI zxS`@d2=0~`P2a;p!#ZXR7xb^JzJo&?)CJqv+8O5;+^wv}D$*@y<@9@4GJ=(%*2vDUP8W6b z%~}77ow?cFELdVT;%DM#y$4`pTTwBr+|UcEu-b2{3?wyLL~>+Rx-e6aK<$7v?}*dA zzG-!0gkNmK`sAc?nvLoHdUDCw-)|1To_4F|cEWNmJ?`dHbMIB&$92I&bk%o@U!F#- ziUi2{y0ES28V$hvmp`OTNj6OWbG=1X=48Jv`(=G^JQ2a2P>#2?r;;v1kQ!sjzlE^k zyu8fkC}cC^C4O&}h{1~wT1evmQpN%lNw;xc!kfk~<|61s_yY+r+V8+$kIJ8q$Ki@B%y71O`5DkNbJ%maI59WnnF4+9F5RdaNCYiSXl3)yL(?h$3{V?=1A z*X}@w=~7@GDxzM{kU;{En{%!6mHn-6IwoxU?kxda!qK#!UoG)LIc-jXsfKElMIP9!?|5%e4@4=0rj(eW zB|fetS*#fThoLr{c(U6EGnnP*+K)@(@7nfKTP|#&y&E<^Mh_Zq2Y;gam%ysTrsvMp zjOUE;%=gL#4I%4VknwM?!+D-ZlimKuVOym7wd&8S=&=avA9BF}*;!!l@*7e!vs010 zSNN%@2%%)c{$4f9?_&32d9K^?t62_TmSUxY)az;?BFC`J_R}YXTT`EZr;R#+g` zpC{f?dA|EmC-5-!RhX{P$Cu`pe7X$5Fq3-#y_!5A=h2e$V9llat7X6n+JE;R>6lGQyCy_4QBrHPBTl%feG8ug*0{#`ZX1fO36g4e@fNlP<1Y5p0@ElTp*V zU%g)ywazVS5oZn1Qu0Hfe;hDSL} zzdi(RSmw4G%c?TsF|Co;cdHWPaclhkWe`PYA}9Ls*1|V4enN_U%3`nf z)K#Rn*Xjb#oCg(_3sJNNvpUO48`ZQ-k4k@ZVC|3%DZ^*@V5Ps;pyAZOZgU{;1v0U_ zd#1?3wq_fusTu@#H0DPWJv>%u?kZl^ zX7{xkaq4vz1nzrc7O9+RLHF@>M^~4uva*PX$cv1O4CCtQV|G8dF)Boa<_ zoboIXjV6suOf>U7FaSeG9lP3gTtnb7SoLDgDHI!rA^+M z6fv9K_NWw5vRTTxL_Sq(Ey!{+L$zGxVLU_j&o%pMh0XJ=>5RP6W7P2=%m zwQlh3Hs=~0ky7kuA`%jMFtprs>Py%)Mg$p3g^t$;h}hW^3knLxOM>cpCpW7GNQKEv ziWz@grFrltA<)$J$xsof`u>CBy-?B6M8(DRZ!Qi)8%DXVHnTwAYy|7gA%a*MElGQO zrqCc)*G8J> z{ItS5aPr0e>#-^-D-X}lYwdD^!^6o)NIH*hBO=}+gyC`Zb_AjYhJ+9k5O{%~%)4w; zA!xd6k;ux)+1T56>R*{X{y96V&V98>1U?9jOp^HX=fDz;M&=-V92{|LYg%j;OM&FZ zrY6p#<74NI6h~UDP$y^S!+r+X;?~yGv_hkCWMpLQp)iQ?)FJ;o%R5O4Q?T|xVN5aUpC@mJ@;MR>9y8ktrz>e0-09&M2Wu2fi#NmC&O{kI+AS zs2Renc7OBc4d>aU-fLWT^zZvE_o)hniiZd7D7CgAQu3?6OiX(V{4O0Tm)F(b1z#<*fbv+ndhk z1NtTa?)>U>ySrSEsw(+AD1N3${nvO-*8(cdiB&9?vb>7;{f7?~reg&ov21pmZ}qxD zbSBGmH|dB};QdWnp0n3JR**t(gI%IS`ALS6fq}e& z!qUnL=={D6zWt+qy}*YNz7`e|qBrP82UYeqj*h?=(%ai>?ciW|wljqQwp)oz$V)WR zlBh7Uud8JgnG7|XJ-Y)LD z&fBvjh?`GA{flsxcWSy$bxQNH1-bIh=`B#hRT?Yq;S^MkI4V)HbEq+PMyJsZA z2xb#jBxjQ^GaDRp%E|&d`zBH#Q+MvJ6)tmzf48MPQ~A|j{P$Bj$$mwoME6xnaegl@ zcHXTj(O?IT770*$_e`+!q4l`w#U}*CqIur%Jq?7sqM~JRm6)u2QLfcK-s??lK?w=u zq?$e5S*}_g+R+M%D}?JeIIR=i!PuqPfx(q>Sr=+G`x#2|PZ9jXaB|8-q!bp=GHBM4NEwDFBD_=!?Lajm^TmxIuyQ;v7{}gBZ%4B z$);&W)-^VQl`HDOCzEwsSZId88W|zp!p-HRKdbx(Cum84pT6tLMOKypVY12|A502KiL)CDR;VYYo=NN7uI-_ z;niaRN3)L4wT!&_a9&d;FX$({w^tHtv4lIbvcKU|S&0Vx?_Reqz*%u{dYB1T2N>WV z+2{yD$oTr0R`MDeK3%;*9jo#sOvumE%{Ja#IJxQ?}W&u^_?1Zvy5za&w3y1DO~&D9y}pu|j{zU~+J%finOcMW7P3 z@?QIO&|@Nhlf&((a1t>dQjc`OnQKRjO2qilKThY|8(W%zU#q#`g}c zMB_N$sWoQ^7wgS(H>P!{srmWyC-7AP5A*8kn%bF|L|=!rT5wOc^@$UwMjMARG*_|k z#Xh>wY#=ehn{FIE_%Ktbu32#vD?7WavfbV`tQzU1{$@J#HSQ>et1Cy%{IZN1)0@6t|hXn2lcWF&beRQV7~;?goeH%M@*OQr~vn8k&SPD}uQi_T}g;*rBM z?3G6c=f_L+Wcb+?6|b&GLLh$^$b#lvQHGnx+d4w{Q4QR<2Dm|&3ztB(!mx1!u3O= z4hx{pGL_^KW0HZ!J2<$wiROqvgB^%v8{3K^`hJ$tN>2K$8G7>A%)&Cz)}9N3n}`Ns z1WS{syu2K`ILXf_tokqguH#wb%J?>IO`C2plzZL|0^zz2<4-30x4PHytg^DwBBo9= zb*~szsmdMbe{gSTizgGQ-b%hQ$Lm9*)eF20_aY(+S!-nLPi5V{$RW3lXi4-_jJt1H zpmU`?bmuo%-5EKeoNVVVql!wFu-Uc(7u{pip^4;~BylBdgEEvO*xc$!|C zPexkm_ilHGMz8qC+l^j%qs)e?Sn7%AOL#j1XXS(r{p>+%=|p%LlJe+^dW;_jIMQHT zA|@A}kZUckb9&&@je2;7^$$BDEjCM`HDlNkI4Y_Ak!znv702MWzof51k-FurblWHV zMWz#cy1ofoTUnL3=a6AT*?(jVi`v5|FL z*x}M-2o<`)lec0x)nh_e^AmxZdK}UkrrL9>PxL#{b+^qWHq4%E-SZlu3+h~>2(y*5 zp`rVpJ-PjO=ti8k*zxN%c(Pxt&BmI;GkJ6Dvpx^<)W&ZlCZP0uYt@ol8mgXUrI3*uts@@KlrtoxX{$pu)QDO zz+Bs2*_c#cKFv1@AcNzFSwt#_F{`@N9-G3Q!hTDn;J_O8bJ7(G56VWWj5)opml+PV zgFEE5RDZoE;HU}6+25&f!#kBlcRqAsmf~qEGis2_Db?AK>b5>~Kupg!8DC8_1t=iDi?FZOmj4|zsD_muF;^p}eEAr+JlCp5Mxpvy;>Q6Z7h za6IRp_N@!W+)0Hbzk>-!VU!xJO!yzXurZbIZu==a?okuII6wc??p%8#yqj`iruI{6 zfBUo9yTeam#bSEru~OGnO(aRK*SjGr9JjRcqvf~PAK70Yw!>$_ z6z-?QMt65#;$!~#mG56}Ut@T%qM>$JL^E5$g{WNfSE|8ryC3?*Kfj=0{ZM$Xv+JtO z&~c`LD6wp4afJGJ12}SC(VAQH^f3#1;TyspEFII+iEJ%Y>u|(9LSokM798iOSf~Ll zX|QKwh>Pbuu@Kl~5>4IB*6QkNrS7Rqs^`^G<(?Vic%^=)YS+BOlPNZ5&`+GsPFkyG zH-Pj@1;wK~D2BX$)d{8HKtgy+Da)W_7^Qjz(8`-r7eC!2vCro_2;%>Sbze7ySKIVS z5;i!rjjW`x4Hg2{M4?(}x#E-xwGb>Mg;S;uh3r~!&h0nyn8+P5HPW2tZ}O0106Q@V zJ>5HXXAvP4D`)cpMXSeRaS zm_dI$U9nPzSRTj=KyJ%m|5qLd2S>G$9YcQxr5wSy%GBG{dBi53hiR=E!LE_uhvkI7 zc3zR*wj&k0m}HP=}m+@8>pXd7C5bnacHy`4$q>^P{9@Ch^YwCE1PaPP7E3a&8@I53NHB1UX$(GiT30U-!V6?{I}JC<&yd9#r18 z113CB)nQ{#=g0vAw^j9<(SiGs(OfxG3D}&0&@Qc}N4-dr2z zWGTiQi^D7Q%-gO~tNYsiT$<3~GnIlbg zUVelC4D3C96rZXzXickwdJ9ZVk*hzNnt}d}M2y5QQY3>jc@-Vr0G*LX%c`KzjP+fb zfPuk#59qwIipih;-kdJ&Ppm`uDUxD9WFUWKu=XBgl_T7Y@t`UvEKQ_ieEhj13yb(K z(9wMO@c6iO>9riRmgN5>&;koZHd-yxszjQaStN)`7_$UdR5l*?vvmyD#!)v?ylm=o zr{GSAryX@egon|>A>pNi{l+gxtZukbOxAc_e_*tb;5}lS4L}GwVjl{5ro=X6`0TLW ziA>+!7=}9^QI!wVy8SWEtF8Lt>!jgE4Albs}d*c}h5)6NDRt4qxwrBJb`3_73?gyiMX zSGqzgtFR3PVrC48D{O!PEjL_TK}q?019Jg;@i+%uM%eCv6H`VGN&qT8Q?2e&`+{pSv=f#uC< z#uC>`maBeS`8;X0d>J!&fq9&u!Mne1@aTx2{NVZ*61K-5xlGBm_pVM`(mc9>$HdGJ zMR)4&Y18eM69COE{c8POdRB&O(-N%g(|UPy(i(b;iSK-X*!qcr10$kH&12KoO#KdK8qv&-j4`g{!g>HkG=E02YD-_$OkDHXVfTgPODb) zgsbj)DaA||q$^O%P}dX83cnzD`hs8;8ZF^a$>!kb;Ymr^@pMgG+-bfPqg08W0miw2 zSy6eMvJr2e6n}lu@32C<=?;4J>cgO4JI+H0h*={r&n15qH67jDnJeC%?vrfVsaoPO z{kTO8r`4Gy=l|;chdcGFf<4trci3`!c--Q0ra-=Y=J_FMkua@dVT^Ys>d#ltfKO)D zWBa2yGj^H>G}$QC#XE;$Lc4Y*Ff>e{^nAS%7Kes|{;+S_pPw6blzGM3YoZwFSKRYH zr-Q#Mx>@H)O}_mkNMgWfvRTmeA1^>{m9(s?q>U)1{VA!bX{fo>O!omn{$`b?+rfS( zaYy&jKw_wPGlbCNIait+G#Nytitr6uW8QCt7=M|WnQeZh2PB}(ZmWNIkGU=$#%wXy z6BrH3&#sTwj>h`auF30jk1ri|g)+0+=*Gt?UHAF$?xwhkZVYjw_`N9mM#r)0Z^!9I zv9_hZ#4y%Ym7O(GF)Cvn9*&oro<3jax+G5!4v(%e<0+?m2O4WeIqy96k-gTXPxwqu znc=y>-E>_lwK>9(iraXGw!n~>;d7-mUcVF6;OFGIhy7ZUH##L5m zB>NFcOqTrTkH>{jefJIH&p+3W*RVn)7+I9z&)HGq`>UN1kwl9UUD9UD#H3 z4&+LmBNNDJV#c^UxfjOoudHeOc&3vq_VH~fe-hko%Vn3ccJ9)=);&QJbvyaZUH}_K z8c%DMaOsH&|$GA59Y99nU&FTFt<8 ztaS8b-)6DsRwyQfsnRDMCVG5(A2Xe)nvn2K0iW1aRlEWa*1m)wFc$;36V-jqw~}J+bHtV zyi8!{h#IzCUdhDdCXP|F#B0U2YFYTg_l1(0*eojy%{GuHG&Z(~P9qxNc z*rc(kStt&BvM8utN05=x5wF(++)2VY_f<$Esl=z>3*mfEu7L#nsSx;7^sUEZKkj5+J$D9*v<2VlDIw!1nhf{bgOf39H@QbhxkZG8Ob9VaNL{)N z2=Ml=f94}#sp;ldbMJi|%gEFg26z|Rk=!Rcttf?V316yk_eZfMmCxvB`agg7Q#-w6 z=LT(KNS`NaKfqReI6dNp#8IdE+za0QmrLdzWIiarin}@$L}BoZAEa~fEUOQg?Z*$+ z#^DrJ8*e~Cb4&;e2q0LWY|4C~ROSW1j!Y_*n2^wWBh~fIcjx2v$hbKF@Ng7|>r2e1 zVq#*>muqp6#DUL{K3M-9{fvqRbG!!%!CH)x<|7;`mA+UiB2rQzV&S;-qN0$aBU??U zrDsKo6nA%boOc&1bIY?NWMmxO_;Vsx;vuVzpeQjd8cJ%Iw{onkrc0`${;?aB&TXwE zMMS;~I3~CZBj)-k_6Soi8Zm3Mr3$xSi7*Qqae*^ijC2Hh7-x1z?QVu zse)Oa92Ea>{frS8cxma1laY8*f6cDzg~Ki>s!QiP%=z|ud=jrq#CU25)M z#o1Lj&GShna{Iio1RJ9!P}Oq3T+iEJ#Tk?4rsO#|_2}?&d zAhsj%XB|4c?nUXS~x&y}G)7;nP?%pS@fW zdJ^WyczKO^adNx{f-7sZ)(c)x*TtNKn==f5TyPF&Q`;US5oJyaEmgA8-b}x9a;oFN z2ltd|Cil<~exb*)N?CE$%#da!GfDP<;hIm?B<(Zrej;U0KENx^ZRbgVBo@y&qAl*v z{M9L}9f!Y{-Yu|%NH*K6k}hzE*<;s$<`bP%dcvBA%7rBY#3J59ULMtk-x~XvG)+ml zIU-0QNK~QBoTpe3pJ+8Wv4H~A644q=b*<8!czVt z&L(3VaJl`g-Ct_1?U8D09a+6{<-FqJPSffN+qG}cQ5-l)LIMMA!jOZ4gF$gcrTG*+ zcm?3oZ*%5alTHy)QJb2NzJ7kPDpPlIjUaM!-yD2p#6kvGs1eV9au>v*qd!F9w6@t< z*uyP%r!JY*XBOXGbES+4AO?XJusUO?Ms0#z?r~ty zi*|G7y|!%DPmE=zRWHM6gW#kFJ3DXl5PCu8&Z zc%Ac`L~$h7H8r=1ti1%)jKj{--e)u$8=2*$CCTQkn^nGD+!WQ~HeDM|w>}!mF11_| z`bZMd6eQe4GY3a+1PUxYzddd9jJYUu2=M^shbim zpxEVNbLYN4et@R^{DOkdJUl#z$;hIUll#4%AS&0}=0G@DYL7Qe!J;Tqtq$smCW}r? z{AOZe(s&KE7Vq!0oCO-F^ZA@(0-fIT|HIl_M^zbh@1m%bNGMX$NVjx@fOL0vgMf60 zq(~{<2uOEsdeew>cXxN!S@@mr{QkJ--oNe`GKR4Ce)s#XHP@WatY^MJK;1jTYbjmOEwb0XRPdO8Rz!WOT%MheGNq3-(`12B8T*O z`R2g7_Z5ueU0sv1eDsrxqsywR3p^^5zaZcY`#?f?3Vs2dzwV~bMZLgHA2oKdzAoYAUcS~FyOzQ)EFyyWwtEq_#YaHvukVAznT#dhyY56k z!-u;rq0K{xOl`Os>`wuOV_Xy155Jx7P2aZ(O}h}cbN%eNJV!(^-2TgUw^ELv{&3D6fzKxktW|E9K*0yi zE$rcP9eojiLjAr3g3N13WTaW=cT8T8mIr8!hL%>N$^BfU_jhhCi}#(YXgIEjvokv| zgN>OC3P34yEV%kFK0aIq1V6Ga2#>4mO;-k2TTPyfNHIPub2-$7N5&cIQFzHwv5?{3 zJeBHC2eH7ZC2Ml;8Y%=NwTFV|EkROUV1rTjrAzT@?9jvUFyN)Vd;1{^&!_QC3AbJmi5 z*`|Zd!p-IMdH>FlZ~dlL<8XFEz8H$P9Bod!%?O$hY?@41 z`}^sE-@$2?jF&JI-z*UV0#|8Q*TQCxjC{{Ry1FLp3RGyY?lvS^n9{7ShMwiASf(YM z!#FvegBx_YYA7~-7lA!_)N(Y1TC4`_95JGrcof-2Ut)V(;HyMXQ~`+53kqm*r0wR& zsx~*0Z8tzsh5q3}lXz4|nL)dHz2mltOC+ddX$R~ucc+68%?Gf_T;2RH_wl$Lsel%t zQ!j&w?g5D_&cEEirEGG|XZ{H&gKAyW3X{jJv1fvE1{Hq0c|qPIQF znLqba-8;RFoso%PSX)`~TgcrHwbWr`R{AZJ@iD`E7U}FhfhNuGIzOk%n^1IY*@jqOm_tHqhW3LQ)r~9#Gx;dx1TdLnS@a8 z=o<_SM+uG@5P0%$9V#dqI&N%i{D6b}o(tU@-P=cv#-tjhv6BBq^8HQUr>%ABDAEk8 zvT2hA4W9&iqZf>G)5oi6pRjoZUvu~6R~c&asRU5yrEkZ0&6hT_iNA);;G4X?S>HeS ztA&Pa^gwB0jHP_iAd&y+diRqM>72ar^l63m~(Fa3rL z{>r_ZzVBfYy1imv%g~+N7ZrXDyR5nUZFka_%BT5y|C6q!w{P&GMkJ(xme1eoXta*R z>4>%4Z|JA7F-;g25K{Tsp$==Wc8#;s;nXPnui`&om!mKUOSbl2*Tbz&#}8u>=CAcG ze#Q=oB6bv>KX;#2m}IndQCn#Ap@KFwF^at^Q! z!~XjhQ2FUq6tT9S#{+X_rSKLO^W>((=lge?hnef*uj|tf+?y~a83k+Yz5!Fs@b&6> zBRdkR+Vhnzq1W}52RC(C|L4U3)K#M5)ih|>YYr?wVn?o(8*)Sr)c>qqW-y$KGvd?P z{G<(qUG5^Gu=w9!4=czi_3zYz7r{TXC(r3WHwL>*#{>`H!Fy>;EU=MNMb3Nd?_6vr z3m4410^zblpSz?NE~=@Om7Z{xnt02a$}EsuFV0f><$B1O`PvTd;w2C}D)ghM_Nicb zy1P0#Q|SoFWW2Qg#UmMiI+(uCo>*T2-{{ZB&BQGDnj!dU?I;a5eJZ{YjlM9Fc!9ze zj$AMBP;e0sfrRZ75iU=d!E3Af#ne%tc_m=Ch6EKBKv}e9?O}gtM0Xd8@tbYS_|$p} zz7)b9H?~=ZMq2BSF-9@a3excC3QzZFM%hF*MhxGxTHno*P~0(K$_a36Rsh7U`sl{U z^58aVvR^o+C~UfK!EAMsXH(EHk%81E7qOrsWt)!Z?jeT0wK1As{Z~vOq_Xh7ww<7Mti<-oz^Q**|iOAU3jemuX{Drf6UEy~UNU zgpdYC6So+HsJN|N%%4O^O36Q#<+k_3B#@{_E%q`2l|k?1iKD3*!c915xq? zk~G)UrjjXZW)n)wGOc~sj_ajN)u?n`!JcwU;KB~OUT|lO)asYmIMzf=VkLe#S2nP& zSSDE6Zp4D?xc+slsHf;zEkY4vnavV+SgEm(VWMpKZD=K9Qs279fQ~84*&*XSB;uE@ z`BLLpti*@csCmWf6VRTjGSFN7Hwmme8)xmd+eo^>uZSV|mo)@pgRiI3u$ ztr{ggb3!5|KbJneC`l_|w_{7xqUtXp$%{v`ysX)^N|tGKy?Q%=anLEYFCnLc<~iS3 zS7G~7a0}O%7|I>YC~KROGu_cKBzVVvZRT3Y$3spCguKm(Y}TYX0g8D@EQc%8eHS*-D0fKmK~b zB@S01N3#OA>>+ih_PBW4)fd$VZ)_lmq5}uQoz$da6KffV%RNC5RJ+ae;0(0eV=P)F z71G5fH{YivqL85BR_r;Dt2hpwD1YeppSuamQZbwMV-<40U0EqGp1pm?+qi`lQPN9l z>%+y*$2)yItZ?9M&FN%<^7%%r{?t|Mt`W_SROo7lV-|!-gtJsCO$^|5pB=a&c$7Vc zzLoa2K!n*{N5_A1Lq_09LdL{vzyA5NHW7Q|-USG)m$?=QuRi5E`eVNYT2-u53>?%kCTCrw z2?{*1$f{)=!o?9pdqM9q`lX~5T z3%1@GH^DF%n7mS<0;pdje^Eh1v$;r5V{ zm-kK*bv3BM_1F-6cFy$L!kR(iBdsy{#uKkq+lq>gE9GJ!p7 zbj3~ta)(Bb8$2S?`sm#h9`XwQ*Kq!E_?VsXxrHcS+L+~SEaP6s#CwS5gt=u-%~W67 zV8uHg#_aL>cD+qzPgPswW!->W_%G(y)S`Ed91JvY5C(CPC^G)rPKrLZ@R-!1PRfqx z2bXSi4rYwxaoLF*ma|lRnT{5in>pOpB(=-89Pa}*;AxFEbC;I0mWf=7)($3vR=0P% z5JuIEAT!T!KJY~(7_@#uMqHW-@(dDiXBUhjSxp|DJD>TYJ%)rzFVI;YevO=PPKb>A#0F5B}VYO?tyvFaMN8UXGy5 z0GcO?QpE0RSG!x_1wEUl-?Zf-d>f(%br(-glfT{APPJ}K?w&4>5s z{lFWPePvWRGkvPTj+7lRNX}ba%|4wXaGUD&Uemq^SIH#nR2?Q}2X9kKC(Z z66tc$2Us=`8Lb)?s@Zeg zA9&U6&T_U48)3^pY-_uHErh*hO=dp6R8XsJP_B-MhGqr|iyJ}4bZl&lSOR@{dATnYWDSS^fcjyLD)Tp> zx*C+j`L(qP0p1JX!GW^;H{qhIMZig80#X2vVox>z{(N?J7Qy#SCkFUtgoF_Y??Ip& zpVt-em3h}iXVtrBXJ?1uvV8}sR~SV_#iu%k(w^q_o9nkpds1Ud#Fj`hYX=M&CsjWS zSe&FEXU)U1O(Tl<_vduu2(aJ8ib`bVcfMIX#`P4^6o7M9pat>ijU3A8;~}d*vuZ)r z(_Ps^mq&&pq5gIX5Sh;&zps8WlLrAP2CSw0&)r&YiT$-N?+WeT-Br4Z@=he9*b=Pu zJutT^-W`Weyy0MmHOfzXtA#|c&S=nRejS3_csED&x9EMNp07h)uC71(Q0g&sKT>kF zEu=VbAnry{3dIWP@&wo&5qmO3Giq`;s8rHG`>gJ&OH;1XRtL&Fzu;f?jnkG3HJ;xk zUJypIS@ogfT?hL9%$-FR?%&NVaKYx(d=m!e?@Sp)35IK8H!K6r*uQ)h=9lt;_{UMu zk`nHQ%b_s>z(?m{ihyOr0wTEksB29aoA5Y~312VIjjt;$%z4LI6SWfVMqcxx;Ho|@ z@`sU|#?ZjA7aGCT_!Mz82=IyOGxFUZd|y7*v+kUq#e_KL5U4d2ej|9(_n0;l^f`VQ z&VA^xB!QMYt|YIvHUab=n5or+()BMlXV=Lc-@YOKYfkWkdnGO_yRp_2{pr)EqdAAc zXCG`Acu!7Fj*gF8Z6G|oadB}cU`I(M&|hKEEdeV-MnS}N(MCqrPp+c6ZPPEr$B2H@;G&dTU z{v@Hdkh>fKegoa9V&=lf#z?HtSb#SxCN|&lv3{dJH2&glODzErsW@*!ZoHc>XV;u1 z6Nh<`bGeo*urIip-KIU-u_l00_dCJc+`wL|0in_j4)VS=#z zW^H!g%;;4fU&x5AJ49Qs_RS{?|07io`zm(1r%=C+I8ulm^gt}S4z9W(w9={@fSOVD z#jtrA9_X6wwTzEghSVeBgP<3s7>`fHJ1l8%7hGMW;_D&>Dn)p4@nO}yfQp@`7< zT4Nn!E z`a6H|j!;h=2R!37qQ!u3!9?Ou%$PhW{@+>v&&YsJjU@Xr2d*)Iy+57zFB?HW@C$l4fma>j#vD9&17yNg-R3rtWmkEpuRA&1z|AVnV-Var0RQ2+)6vh&DkMg1!~7l*LBY?ThDoc+sTK8q z3EKvC8ZLuJ892s`Z=at}eZ1Qg0F_A37gm>@W zJ;iddL6WkbOswsEoNvTYu=av`wbE{t?*tQ8uvU~z!f+ski%z@theo9-7+?!(6Ak~y zfH>@gbMKtzX}{-DE5hD<1GYpI4*O>usd$E_z3EL)Pfr}qFT@TTeI#^r$iC_KduH=F zY-{elfB&|DwicCLUA6ewSP=zT|Ge7zX5u+xzTf*tiw4y50Z_1Q%TaV5oJ zMXxrBkB`s8RkwiR{|Ux{XytE-Xy1t!o6kV0f!l5|1PmDH*8f1<%M5zJwj8VqFme|b4o*k$RfJ}7m;Q$;8jo!7te=1h z0-u}wVJ?Ucn=y;CG#gzi`j}DK4uUsZ^1G4y9Te&53M}fIV(Ckq7-mFMYbu!0S}Gq8 zf2rR!ouy(@z~tn>OYYKyT)eHkcqyRs9$e-r9JSTBd^#O7hMM9z!>YLqT&8x0ohJMS2h`sjy_VgrA!K9&1 zYBIQ2hh7mrbCtf+?S~nEwR;P9v8yFgjE!-V@MhO^~{KYW1c8C@59w}bv3g``hB^-pS#5sY{*Ux(Eqedd(<*Ma^}i~BAXtEqYG`auE) z?q@Bf-MoL6zLD{=5%S)iFJ4`2Ih&$1HIT~wB-Umge#&+{J-N)EKgMxu^72aXzOAQs zWFLCbYz?*VUb`c7{?Ktwx^(e`Yr#gCEN9_JJ#GqOavAelQ^h>aWji#8-#3m;SxL1{ zALXG65}3arqse|{YyA+A6vX}AviExb1UmBBYI(Cg2mRn}2ZDv(@p|jwOo!8>@9fm| z7$q{Y3z=PmoEgmP47BEj+)u9=lApxm-@dLCIpg_1+6yr2SI)xVU<<%9s-bPND=Bpy z_bRabDP>qLLEBVPRC~#(nX>ZYy#(@iirn`^YS?U|QhcJJAx0*3Fe&*AB-ES{n_YuK z*^Yww@)i6Zl>IeW2hzChSGvO6c({Xa^&0y)#31&zP%X{Q%}n{{k|4YEbeHEp`(bzQ za0us1g$E*uwf_YrpLWsF4jmnGhKt0hX%Zxo{d$*Z!7|zP5fP@!CJjb?KLT4*%bI;* z`hm+$rSq!RN-Opqwm^(E7lH)Xpy4QdjHr&OG=Demw!zew6HsS{bv>SV?%tSjm1?{! zoto1-jz{DB@>DWdk<$qsXs67&`#Az5;$#AdH2w>`)^lbHwWiy6oFG6HsAh;Xjz?xL z^I6A_j$bfF<6!hxi9kEe^AUbcC=Tu!C|$2_z1!>K>w}0v%K1I8@7vLj&X3@i@|n<> z$hS?6HF7#9{K%?{#Y8s-cln>b_DPuL6jf_Zx4xnBeQyqlShg4EPk zCrj@3w66wB{8Q_;d9QjLJl)LsBuL7U5v5>TCfkDz6uf@^xVme>9kE9{9=I5McN(eT z`QySQ*}W!ZZt#1U%+`E0t7fvB(Q5ad+kG&Q>uL&59%x-8#%hbti+?xT}1LGK6$C*VBQs%^T=i{Mfhto`&q%ES5LCYnfF zz~KnP6g6$-Zhp2u^d5RUcYO=aRV|wVCtIAmUsbd9U#Q)tQq@!u##kH>OzWTxu&yg+skB)3aBgSxsz_ndDrjU~XxdBXjxWBCgKmagFyMZq6mqT)tDxog$)HYGnw{Z>(1+{au)w+o(8hp%U|CsIhs^!!-V>(eJ#7_mq~lU6^tC%|{ICh`9Ld)I@yO_&4@TS7NCx2vnGDqOUu zR&&tXA4Vnta+9fnbdHiu-qo zchD4Ssobz}S2b&)@D3>*W?kLaxDg`)#ngKLT_rdQVv9!Z-wYYIwIA}!)#=72CJd`J zHR|li{SnaMi76<8n!RqHzsAN6)+{!it}wyC##RF07KD?!yK~3Al@t|I=tTjgg0iY= zjixOt?)6^fpzCrV_NUAG-k9X%-g2Yv1YS30FgtL)H@?#A)|o;!WokM@=j~Hs7lf*Y zv&2{o+5!ep#cBr%3U{w2p>Zc?qs7s8kGD_}P`{?^=~k*F2+^`)Qyz>EX7zBdd{8y$8GY< z6#!iSe^kA2aBL1HbJ&`W7pO?5@g|OqDFfnwSx_tU7QQMTW`7Zy{{1_WH}HgCMA#TH zLhqO(`7RPFF$K*RK_fpXu3DbZvW08u>+7WO>#F;eT?9ei^u((}Jn}K@O?Y$oX zsKmX_VWLXO>rPHNMEKAvB_l}h*d#|)gAJJd9E9rRNHE{%M${ddZZKEdx;O0*P*Fi+ z(_jq*G9rbHxx(o2094%cw*~6GCL;P8Dg}WSHyeC=lz2Li7z6||o}Rq4szpn~VniYt z^77y`?~E5RYEpn$(Nq73*mpHYI*usa zCiil~P9)$YN@hm^ZxOUT@$eKC#{K-+`qY7cKCadoo-`yWDEMx+hTvEI%%3s?ukFcF z>;@Mz;3>5exP-NtvmUR&fLQ7$3 ze54<6Wx!(NVq=pBqowO_4z!zB6Cx9(2^kwBPEY4j)6f8#jik0VW_0vS(8&J=Aoo`P z?x`l87Y#ZT)YNf5NpJO7FY3A9iioTS1j3Q@GUKuDEhm~03g(`Yv9kJRX4-GobVqJ7 znf4JsTtd$Sg5bX_eZ)#jI|##{PCsm(4eT802zc4PHBK7^eglp86tuM14LYWKQ-XVQ ziLxRhD8j)PCR;g!|HP0-qfO5A)xfh{?3&U6dsY0ePXd&K?L0@%gchlbJL00 z*fK~Tcmh$0OMU^6@c&Xik?1#WX$|QEJ^y_OM4l}RO&&kVLO=mkIiPXa=udXhaH5Ts zjFB`cR9B`Mm#c_;kduLW-%r(8gWmW)!NPG+=+;`KQOW(ZFaI1Ng~DTH;GZ>~PiUp$ z#16gD)GVUYsK^e#=Nt3ebM49`!v-|mXz?zT*P6?s6D|&+q(enKzbnUnsbQO)JLhr4a z{1GU@-FMemBe>ojdw~AE)x}5Mp0WH@91a^q+vaN`c(eom)+L#bzF&>H?M3{?!k@rN zfQ>NbTyWe9X}r#cB`E(t?G||W37VX7ad8omkv~O|QOG30RuOWd{Qz}yTDDChAlC!$ z|4bt;zpzj^cl7wUo9M-t$NNi2fziX=wE%9nz~l8`A$J5`2$=+MD2YNlg+N&dynjZe za6JVu$Nb=@8Q_a8SfoHdelJakUrsI&0x{_-+1IblF>&0c^~k6f>sQCTnVCX~{P(K- zH|AU!8PCFS*UdZYwsXG5#H#@?!z7#5ms>xB_|eo9Rp55o+SRSjVN~YDRIOd9!y~Ea zS$nq_pe>0D3yV(Sw1f8z2oQHaLxlY$7WuKDAPg4v>SQf?l+$hnIX1RBp+6i1li$1^ zde|)c{Tp3R&lbkgat9QfQj&F~&)VR%c7=O@>!K;;My&q%8C^Wk`b*GjXqz|W8=`2j z>Klx;P}N;QC#O`03NCb;&yv}G3r$9v_dJtH+8P=j7kr-qKOWaePPvtk4g(4;{@Dxko__k4&oxz=gt)lAJ;uv@iG~Nw z9(2I0eC9|q>Xv!s_Mu`9|NnZgzNo4h9A!Nh#Wws28M+r3q70 zU&2J+T2}W?e=1#7QF#acyc<&=xGVhMx|4Zjpt`x|nE(ZjQc|)OBGL&d149a%)d(Wu zP;?ANXzQ<4a75p8*CT+Vd3@;O6CNMW^XwVCG{q|ojXI$E+y2ICiA(VW$ZiG}7UBj9 zwfa5_q0_1V3VrlqGBFtkdV6rXek`q{!@R~;pd*-w0T>iXMMaRj+B2J}I^MS-dOPZW ze;fHcA};A23&jcau^8mtmv#y^B6#puf1$tSu}#|l{@v2g?~~tHsyJ8ftF^6f2RysO z&3{+tJ(3PHN#~tsteN^Dz{UGQdUc->Sw59~t)n>W0;5BVf)dWk#-=yo@l!enUYQ14 zTW6e=0|JsRS&ax3NhgnyT~%bqTB!tNX=#c*$^R zXb@*etciNbGjhOlK77m$36hUN=@?xQ+kDB&YOxBLTljRh7Z(_5!0vf#aXY1e_b#Wds!bso=6Q zVx(8S37mGd4$k!vLs??PG%B~FzAiPsFnoL-qK?iuZEO@zPS$@uB7qLhGdjlFEcN;0 z)MuB}&dJH#O5xWfFaEQZPaZR3o5p|rOYoupDOS=+0j3pbt?}`$UETQU&vwlS+qVS; zmOVYxEtb_fmz*Vm8yi>!1tkY5;}a93b9448x8|QeuKy>KS>3(9}J%8XaD z)wKSTy0-~^efX*+b8P@F4NXmXcHYhcinPv7Ol%z=fB_ItjjJ^&dXJWad)2Eg@oq1P z*4N`7MRawUV0fJIGxPH9zOO#JS_yShQ+Y6yl%%=7JFSkd0yFQ8wntFRdR5B2ZUtNH zn*a6|0*8^sOcEd?pGv3QXU_Y7m-Zn7PR;n2mir5-b|SYkRThkxm~4||K_%i({_4N5 zl88nz`$UP1QLCTW@rk|kV3YSf!^j9Klch2Z(7&J@(~vbuzHl5CcI#PQ0duBm1K@#@ z1)!^>gy#8kq)E^CCMtcI%uQoMEKE00;z2O%3z>90fSOn`euGfhI5k0aw5!XdlkX zrJ~Mn>FxF3Fr{^G!fMdTsjW>J8Uj-~Xqa#uV`7xi2?+z}+7nqif$cuJoYcE;i!}k% zIT-~7afE!&kB`1&RaHf0i8;LEZ%k6kMd}&gmjQAq98AHJD+-z3OW{qFlmF4mb$(r^ zJ~ziYaO#usq{S}hjkZQ9v3%#|gq{}XVlN*CfC_n4RS{)nDsacspECgH%E`g9wAu~% zjwD#DO419SGDs+cm~#p(H2de?9&exNtJYTU+FB~0pL0Qt4iIB-2%VfvKjxGSNDB*- z0%HW+^Pj0+xGpXzK*2dTgwM^r_XCrL&Kj>`_U1$WPgE%{n)37|%DD@L7z|{N8TN}~ zgI1L}7j8JMQ5UiyP{X{Jb4CD?=B9i1R#~iqDrf}2as+0Z4^K^XBry5s6|yKPD@Op4 z8846lmD0StbLvg*JPsRklQ#I^i{0GFpD_N_mAH`5UEN``7By|5O*IrvKs!iwvr~ox zMgQ@EjzSto(%c*dpyB)ycKcp>;p?p|6RKEAZS5Gak-&m?SXL{@%Lggu|N8wqYSxx0 zq~CP4a!~d3Y?MW#<})eS_Nl24zy^n6mr`&}MHUrl2cgQCc6{>&9hIY_mD7+zs`7G! zBJH|B%CrPgJ3BafdU~+I^4i*hI;n{}JKWBDoS?ebYj~UYddc4eAl~DB$ZYNHK{?QP zN87oJ;LJ-oUs%AS?zL|X=MT8!;wAqXWHi|5>lrXnP{;(5F8oS7xege$YRklG6HrQ!PDeku&~3S>4mr#bIiaiBfHLjwI;=4_3NCH0n{ zUlXXeu2OF&fy6|v-`Ux3@$f_y6u879Z2PldD@iMAVBcpGR1r@4@qft8$KyJMGQ7#N4<$G@JvUh4*S{e{Vjy$7ON9Yh0!C zw?x+VG>hMl*FK7hD}c%w$lFQsB5y!$F3;_yS@pD>n;RPgVCSR)ogw9`#NcL&)XPJ@ zzVLu-&$whH+Y*W!8nRkgY=bXjG8RV%;Ox_q5!8%WO0Edck#7 zpcwr(cut^Bz+su~(1-LsIc1>U1X04TSPKm>`1u2Wh`6N%z~!>p{l>c!D2!O)><0CL_lGk5&!P7{+W2YMMil6aKkFsGy>zRqTj z3|=H12vzY*#oH{oK$E8}d5R}SrwR6j=;>8khMVX<4Ed6M1&tK=(~p@>X|xWqU&@GJ za%C~~nc03MYr%5rveNdRpmjZZVPcLK=_CiGrw@`xZgM*n{CN2`=-JX?X*YnYX6eN_ zH8l%ds8qbXh{^pCirWeBE!|?9pLKZR$)-QEKS}OTMh{piJBH7x1JS@@e2YL8$vuVr z_|%x@1lSmP0fgCXICOpsmJ-nEsUD|t{v3>>M*zqPl7zT2*F0valI&10>c(U-Vm?v2 zC<1&Wpq2m~iLVrIs7`#s?LVl;?G3~wexj5iq_|EgVdS!*}yiEXW;rAX1k>)+k z1))r4ewP%>{YbA4!+MmqyBtFgIa3a{jNx8WX9S#xVA3}~#~<})aB=h3_vO1Z&vqHH zqvtlSUDw{Ym_k_=6Rl6vYz#nS>Dg;d|UcrSLbpAV7mfk{91 z_E?j80*RFAjj0tC1+px-6XR_5YvTNu3m$w*IbpxbkH@Usa+dO_Hp=E_W(Ejcv^$$F zb%Cqfv&riNt&w8NPX|bmq~mdPM}r_+LjuZ$oyHqB8p6#gnMP7OY2 z{L0_-9L$eQ{Rk!O_;hivvfFIGiYnUCIn=(p@~G(L?#z(x*%0upnZ%q8S5|rA%VF{4 z%4GYlUrnXyDZ`54`+-93@RBr?*-QJ`B3f?x#ah0QqlKn#;Rh~)w^%;jY0f1W;~Tol z8XO$hAfOOdZS}TTNwvFE1pUn$Nnv57+|8M3i=)fSjOuCvH8o0@nHl81WC)I$nwg*9 z9UxmIrrO6){rulrfIpFJR?ha9^OKp1AgpU;VaqX8s3wPs|7WL$NBz?$+mR7_*WF@U zM8vJHvTB2|Y7wnnqB8ow7_BBLoGsjN*y)nM=T{C6{91>;HZ;6yZq@}J7?bV7dv5M9 z>4ev430lUgMN?hBCEBMUjL~kVSgQvIBm13R($acZ409g=s8mtm28sx-^Pprsn%C=rk#m2jQgp%xtV}9F~x{f`f=JA>JpRz?`y_LvrbJmfWiHK;U$#y;Nfpzpb8)#s@l@BFt_ZQoQ-aa zvTx*_2XmPy=~%zTVeyUEyWa%CYcRrtnm950S1-4={Tr+<1-`&|pqYMIQ-1~-Y_6C+ zS7GB$($chZvTN%S1tZ`cAcMCj-LYr8qoE4N{$OP8eZI!iJXxRneH%-s^QmbIzy|-T zx;WgZJJim_fuzg~4bXdZnqa!R)&A5|7X2tkRE3Mu{Yq+kkpossYLZAq;SViU>+mq4 zj~>wuUeeWI{Hu37hKO0gC_>qa3WbHa6{2G5=C5nm*~hkahAr6u8O~cQ^lzH;)k+~m8HMs7*7v@ZIDJaAzUwoXun9%ivKPtJH)|?Sgb0nBTV}J`T3LAx(mKDU;~Sf z$fqgcjoolq1d+6c2R;}_>MXI?fZ`KVsq<+NpbN$7yy=%BI^aM zu6{RU**|MxZr(ON{!ZT9%Bp)|;UH}GaBJ&VMh5VJ)no@5C?S`0hU$dAk-?&@apP4W9+Wzvm17NeD3tDn;X%+y}dGsfJ5r}jVg$}$1{8byj?*- zrgQT;4JlAPOP~uD7KSZq>MopL;P!8qX21QFSzT?#C+BiwH8C_4kd-A2S-ye-KdURp z%#G~=mEr>bE_sio^w*~+cD@x)W#!2V<9;l{W(VhZr#D{0UpmXg-2?|N zt!=g3W$zwcIOYaJD8bz5m2wZ8wW;IxamBNuUw#qk-Ie)47wl2)+l2R)HRC>k>Qn%H1 z+jp$QDPT?km{OF;Ej@!NnypWsyE6nMg6KP&aHCb zUa!0$Wnb1Q{>myZFX<2dG=dAbJa8H~rG2elxzKSOWPek8litwsE(Kr8o&o^F zoRX5CWo1jUy$ucK0({1)GbKAk%ZM!#6IgO`la)4yj+WK+v&neSqG-uLHvB}0%f%O1 z_1tOxp4r(K0s@B)aXdYpojo_U2vW8%v63dm-HB~NE*Y!wPTS4elY|KRsQQ$-0s`2@ zs-xSysoKs3gt-f(X0ODCuGv@+))p7Q4eiV%f3rusmbs*T2I$2f(t+Z5DV!<6AJZ9A z-p&=1*j^nkx1{gR-X4sszf=2W!p0?D4&QBHe_Ly|*60EmOvS3bJyruVm$+PO>yG|7 z90Jy?=?dD!-O`j#KcI{+NZY4ty$&^AD9Y-R=rL-Wc=3`^_%V?hPFEkkw&lNl4dVdS zuy5_gN1uw0I#KeuD;HV(OFt<`*)kYR+Kr^qY=Fm-8v!O!&GM2S`xA>gAwD5bOFgFbzwJM6bm<3 zJT`SU+|T&DaCqKh;c00lC7m}O_xVrFP9L9m=p9{p*me!KrZs1@?(zMQoof-_y%z89 zTkbdO+q@b_Yp(z0K=ld%O4_aO0kFyOeW@qIXx{f<&rhY+;Z5ZA>G-(^~RPFjbo0^Wj6(X z|JadZkxO|tk0}u&Vhw9(!lulb@A&eZYnKT*4Eb=Rv*hd(CKz-)akRASVBjOJpnySB zVD%F9h;^m2e z3Uu_5zJrlZ;0TLh@ebLcQqA6{qwi5tocrFE{N=HSsj_q*Ut^SHQ$(p4|3mVj-g7`? zoFW3{Z*o1)zojnB<2J(P@dc{qDJec*kzC$xRBUpJB>4^LP{v4!1w0&sY%YWRUX^AN z{a0#e-dO#ew$iX@(4}eHAI>%*e<~^lQfMvm2Z%c7)NJacat%mV4v)-8DmlCYBZDz8 z;+FwV025%fX6sY6SI9&Zrc!E&z;>j_@ucw~ux#Ps_Vx94RaiZefU$4IyJKegO2&)w zxXD_zh9gvG#nwf0W$iP$dJ4bv()B^5s@u_p2I#MzxJ&sq$w*OaZp#4x7I(PO7UouP zcsPm&+HV$5an_&+)VQMg?~q`;XM7$@J9{1X5S_?y&HjicY5)p`hsHd+-Vj4m$|bYP zJNr9BZh|Pl_{g3fda`;SqTQQ?rsr2S$C?160GwxZ-HE)l==Q6;$5?1_#*|=oBGa~0 zwy?FUE6CaZnTSH!Xj%j9&#P63N$ykcyL;YxABM#0Yu-03$qOZXk9tN?0asZH@|+9u z1IgR3^2c^v1s=TTs-a$&%>rH@cMh@o?uO;=DQ@knsvr9=b1y~08)G7qe~i$YJ7dO&+8t~^$8_pdvJ5HbZOr06A$%RJv{vzed+WP?Fn;TP1)@l6^phP z%FPdM8Th+hH!&U`Uwl+sMEq#2^MbMQ_8n34NhHIqPNO@E6=V1=Bx<~Ok1Lt~`&Wj?!e$u2u0KVz zlm=O4<%&vb@4Ue^l8?wEnDa=8a{EyEl#SknlcinE5 zXU)s*NMv}5DkU;20gxX`NnejZ?z7nk_sx)!_jtlwxpnFE5^u&JVxy|e~#et^TOw>JkH!#9cmhf>~j2K4VTvQ%LWN z;N$Z@-HZ~Peve-@_5e0f93AIa+0vi1mh#P{s;b7TZ*t|w6H&-37zTrlO;camfQ{7V zGO0R0zBaeE0vKw-dR_*NG4eF&_wr|er!;40zSucu&X1rBO}8-{~Ezh8rwoCM}c>6ntR;&2bKv8GKbujEdy zJAx@QGxb5TI#_a(bD7-$RX5E~BYb*gSO3F&Uu=+Lx z3WX}>Y-SI))K6^b>8W=FWPp+x279hk4sbJHRYo-<{v&A?LNp+G`p6TfGzlHqe`lu# z1j0VO|LHAdKYaf&PJ>^u(Emfo9PqkLDChct@!H@T{^tCpfw=Ueo>N2bq;30Pcjy}+ z6DEP=>qT?5{=tVSUahmej5MqFgFbr|cNsjUZ?JG31!oJ!$CXr+#Gqxm*xHemHjt99 zlLB{1kaUmVz4e1oz1FEWEGk;9;dOH?{KK4~#$J-M$y!S7}4>TQpur3lZ-E#(MRv(0HP zPehr$SlU^U_GtKO_fi<<3ixV$Dco2(IxjTDB9$hG0stlLTQL-JuKf>M=+SnLWo8p$ zJ+N2TDaUNUnOon5L`T^LfVqrk#n{-$PjjqD0=6Q;1i9s^olwB!Bovo<&S;)T=4g>Z zpPZ)o7T|>D0F)GsHupU`i%+0rYARnFz@559I)jxh5c_e0({d(vpo8K>_jEjr(Mk3e z)*7BrN%qoS1D$T#5Asv_Mu|{k0`m1(V4ceCJkVYG(pozdj`9C;&sg7sCI5ze2!QRp zG{9^Uz(QfJ4dxI?faxrmRG(++B6Yv=HN;q(Tbd5<^iMoGQ)EB?U+n!=R9wN<1&l%r zNwARM4nab2_Ye|Xg1ZHGcMBGRySs?H3f_1+y(f4AtzV}eSe-`7DN&^vS$zGDg9_H!c zlgMg_12Dp0GicE*@Zb5xOP}R~(-f260vKZ06=7U+Bt^t`E69J-JOrN#D7=H@YiSKF5*L+U+z|^7d17Hp=;fkmn%VI`egUV zOoq~g!IjbEEO{Yo&LCrTqhwYul*siaWM2Xx0L1+{-vYgW%FEB(aG(+6qWyuv)wOdu z16yzgoB)6qCezT9OBg9kl&Bz41Q!EaN;EN>8+kC4=wDTwa52>)-0Aupg-BtQ6~{rOE~WU2&^WWX6sA6NneW!E%o1nj?407OHh7r^8q$(y?s zn-D_zBl|Ww&f!gV-`B==>mGW8Z@E;)#^%DZ@8npd5A?1g;0Z(r3?DN)LkPH!o5Gcg zl~@3Q0rM?M$dR%p^eQ6B<%NhFPm~;Ug2&XmyfA!0F&Be;K<*O22Fi@THK^ZYIb{`v zLQ7f}?%xpN1jgs%%lD!fos|jZ=o7S$tqo#+?GnDE`mli*lr_4T1yS)laUqWWj}JhH zkkN@k3cOSh0iWf4yvU~x>c|;80o{kK&#O*A+(&U#qXWYQTtGFo{~Y;@9MEgXa#BDa z&_22YcYZTUQUbxU8$3uZx@7E?`;?w-EWn=MV&Q=#NhGi*kXsH1rxF}+3qJpu-$;8j z$P$jhj2Fs#zG?wCP4E3VAFB*zGk1kCs9g~z#S_ITtJ;aeLaC>x*EzdZ?tVXE>dw0a zP6F;7YY*%4C^$oV4VD-Ze$4@?=l6HC(?_dw90Ki2Lt7!343Y$FF;>{cx|a{EAOD&H z%KzrV(Fj$vGvF(%`;ylAu-F9%(?}>6tr>d%Jx_eyT%rEDTRc6YO+qtVAOy>U)=>?G zJwLQk_MLywo?6r561PL`tpS&Z8GhPf$&#ZTPeEomZg$^n0Y2`}k`@dq1h*=+A>4r^ zNlH^F9yrPyS`{t>VbBBXjR`{+;+BvKOnrTQ->=g|-Yb2d8M3+a6R50X`d!PzVL;(| z_mUM)9W($99ippC%^g@2o2qtr!uL+`^>~_mmLPArmWkPU^f3-UXlVlVn&^Kb|8E!x{I1L(kUoID zYVMi-7Y>{RkXHWp6h-j+|5rTlL}&iB(OXw{EW@qpcv{woIBz*M_VzR)1SCJ3 zS{NG*c%jjkGHNB7h4`x>{Z%(YN-=P z{3I6l$LRFSsBanz1WfV8g#T;BcaeWA6y7w_JTtOFsPS~(kyD1Gc+S8V6o`+E5q=1% zr&8;P{I3)7`fiHWG`9da^nx{}k(g<5}Z! znSVTdjN1k8z>mBBZ#L4qiC5#TG9hk59lf_rR~GWAcD1wnkHzGo^J6uI1>fh>VWGvdwrb}aXN}PZw1Xkg|Cw2TvMrd; z@Ac_~5iO3>wW#}Z_XbTbMkW;X;scjd-^UNMt?DCfYqEZR2u^A(SFl(L$uKIC90=~f zN6MGkW50{HJNQe8Th9z?2dq4)T34ZaVkZ)5%#;ou+uoB#<83t>CphBl#6dY%9A^R9FD&MAx==UB}M%q_@4zYl`QF z{BW}agAQg4?jcsgy}cvBh1-&kikG({(W$O6ciG=0TXn}((`P0}2QP`~b}JUAI{jN0 zorb<0EEuzTXX)sf*~xB=80;#W{U+u~$l!;EXyzTOFqzy|B-p?V9%H#vgR`jZaYBr% zY+XKd5hqrW+zafhGzLJ9JfgeK-NqDW$_=`uwcIxO*gq}14p$(&MYFM1#?yKDBBRlY z?E&*2+R@!-e46p!IPW}V&s%ZC)KNz>%y>6$ez&i=KaRbfUzqo*7~N_54kZo&)ucK#g!-Fgcxu@RUdY{iF}3Y%Sa z*DJS2(*=2O^4}Epr6La2`~JVzP?I9FJx7nzFa@p+Y`<9eXo4pcWtQyc#8ix+G_%jS&IvC$OBDy?fXLN9lKzu$#fQFOO zdIQJBZ@T@~uxB?yAVo#TFBkN+3OyCR#{c0P$M*_3RD8pAJzg;u2;rp7E~Ty zSd`g;e@O3b933i3X!~h1Sy%4x()uzmo?FB0bEQ^wET(WX~4+k{Vl>Q02vVIpVwSPc` zM*G+gImi5s14!S`I>aVddkZNGOLN`M_2Q=HRe$MHK|@=14>F-{@q8ZdBDB zLJ5UY^EWdJ3yeN%c=3AhmX%lQPEM{Bsg-#r6E&4Az|0x#%dFIqOAd$6h$pdQ#lLw< zlZHv7Ua2il429BdLf$cx(08bn0N3~T)Ra{XWh>v`512?;4&*J)cr<@x=JZy>o+~q& z{>I^!W6x1YblUCl(b*pUq=Cy+AYN1rK}L4A?@pa)N7k3((h=`2p?8F|?GrP;|Jv`5 zQI1J(M`hKL&i+h(l)KbNXW~rZ6F8#EP?mu?$pl0aLN8YFSA`}c9taj=g#$8umoZ2Q zW+VHn@F~Z1fi&6Up%9~pvB>lD>O`old>0R#S4OzMT$Mg=O4!-k>!6lTjojTU!IhBk ztFadU`8wJ032g6T)?vzlK)SEJb0HNBes<1GRuUN(7&ZZcbpN6K50P$b&aFS^Hj4>@ zf4<8ms7uOf(PZAcV&IHpDnvx4NU7-mIk!{M(hzh@_SVw%j=_rASl>3kH%~2Tsqqfk zG}qwM_>D7(9jc_qj|I;6(?asE|KRrv0TXA>>OO6p11h%cg2>}W$JCj{UA?K4`iGR~ zoVo>`|BPqAX&BsBYWd4L##%q06f)Oyl>N#1rRC}2$SRE_eDxgx#y4nIPJ3qf)C?sV zf-|CGp15JdsFO47Y6270irjeip&;7HC#d@rHoiWuKA$x;M|yLfUtSV;w%N(q$oZCu zlb|@YW`R3Vk`nb$yc0lq@QAq!zJLQ8iJ3DW`(5=5lHGsqBz{%(9uF7eJ>tEmfhJYXL=LhW~GKR*Vvyn_q zH~-xB=Tbr{gUJO3HG@J!lgj>mS8{I*voLdHGMq=ODPHbIBW5s|FACgISG$HBlzx|0 z`=->75$9DI){Zn**U(sI)2H++j4-6Ik;N3z-?s8p_3m1{N0aGoaq2HndVn8q zt~aiz*D%TDBJz=#_Y#-ha+tzWl*~gLtCOlrR!gIALB{>xbZj6vyN=1$mRGywp0BWV zJLGd+vnZp!)Nt4M(d~7R&gK&Y$Gf+}~ ziS#s!`Ia7uJvWs0Z0CcI))=zo_ck#5Eq}KavU%IF*T)^rR?O6-NkQY{%eN3-Ij4M3 zq@e=F8$w9vCvqvcQUpol(ar@%SD)Ccde{B&6)N%1#(Y|JrNhlsD*m1v>QDE!Z0FUX zU7;$NA}QckXCY%)GEp3|$(s%uob)hiQsG6!9e zjZyAcrbC#mTEyF0v?*AfeTx5oFx@>72{VJ?qHL0Yi4zB>>g(I)yoSK zhQ^2^{;NO?%#Gu-6P?RE5BHPlXRoNbbo2_hV*{4AR1EoPA*H=jOSmFNB5BP~Hs+|x zJ~5u2k%1ZvoIM$xKLX$m2D~25aV>7xYf9$7t=}|DHe0&Km+;`;qRFc&bzjjAF0G+b z5Uu+{_;U*~6Nw>oMl(GWK3|?&J2F%ZCK(Yrd8hx;=PM~g)fRb8&#TeQm4h4bxXLOk`frt@#0*hTzx|Fz8_ z^Dh}3pXgw6Afeu!?b^~m4s6n6(?PKmeb@p>hd; zxjd9w{Qy`J7DNa}*!DZnW;*yV8r*EfFE#bh;&YF+&3)1KF|xEY7&E}HoNELd@D8=-9D(EcXFq_qO%cI97DjM*W17cpbn+3 z9B;23ve;a#Fo^GGhbzICY1e*RD<$N>6dX%dB$8WDtOOXq`inXbt~tIC;Qz8R-alOJ zHrv1)Ni!1$wY~f1@`2ZB2Fl6J17gNdgTDZa%{C4w_`5s!Wz@$RA!T@q(WAkh;SUT1a4^@FVs57gk08^ zYs>7)$oH#AUT66Kp&zV4i|naahG8bK<7O1;kWAt}1A zZ;YPMf`9l<=3H8dut%zgM($KuW0OtDz;^?t1 z@OXsHB=7_Aqh@Pdv4P9dh3L!_NH5In8;)%2gT)<{m@*V(H51ABfe4^oU~<0o3?BaT zN<+YR=GOcT1D-YpTQMR!a^Q+qI5IkIz|N^Pthg8j0Ksi~w~ZkVB;xvq^vxW|ScaMY zM8!eQzO)gr;~hr(;~TxBXb{$K9y*KE>k>om0}>haSb3%o*A_0lI+okRss$cGN*dC3 zGBGrVH%?N%q@)nyq@WK)F({u*@vLlYZL~LhOXiAmNdck7@w#NT$sJ*(sTSP`n+mug zVUu>GS181vmBdlgn@&*>9P`HWtRMmP1AqvO;Q9DpHPcEKboD4n9brH$S?k`}JD_+i zW93{JK6h&w*xm_?qK5{_eWVdD*j$a$^9x6zSer(yl1{R$u{ES>^Zk3gG~)S4~d zgHOdzUNf(F6S-ZBZa3es)$;Pb{>hho39Fqs%%^Bg0pNZ4areEsxdo2LoHcM_4n5K` zI>Xr<$5&DeW&4F}MYkp_GOd@?fbURPN|OEf&UwjihaZ%6d@mxQ!sW$xDc}^~umV`a zm@(U+%h@XsR~M9yvP$xZsIW!ueD68aG(RV|6c3 zm13hMndD+9?Lc8-<0&0M3W3VQkQ!L5q`xl%|_07U%Qh zjK57uz-1)wR#MsNKuCQ$eVjM9+(2Rvgz_JAGiJ{FQ*NrTPRcaTBaByF-vFUmO*8T0 zf%3!QL6e-XEAvl|wt5qGk=&0L^Ph$;*{JTcSaJ1zjtY+1r#>A9uZW2S$&Wji}( zc)RNcL>zfa{&1GYAQZC3qen^5m~JMdz6aQubZ$h7g>$hn4FOOK>Gy3<&_sbQ#wB`>F89uwJED!n+X> z2KTVOoa3=m4r_bI%}8k4c5nRv4!b9!y7FNcM_a({qXPnEbjNfo4-GBvn8Bcutd>}Q zTo;>w`TDYvWww=q6&^IX?zW=02zoZ;YPifC>eqJyj#~tttm$l59ze{%5EP@erY&%F zjd*Sm&`MSNu<_M5S?7J==SFC{`nm%f=3i~|x;|Iqp>wMx$Y`m-NKab^1UoxVPDIf~ zs#f#yEhWmBWDO5Y3<7!Z1uy{OE(5|ME}H`mP=6%Hr=JrH@D2~5X^zBl zNNqKuVU=I>N)d<&OczK3S)h*xm5GxyDL|_!*`m;i=}{oK2wGbr*#%h0ZCdm5(CN6) z;99vTZRr*GW*&?DV-=+EmYXLW3<@g_o7azkPD05zNer^Vv%5$@R{HeI@j2)wU^5}Y zeDarxI_Qg?{A&iUi+5ltzQN^-2-m&|!sXEJ*)buXZRAP>LFtJIkOzdF{FAtZJ6_M1 zaa>@oaOp-ZX*saX8%hERw)Ns(0sY(gC7?3Bl|mV6I-8T{N*)?z@+~O& zW3U;cYp!m0QBsS{=(M$9Tvan&?!sb~`U`A9X!i2#0I0tHre>fqCOG84=$`K8aw0vV zf;QDgIYb{|^QWPoy}2+L&K}~mAClMP7gATIw1tv$Fpk+)9(H24=uF+AOt18ra7gO! zB($?~)L8e%1ei?KMn*fn0U|>0iYq9@>;@uSKJ|<{VYywW7Ns^zoS1T`K@VMgx!uw- z{dx1lVdB0@ZSumSCpoA~k&>u|J!C1{T-s(g7pLADf&Ejv+c_AVp?{1M>vT)vmO8(*H7N{F{IXs+!XH0wtXu(LsQW<u!RO{b%c8f-=l)jUH0A~ROuULE^04ECzXN))yfPdsD? z2(Pc|k33iA>s!Sb3rTq!?!_PgclXQm9ToWIvb1~3Wdm^QiE2 z?3pFL&KpjkK>%C~lol{ko5UP^;aLgcY)97om4{E_(^%2H4JL8RF_+Z&(9i38cc%5; zZnZ`=tgX0b$fdkzR&ZxS#lSg?0fmmk5FLQ%wQ~Hl?uC(PlS)d51;T3TT0h2tZ&rGm znAal6NWqM)R+@_`#Yeh~PQ|=jCqLDSw*l)cvtG6h3XhkwZF=J-(n!C6fJi)wz!)xd zdUo=}|A8#x_wCnd+aMKg4C7BfF`->TT~8^(R6-z(eN)z)vG^QREt!!eSNJ8s z^}Y4U5fVN=8;Ji1KtPOg%6oPUt2i*%uEh5UzUJZKpe4SYXz{ zgh`hQ5R-)9VQ#uNMS-7gT~UDE5`&eN(Wyhv@#6=?l{b$!54D*}knK`?RI0tF3rGcwv1O%X6RK;oOeIarAl-!$PvlJ<;aa#d>bYmMldv(U7zU>Ok6#F!PK0lkAd7#|IIzZ`PRft zYi?FfkWcovkd*QJ9EyCN>tt)4fyz zP-*%w;17UQuKyUOkhL!Dpo^b^Zh;~iKaw{1L^T1x{*BM~Z(hxjQUsN-vvUE(iNUVc z9JoB-*Tqi<8eZf)Ik|y;aP&HTPE%dS&BL?fqb(y3k7ifr(eF;%Hf>*iYxkzplT>ry z5AzVDPHHUlZ(qvSKOBrfmZIJfU?H|;=6o`PhGkJVS+A&1D(yMDJ-jw%#p88ftUmw; z0~|GQa`Bu3PYFah;nQIS)Po@kssq05Vvkz+RvV#4`0gAXV-B6da!@?O0`!rn8loIf zEp5UA*sNaL zQL%h#_Ou`SF$XL*kQHcp9L(pvJLUU|7MjsH>h0sRz;Lrf8`L3z)+BT`idfRTAr4Dz zMaq9wY06qNP5hxcG>PbeKedNR^C6xlwde7ti(y{PM2EUaBRJ(Sbjjpgsen86wWcB= zkg;S6)2|;v7-&fPH4&7GoDYJt1KT+$ssmXpa6Jl7jeQeH_bYsSe4tJPz}1KP1H$sX zb>fqQ(Z2TbHO`v@!YWqi2xrYu_tM-v;X#g`YA^h60Ik+dShBe4IV;RI`1!pyc%CSy z5piAI`;`*Cqqyfwmbdylhl~jfF*3gjCh8l~UD1pWs;Q|5UCbTx?f#C<+HO3bVKUvb zzA%^G{=81Q4Kh_~JSg&|PlbAOdyv#jbu4Zt}|kIh$;`JwO?m9-n)w<|qUONmc`7EJ3AKU*#6N#`QNYVRS# z$;qX%0(HFDp0QXTWI78&Ea&fKC_?~>f%MeS=?%Mj4N!n72OyuBXf!+)wz|TD4S-Su zwB(-f^iR*N)t(GT6F=Xc(O*5Lj&jP0syc_mGz>YsSWL<3xN}Y2C-R5_`pHe4(u2(e>~5>Y z3GHjIV_IEe#IX)w^}Kp;JbdqV|8mQS+uhVFF8l$=eubth&E%7TQ#vuIo0`@d zIK!t@ZIz%;=fef*D*~wz9>pu{RxiLnd^)8MU}r~*(F-Pjt+I;GC$0K-S7?9|c4a@* zm_tQuI5N_=uTdLNyWKi!qA|G(GDSV8^7#hUQx4P6fanlH;k1?mgFG#sw7E;o(CA8X zG_Cv10@wMp5i4Ji^*YN>?zS9pnlpMMf=P@!c!kiAj@npX6Wa`{9B~t9zIlbg!~6?m z3(}Hc%uvty!KcLra=v*QJVb6(Ze)6$Gz@)R!-5epTis=Tl-5Lwb!7}S!~t}Z9+8YLZ;oIVr7{9dwcTmDW~-sjz@CuFCO>q2oGf*)qy zx!XM3N#j4qg1qlBZiTEbNNp;UPZf*B;!d87~DL3y7}s7&lA{__~IP3 z4LHVqq25tra~fWy!TeHBp|$cKP)RqT-Zwq^a-wq{dzQ3uD_c<;29uz)3XNTRu^6O; zP=aeKZ2IPmtU~a{!$I5xVeqF5@;(?tR>twFqRi=#n*cNL%a(4FydF+&$(aM}KAq2~ ztD7Lr_f6K04nIalwqfq9aFw&kJik*1P{u&Nx%A0j<)jP5@O5)mH5n_;NoS@ZbE zJdL}}PUDDTq9ieJUm}*1e`dUU-{?%I4FBzuju5=8;LG~oh*@W3qVdZTA4&OgB9`42 z%x@o5R4UAohuo&DmLYvGeWUFZE<3~RL9W)Mu7Z0A4kLHbT*ceK3>HB%)B^9AWnZDb zzJHxmZJ401H#=zY6jOJ`)B2gD&JCns&-L^4NfDnVx32UpYold;r#Aj$)mA9P({#UJ zG8AMf{p%(CUs|(&;sfnH%gFL9m_O)yY<{e$w%l7w6+)T{Fam=`ySgS5?7TF7oEt$S zS15N7U8oVkKVDdIb<_*cpLAxS%)<&NO$}wPe=5G7!C)`KW@v%E%Xqv4;Vr5p2TVUB z_lsM(r__|CP36YO0T_|4iN)}-n6LGv$2V&B$^!)H?b#C=#*SDz@U#X&FlYA5Xamk7CeHv?NG4ieW^3hOGw@wR;_n>&+ zKgPJ9Tp%BCTDM-kyf((JZSmGhP)(>Xp0<5w`%+9!&-PbBA={GqIc0C=EMx^gyoHaI^Owt{$OtBm-BQe< z(nMgT+*aJ0szN)Rrjd_P{^FteJe-#edE|l!jI+M*MC|L=&30J$ILUj8ST?AgJ*GO^ z>vy4a$^I1SgQPkc2=v}gah01>Xz7rEZvu9^U*F;OCBYwO3NGRDo1nun3@5kez2~_a zF-k)7;UNTr1OUu5F-!9z`%KkUrk6`7@MYad-yh zHLacbesOgYmXnpTPXoen|5d&H&ZdNo7E&eleef?=Tv`F(=#?qgHn-boU#ID{O9byu z=d&~;_(#1izdep~d8L!`aXPH>TJc}-v!hOf8hS&ZdJm6$>?-sv z@q5Gic03ak;rIcTu4|&_9k0y;EULn03$;fQzr<;OgCWf5K_ZxmjU}@oD@l1KVH#>-Q+lx*Hm{+E-Dn>Kh49_NZTz$03Gh0 zg2n024EOzd&oQ|3ap14BLA#wON{-(Jw14XNS3@Zm;%f2G=E~HX^gM88R(i{P*I_yu z9QtgokVI{hR1;5Cc3#D=(ru5Cld*{6v=(823*eK`B1e*JaXYHIJA)(Ie)qVSFmK|Ir z|5po88}4N29^#z|pXzF_|IhiJgt$G^yKC{^7Fn!#!u>TZAic@piT5tgp~gE7bK_+s z+wT$%hE=!1hC^h)x;n!h_uUJ^3p+4z5iC}3!3=OpSv?n7>7HA{P;Cz35J*P)tfd4G z)&!k+qy(tTH@gXVxA|_&OM$o;H@7|)m$aEXDltjO`m)V%;FSZ~>aC2YDNFcxf=TDK z%Qe=vr21zUv6mjd&T>W~h>GLtQwtabf|_L84^a^Q6c+RjkHr}o%5=_82W4*D+Sy;4 zkd1UP>PTwC9em+1H)go7>3)tJl1$43&cgKm z+L96fw~w)-<;eo%RulZlK5gVOVVh8wm5o)?@Yv7~dV39OENlZFYRT9Chel|3nZplw$1y8?V#4%nVk`@tuFdw41YXhnmdJ1v!~0XZ z!8Go4kb`tRI}(4C)fIgKuPkGM~<>j@8tFr;Byk=a91;NIDqQ|nml*5j= zIy1^WkoM=joAJ>q?GChhB#FZc>XAyN+!5TU)OqiDliu6Hy>YWghsIkNUQ}Hx#42Ns z)BXmBQq45=8Q4BOC{-J-RJT_cv)?e0YzO&snJ=I!0r-gwLDS)u1CS23dT>GGZQQ9_UAp6fi{HArb{=nD!A7R1Q zLs1Kx)<-xr1@ZSY!`s!)lHtAFqaNc+Qif2|J(_cg>)L+AInHTX1>P%;+?rrxtnDom}9mu#^s#3=$A zXg?U-l2jYD7X1qP?XrFCOHuJ!xt|L?*CG^%m+?%PSqJ-fN?)iW;J*od zQ#HQ5K*d=stF9@cY0(^3V|*|kdgXMQtNmK~8EXfI?;>G$K|nV1_lZTNvE zVcVMJc4a10lVHo9tgKw-<>7KpUBUfCgX_?4!nZ~L?(PrKP2E*EqcRr{xWy)5ccnzX%)t_(5|K4vJyw|ZX za}c?#FRCN(*9dHmrh6Oc2TU(AHm(z9B~ZYXFD?ZnxA&}|m^-O+u%k+m%AMu)gp%D9Yd~hCx0dM6!tQ)NOF#`V6$eY} z(4BY!HFJS4RVq}y zIx2NJn=7B4RV~*$&=Quh;L2|LN@h}C8X^^{e&>wzRxr78+woJ;po6cWX-rRpa&k4Dc>{LLZm{}22G}vo~Z!e9>PIn^tdhH>^N*6 zw$B|XUQ7l;M9D8I9jLLdCd+knQsJW|mM{lcgcFHni>!2RmcwUC14|Df%CX9JYbu;; z`Fbif4!VT~M_nAdlwl>8>7Qpt|CP;^=T}3d$Rc;ng3ALVr(1WVL6iKU6I9kCL9_X) zxIu#CENJhC#VNPRDlaQ7ZP#&!VdDCb_FE|0MYbHK&BxuEdAvn5y zYZCO8Y|Os^oY6TO zxOZMKqhGH~(0%gz#f@uP-BScxFGuW<`L=O*(BU>At z;^Vd#2P6&4l+258&kR~_S7E{a)nTGZiOdTPXll*}osd9Yx0gS?hP;&UBNYI4eMEcw z^K$%A1VEP~QPZ21ta}S2j7R*d7tU*#qmDQSZtZhR<=q<0WRE;IZ>IdT*=t$#{`o!3 z^HM!p%tvX}`h_;L$!jGY|5PVGZ6)Dk{hplmc{5$G*Yd%BpOQWZ*tq~KJm?2x)okfP z&|-D=;Q@*crsjXIYq!&IH4-lV-!I3X{}BQwhW+ogdDJIh>b<$V`ye&6=ySBvr}}^I zfFXnT`Vsm*jG{im6VYvdxiRTkQyMU{C0TNF*7(0K1_7v*sXN=4o`a8)>oDIB5^A*2%KI&N-b&PT}>gqc}mNFw~ zRnF&b3@<}d+4p6F|2pOuY2MJH4qt?%Gl^TR^)@?J1gg^d+xv%v(@Kxs5BUWI47$#cN z;riWM$Kr+3d%8$*#NGFjmo2GBoLm+X3d)n##=SO0=AS^^KjxbvwNlX0A!&wwU-5E6 zHRltrEgRP0#S(11ICRzPu!3H0tZhuM+ock?g$~A;3riB6tr%NYeob%f--?!XT_8+3 zNI1KzbNkD}b%D1lHlr@}uz*)6@R(=>k!*x~Ekmw&uI`hi)q8 zUCc*JQZxv67A3TIZeXXyKhq}R7iIbtj#Wft)U_js9Hc z=}*gTW|$CA5H6!B#n*e0Ldi!1E7`j%BsGh$F@3BT$UXcUgeQH-6RaJ9<|)Wu=fVwJ zxbbjjJG#9sx!ruQ>(UCM%27V%n>o43hW#7<*L+lSmr70d5i%Yqs==EA+eQh z;QU;5<)faSmaPnqmvi5`v@AVCZmewh*pesf>=&Cf>>mggL{%2?d`L*@!@Ez*`SRI( z65KZLAp+#|%wkqF=V&r`bXa+m{ewYC;i+q7;w+XtIBcR^Dx}igGZ4 zmATsb1(9G=P|KaBdpCBTqAcv7*ygOdhi;ZAzRfM3-kVapc1EdBnw=1$(1I4SCx1-fEMlS?O z*!WWyL)^a*A(O4!zv;>Ad17498Qb4LfnoR;Kg`FoS4B?86kQmPX$`Z@e8MA?V@0LK zkU`RW*wQeVNhHKwP`Zjc70VX$K331d=-U?sW-E?8B(Xsd= zO0RTnei%0$PUg)Uw(v{<3^cwztDZWyKb(?XAO=+fF@+|8zpbs*H?ymIgnMevo!v_# z+XY!$Mr{$2T=%mPEbW)uRZT62rwsDCKWnn5SOQ47OXLG-q$ncdNoPmD#!&;`{i5tg z#dq6S@=9{vk>#Y_FLMDskXO~}jtxFhQA?i4b;`#QAW1vmQ>oB>Dpl}Z2rGYp4ry>= zm1vs(ox&T^nyx1B5qgfaM+9d~kq{py65-YihwUT+$_lI1T7^}~nXuREJn0Y~rCaRx zw@YKWAx7_QuVaLnmjN@dz;Xhh7R2En!`j__L*CMSJU^g1*%Q-QO>h6w{&lcb>lXR2 zv6M-;9cTCsI|j%SKGDhKEriYI70uY&??~fmt43UPr7@8G<&r&Gs{W+-{iE1VIY4}K z(wP0S@axB^K8JVXvq%X$LU_%RY#(Rc>>Bo_Z)PN^NnqkX{4I*!ytSRZ&(f|$ z0KTcrtH4Fz#fM4oPyrAr79vJU(iQ&4uAG;Z`rXg79H@T&)?PEYlx*Roex6}uYFdC* z2KJ#=3F2FC;OK#sm6tJ-15>0wNU^#f{zw5d!3tMgq%j)S{>>MTC!O=dL15@Xw!ug{ z>-l^lKkSi-_$|RTBb=IlZqAxHUp0)8&eqPcTU?LO3rphpkszMo&jlQqdFEG@NzxX# zx-%miIf($12dEafF}WD+FQxEH)gBWuW+%9u4fAHb5l=tVa{+)X?5@BJPwJ_GBGWcM zjSQA|#kgIc_)w2P7aI5u3%*1eRSlV;cAhp&hSr*w`f!$7^dW9Pz6RggvB1P626Oag zP+2EAei-Tog{Ho@i4^lYL;iyPA_n=xiEJPExub6g9+O3{U*hA_@+*@-u+XGYp0KvH z8#N8z$c`#6uk2u$#n!|02#u60AfxB?20RJqRzIK_s@8@SM!FDvAsa0k7uA<97Iy-` zy8BaTLBhv`Y4zx+q6WP@Up=|6j@||ZER2^0;d8aSjPi!k6yPeKEMq|P5B+>dRAh=j z&}$Cdmm)+dV&WC#WYq!zI0+o<1512;=ZB2B^D|J(Z@;^Q#PVAHb2R$3sWTZ{EZYkQ zw6^K?U;U>aPb-mWXz8hV_`)4qEax}=(wZXf9hMT-R*u`2Rn=tt&3YC1^$X9+HY|*A z-je{RE+f+|`GmfW7rTQZk2gN@2*WJ;O@{mb`u>pvDu$-b;r_fC{e^db#YZqHWi^## z{LHxOBKSTH*YfhJ5|)PifY9mZZt0j=3E2qJ0EI~-cqGFtT^jI^KwkXUrfhsSPE)4q zcRba-U4vg2!ohU@p)Mx-bL%@X80zYdsQv)Mx5H{3-?Q=fWz6cQ%s{n@xs!X}6N?om zE35SFHf$OAzIC#<1=NLPf0Df_)i?kVEGF6A_5gr_jE65CwY{azm0O_93=`v;mgN32 zxl*8_vffGYC|&HP+g(ANO)K;AVO^CoVI5CDTw9ytOV7<)=4tHK7R$OUV)sc8Y|W;zuuig#<~mV%KAxjL3Fx^Sktsa3 zi33#Gq7Am8ngRz~{oT&e#GK*UWoRV_DRZy^!H)xloK5$f;6yGiuT5rg|0v+L-x4QE zez9jJr$p;%``o{n&%ZsGsSYVDEyxFR?K;zBaBg{ndgNc2&w?Z?=3c3TG6wkpvis(@ zx@bNmtJs^JQ^zmp(}O5)G(JtepEAF4#7}j7vA$|9vYANx$<6CMmeTgquo7U(yDT|W zr@}Ao@`gkrL`7u=b)aZ&AY1T850iY_t2uEAA2maP`g(Uj>dE)=|3eT&7nSMH$*Pi* zDXi8zI0BAm4CvZ$ZtMgU{LDx|*Ntmw_9>qTAU8ACznHxKXJ8w2DxuPNru<4^TxO)o zU}alCG(@_6aXbVj!Z7ijp>v^?5M-F#uZP7y6@TKae zr1itBi%)>aMbG4*ACMfZ0ZrTb5WBzRoFJT-Lf_02iIduaz(5a7Jg_T4;bGR{Em*j9 zF7;&x0ZZ7O9T$LeB4n}O6Xd%BSmGHyd#IyI z^U8OIwp3Kqt*;fp|7+!~{9B%!VY4>AwV~u^`6aXvj)5JSb8rh{RiyhC9uN%4cEvxY zH#I0!dO&5#hP5(BM$>SrDnvgr6s&eFS4z5C7CEYeoi#>}bzM0|y;(|y*Q@>`ViNx- zplYbe$_Heetmr&c>MiPJzh3u}aW>qtE_HmdmlOwZ((b0s#k3G=?da5%n<^iCp3{>H z>nqg$p=%;MS+62}=NSjD*HLHv$%htuBLYtp2^B?WtJlot+64r}sbwWIE0jMU1}W?Ni#LPF9pfPG+#7PtNB z7NC1I_hrez&^xEwlYkp}+VlzP#(}s(T4sg-gg2(G+*lwGo@_*EBjL|u`hV$bGU7Mb z)bnLxX3uKM@o`Ff@B=Q>T4w+Q6}gd>F$nkyBF{9vP?|1?v)o!zaLg zvN95pmLR6~g%Xq@12g2O=*~fRxIi|YeBpPcYhY*Qt*t5BxklKVcy~vxh7$kvVysuz4d4eSYXkrgMXF8Sz}&zebnYwYa=LOO zZP`M*cHRNaVlcx74Qxxg-VZhSniiN@q+*w1^%MJ<^^YS}AS_y++xJv9^8_zzNMG&Z zSa|S1q}A2f8Ftn#aMoXba^oPR{F5wTnMOafoKIKi2=amP!#@ln?V4;=?cdxz3&{P2R^7W2}>XvvsyShTC~6bE-D(N4WjLv^FQ! zSs?2UY{4I>*5r}M_Ab;3mua^let-0Vuz0n#U;*^9)wPX&uwUi7vbs!wbj#D1pKDtQ zW_~Z*=v^r&DKePtf*(TOID7>jrV_(VBJgWw{vjM-VZ4;UfBo#soips@5{KOe4!>nd zSW_ysCVbkXIuIzO0Dr39Tp$k<)=N5kLxHx;OY&$t6@P|O+F%5lYt;LaZrsA4P77R3 z8!teH5u{>4LLe33GX;nXCWc8URQ4OV*Q*N~izk(B>%HQm2FkcsaLDE-{@cr$`4wRL zclMj=2Uce4v{(;UM8IXbH?ATKKiDLKO%^t`D_l+Yd@dUki2zerpQyY5AUcK1*&DF# z<%e~)FSibBg-$Kt*^-AO{y&_3WmHvL6fOz|0v9Eu1SA9{rMpBr1p#U4?rsGE>FyFK zk(6#!TDrTtyX(#KV!Xd^ygTj>5#*e+_Fi*+HRpEh968&Mqw32w5<}Rrz_^|kX$$IT zF=^Kw6T@A-_B1;o{-1$u!_*P#h@*1d?UfPS-Kn{ZaziG!a34WbPN!!Rcws> zD-Ijrf5!95uTG7gQI6Zw5yPF%hV5pcfJMf}2fU@xX(dt&mwb^tAZ8F4R2w#H8bXy+f1gX2$LP+G z+03!Dr)RQq%?IdM1sV;e#mCaq8ubrG2;I%;6E!$pOa3B6Yi!?mS*I(NoySNcvCd0ET|F~gi6x@35VX`g#bQIoF={FKXE#(8va*6RWr zi7lo)vo(js^5P*#sHg(OAt@R3yY9zUNGF!OT_>cc2$B9yamlZbH-TKPr!N4x)|{-P zo3iONxt6QRIl3|cl6xcgl~gh-5KpvDNJ#dHUiN=_yG8y9M^hgPhH78HWfqkqkZgSC zA>WSsY{E0Rh{G!|E94&F;H8kZ8NIO#WQQ_k(-=YkrgEcoLBMCoFz=P_tp4axH&A-pcSPro=q2+Gp`+c@hMVwE^ zeKR#=a#lYTZcQFN2=dbURN#XlSI3<&O4XwWpuyro)h{h@A%U!D-P{dqR|4jA0Wrsv zr4|>KHI5RF5%1K~+;P+#DawkG*!1km`4AtcMxNF{aP7!y0O3nCWfc7E0 z2{Y`Od9^q9iMgi-#Gj^9m>Agqy<FWTB4SsByii%-MD-}@FBd!6X=lR#)7{+LDj-%ktu!NAvrjPVRhk24VdnGP04-G9z+iuEK-PT&-Hfo zgHodCX|e*LA~G?t-0%BUd9uA$KwMmNy8ZX2+bcY!aFaG7Ci}eJWmp!}S{b(nAotv8 znP48#NYXk;M^Dvjmh;~)OeH)__1+@ic9>-yECmJfXWgSuHx!rFwzph>&SZofpMb=f zr67^hCrD>O=WOv;qsGsH3j7ZS;-@VCCkp_-i>v&WS0OigIEdZ2ck-oKW?AtwFr49| zaJrpE&Um1ruYUqq)}d0Uqig7`ke;ch;#HEU(P$-R1zhsO`M%mCyPyu~j_-| zOx8qA$)N2!h$XCz#(){N->SEZ2%3P^Zex;@myV0_`A$Ytl{2rmrA`XhX`6w?o-f2& z5R|0Wi(e2LKSM$gks!a;0u(8Evp4VC34!yv-HTBWISLWcg(iq`6N}4TaTE}ZSSOGm zWreUT%=qo$0LIOVaX;-3Lwc|BJ}M?Ij#|{|a;gce%KQQCJT}Mu_D^r%+ z{qsLlEtedm>A-LAwm#xAvM?py;VREKi@gcCzC2F%3H$+NX0iMnjCiByBh8^UI5{ttMZ+C+N>6f@e-fktErz~mvYdOfs1}XslQv|SCem(n`Q4}wO^QX@Up@M&)eRiJG|9y>fA-YCLOddXN&m!ao|vDK6KqETK$UeeI^DS%}V!-}ul zW&trw+q8On=0^(^Sou! zv-`nB9EekM{YGtwa6-(KBu1uti7Sb!Np*8_<3A_T!ujEQy<`!R*7oH_T|+t(7p>C7 zekmiEVuj_MR)No}**Z9w*>&f}8eG*vJ%}*v_MK4%wNrv~(s)37`K}^o=6vZ^;ySAW zsxh_;l^+!JF`gG2#E_%am z3~YR13gL!{E7W(Zx&fTTGDqimbcyB3w_DebK=J@j*u{0^eTp09L#)(PHYGhmN7m%8 zEKFB*=4e#et!nfWG8bY0E!G?1+48XwCFDo^E=)x2i{zSJm|txDk|VY_zx}W4*Ts#~ zHy#~2+QQ$>LuY=-Rln!NF4pPp?ljX0lgCv2Fo+bVL~&dfY^1tO;_jH$s3S_JQ@aLg zJtFY~?=?n9k2JgHyI)LNe!YW5rN};u>A~gD=fkZT>rY08GEI3t4;pV>X)!f+$@s?h zw%NhS=%|SmHg04nXmFU?uc9QZAGTlykG9LVF~W^eY5 z1U(sBxG8m;OuuxY0Y2f(hT^!zsK+4_V{Jh_$2v6Oz|oXjkT5K`7bY|P-F6)~CQEUHfkCEiwlCSNv#7vYO9+9A&W6YWlp9k@Kl@BwQD>?9TTw$D8UimzU zdcbmiE{0^u>1W1@59AS_h{(oxk_l+0L~m=ANFw@smr*nzzYoMbc|<_m1D3xoQ3O_p zWlC@JR|p6m4#p83_ZXR3`S`|gxu{lV+K;bSt6{VQ`S~!ZHa|CH+ZP0f3{04EIZ9xH z<-#ILwWbKBL6E%RwA)}KH>cKKd=a=!G#X=tdv7#5Y7rop4Xy}CoqNkXv}N10U9bL@ z-ZR=lByvI8zzg+d`Dht&@nrV#lz;~{Z{xE{?vVCcXp z|G|v#gN^?{9Z!1p&!@f`pS`F3x^gazgm@ad%@6t4x#eGWV`a9~KCOKD7!ETpqc&3}A!rDSq^HIOEwY$D zM4Cb9GzlO87d#N4nnZw9PGPoIQ7_~t+hscuNg+^k$B6oIFhbCQ&k|LS9`2*=HJ7Jg zn}MPfj1%I>%ET>VBxIBG1!Ggf^}vDGU1NX$lyYMV_r!8Y?h$>2IQXl7;o(WD4{l;N zz{Ub@pf`n0VM4mpbUb8^NLZEX34LErN*YZCVyjj_#dV?<)GM4rf{3xT40WN*3NmKi zS9sd3R_LSwCe&7nIRSUNKw)YR81};}EUr$BsPxas&@t z{ObU+DKdo~#Zt&4t(3k09#wk-d~rTFZUbD95wkSgJlLB8ssDO$vum-_`LkUk@zDD0 zz{cCN2a02c~XQ*Zu6@$i8x8)(b<0WNlY}m0U6)e>k=;?)xc#LGYTL zNw+_#6OJR0NULm_WZl9n#R`-mc5rlqfCMMjLqE@|%zj6$Ju5hnEmcR8)``h4Y!OTXL*eOP|tUej^vvFp4m) zXJyx^f{Oqb<&Lk$ZAwGRMa}(_E8B2TFbQ1Le;g+VyHhHl>SbeOq!ba&=X{^c-*vqB zZ&L(T5G1&H>^TWn1*%5(S{Wh?nVBCZdb9KO?b028TZHX20BuA3T}kfS3#(|mW!>Z% za@>zs!SD1nJLduCOn9OTz;omEv3%P2q#<=M#{FS%tnVvGWXkNZbP0ztN&QPGLV`1I zaO$*>g;51?3qp|aT~;1JT)e+pfVlRayr!zKsRlO^_{f!K&th@ouxBYRKB_lDVCx=N z3%%!UqTXD51A?!fwNtvzKE%Oh&!;BnQ01)US%9|QY6PWQQ1{AG0N7s%5?Mlw83 z^;?L!!LEMi=x)Iq@+Uuj{+Ne!xYaOTOV{6M2r2F(Le>^$zWzl-a1l!(WS#1^i7LCr z)0q@jA6AfoA(<5kmHF?`R5aq9LcaPn6H7W|3L$r$M_hMUf`)4H=VoHO36+}T0l+7F zX=E#qiJmKa-LT+=iG6=hv(EQ28d*KG&q%!2uw3C=!q^QQ$c~}x!KvKAq))HAcC`QN z8|xE?qwVQmsN9lmV42 zAEogH=q7#>rFEhF?rZ^rRurb7P9-E6A-~iOi${Z-2w} z9Z#zy8DF>Dh>&~%_9jY@A$?O%|5G<3o*G{VLx>W0U0z^-G}DY{<mA)KB!5K}1KE7IsppTH+#}477!}TpSi^?@;bWP=w2BD&I?36KMjWL z%|ZeaV$(V|K|z4dDLCH?RJF?75B^WDKYzK)SufCWa*SGZZ~KbW+Pb_AG!g&%4n~la zQ9WCvC#8n63@g1-V1o9VnduFA%mR9;qB?CV_7I4hJP65}3@<-AR z-+vnr8g4En# zXn%cP`%p~9pMAS%l3UC~hl~A0xxh4ih=%Qa+_xZ=aplc3uPxp`Q;gcw7w&YmBfG0n zw_O=8i}0yA+ISp?ie45p_q9K^lVXXM#4T4USBuI6xBR_ijMkb-mV$_^C<(Z)WeQ^# z6RtBJj$}b2y=`Rys!h|+t)gLEW&qrNR7++qxXL531zJ+V_2|OF$Z#-+;4s!cZsZ%h+`k^}x72tcPpEB|a|_RtYDlZH(x zW|-Ua^*5K)f08uCc4a2Y3!0FOPLI$DLhE-+2mDd8U<-U@w{s~Y%N5*wq>xX-1qzBv z?+Q|qAycknsN*U;NR?Aqp;aW82;YI^uzyC9&xl+OSKxtUu|shyd}`Ht^cXb{vEDim zVKTqrC(rZN zr)a;XW8X(gl&BpNbd_6_15E@7BP;^^7@(iTZlV`?aqr?)g8joLi7Oi+pv7W0cqyx; z0U2qKg&~p;If8fXG2Mw26@K~Y5ildrB7QGvij}RFt8kjPr>U(#WV@wk)?)P+URx!n z<*OJP$e}R3jy7#O%7)hfPV>v5xLPkgqwZa(WR~SgGLY5CzsyU_T##l_s}lfB1Yh#a z)?ey?vjuUDxnFoBF3*oUh?XHV4FlFL1hLNozp}Qiv#Bt##xmP0pH^VrkcP)5P%wnQ z-FXHYERel}p+?f2mqqcKo2Q5Cn7cQ<6Qy2l4^}yV6MN9Gx$_nif|U?a z>+;66V%t2VAwN)A-7OZxlG%E@gAZLBIy;KdxN(aM>F+vk8GkudWQ_i9TO zEgGm!w%M*5Ha~O?9Zsna9+Ruz;KHJ~JP)Gid&^>9|JpH{??wLKFTehOeErh#R02dJvD4&i%0?UxD?C@s9icdX?@78- z@XR8_Ur2iyU;!?8?8)s%t(Ed6C8MCn1`$A@W|1qp0@csm{Dge6txbk`~)1RghY^)XW#z#f%EsIZJwqxopq(HG1eT9Z zK$*7#%?}tYiUZm=XeygHnKrq`tf|NJ4qn>S;3sH-)Zy;WXv2FSY{up-8k6;p>-?A zElDt;!E6Jkqj@I8AN>4gj=s&*N#w-3_n?{l?K(|u$g_ogfF{;d?aUjw5opTGQ>NE9 z)?m>P2hI)Pa8!uGf$bdsKNYg%mON7aBBw1ss|p2Gt%6EEb8$Iv46E}__>Dc)8`AHC z;GVS10qw0`A#P~C8v8jFhe9CSB!NzTyJ>j!0w5tZ*GZzI&C#|u8~9VnpY<*ej*=9M z?Me&)D7<8>K3%PP1-AI_&-7vwybM?NtOnh6JP7o`<#aE!@V{U$Q=FE2FS@);m`qR! zkglqZR8A~-uLLI^6+5nrp4_;ueI6bq6miJ{ZP8|QSu5pr+|=edlKF=QUq~q2A=L4I z>-;(`6ddCfzH3wwmlkQy`6nbUrZ{lO(WPEvn3i9BPR@9hq`dPHBFejYp{j~A)D$oB zTCNpxQ3Br1ZOuz{@AUT4EI}>|2`galH;Q1S+lM0yjbA>?r1>ilw3Q6}$5nOwlC-Y) zE6^o1#vjUdurcIZn6Y&ke9XlEg?W!Qdp1DHBICRTW9oE9G+AJHHS$oXS<{+lV@6i9Y{1qA}kX=v7gEg6L$Brt)O1$r&^h4t6a_l2B|U%ss2Bu_ot z+uibiPa~wvNI~%ejnqp{w+S0sfRkoC7<(B1K(r6&Ah#nLg#6T2;~@%K*kUwCJQom` z=HGJ;*A5sq$P7}GPr=!(`uY}%80tFim-3XD3Ta@QkVmwCc+vs~`#8UH?)yw2@!?8e zwTl_y41{bSqyRu60Ph@j}ezL&$TA!Hz|Z==kvt`|*N5;A}`{MaLiXh%czWxkwzg;_~408N5XL6}J$;jn^4C`_!!bF1YC66}Ij+ zJ_CNBC=nvn*4^owZ^ngBNaRgO9Iy#`^Mun;>(JDfts{*AEav@_(`M@5QIN6y7x)j+ z7q}V+O_6^uTv!h<(EN+HcAk#tIFua~>{-9E>ioKs1Gl zhYwE-&uuGZ8^Y<-WXz~MMm%?guOJ+yUSCo1lAex&jQgILiW}lB_qB(ERstFF$Rdr} zeYzM0MNKh?`$Fz?jB9$p-Y9E19Kzw3&q>{p>&g;i0L?8>L_#@v@w~Z6HQ)^LNY?gt zbKSjKBcWuF7T7z9BE@ohl?qG(?9hOE#0hW@`a{8$ef9~AQbHm^Xy$qT;)Jj;m4Ulg z8XRy)R2r{thJx>%C9(_z9~vZH2&l7!0&j(|P~Xca?6DTP%blzj`cNI-%K917Jp!l? zwj~&|aMVTGvSHw1Qg_iwLmqJ~5MaRHcb~_~|QToMUeN~$@`1-OTla$rRDTLyUJ1h;QsgVmARI}#K>7m9@rJ76gdK(TV31xqUpbe{>x#K!Ki7H4 zHb=GA58_?nXOs!;d&cn3T&y?AM0{IVcl+Y&lHLFIOgHzpq^=MXZC-av21=1_ZOMQw z?NVT;7#!T$s4`5$h9|2*_KHD-u`v)LXC>~typ$o$1)WZ+Y-TWmZc-vBGz9nrH9u8^ zdb*Q*?$FuLDQxnj{4(=Y-eBbCSO55+!=$+E*W5~$HHk7WEq!>>)S%2rccdQ%(G`}`SyRR zN0By8hCs_O!K;KSSI)sqi-*{=sY0f@+@PZ^S+wW0eUq(Yv6PQl=3r&cG>FUIy4`;$ zN75RR7~i_+Z$p<@_6SA?EZw&~C^;lxv!Hb0I)6Lsg$|FH^P*ZR7aZxm{ftIkxK`NK zKK8YR$53ZizYV(3KN=hV7E_!Z?mV2U(0e-*(AwW}hewR4f?>7=4^33DsnZ7*`fO+O z7=@!q?riwdd1U|N!rx!|*#?L)wa_j-zcH`DAn0m;%amtm@pq=!G{ zQGXQswEAP$4MG)JZN%+ybGsp<@64*wJM;V|;>2OQCN-G!ip>*a12PT&HpXX5o!jUR z><$ySOv#AC=v&5`GjTr-O<^X9Q~LBUTVxVuB#_a+%9CY}_&-^IluG`Mwux%>F=uxI(N@vs zHp-H@pyhmlnrOJpA{zF0ci5)K%6IVmLS3+>h@=K0Szgk;B!9(#tNtMAQBh}WPvXC! zgJb>OY@Z>Y_;9nGTDym_M$^)K6L$ptvlo-Fz! zS+DGg;IusQ3nBh}t`|36q01pN;b(2$`|6Dvw3cT=6ZXC=b(*?&_=&Ew-q6U z^AzW>CkJ`F#QuSws9z>k=KlCqn1qb9QU8(>3R^+jby5UmikV#2bMTY!Ra`BUT&!sW zTeJ(mi?mT`@Y>uH3Ggmb4qm^S5b7&qPl`QkSr`Rg{uff@)uaS?>D+KHQS& zIe*9MoFB+c`dTln4x+IB?BrRz|Ac^~yHcBux;Q`p(^714&b%$!U=g&>{?6M8-^se; z`At`jJkeG^x@k7CQ`h6I-D+G{|50v^<+YtCR+Gta4$-5fjRc}A&$(w*hEyO5m)NdQ z!A1I-z5QmacKz|Z%I>?)(I`G5%z@Kw%lD^0MQz<_Y^#IedL#D!z@F;R-pTLQoE9jd}-t*Ai>l7lqrd-WRDoAE# zj)pVXug}6PBOY{gbZ4k}H)IVlBe$_Hc-FYTA%~H+J|V*G#hVSiKX=tHUzpq=drft- zHF-cQ=9EHNY{JLxeo0a9XK(QP(&K3072QkS3$fXf%>&Uw?W*oye2sd#hQVeIcnm!g z&1(d^>vw@E#HGHACCx13l%;ih9X|1 z*bW24mKUTD=pn7`f*TE%pLsncp?%pl-+~@)U(9-c$1KZYOenbb=h_RSP*@8)_tWHH z!~#FKFz;|^U%pa)t+)LaESKAY3p|whS?ar)0Ky!s?J%0pn4@HhKJbh-^ zN`k$AQpU?Y1>mDoUfk$4XdT}ZR`U>-A9M{)WRI*JC9QkC+f3bIPdXL>b>WrcePdAn z-h8_tq0E_%IU!iP;@Qg8uTJ!vF`p(Luf@e8(Y|7X$AMV)6h*t{FIpy@hwQ0o`TWBg z3De!YFY1!>c~{I6z2Pu>g=*48Qu@^rnHy>1Y4!^qLyD-*v8sna{ zgi8HxvAM04-vxcOtd`i)YaOo>D=_}Rv0*1B42#?b^6_AU6RoaP zn)61zwr&(CIm3LuGEzO?Vta$yK0vz^i$#lb_@C5}2h|Se3?XW4a|4LqVfFP_K!q$7 z-812oPZMRk!;xcaDBg)9O&onhVQM=l?E6JWH8m=aHTZ{X+|WqGT1(t7?gyet?d9%@ zwnE zvSw0!u_rCoEoa33Y;d-$palq|6x?2KB;OG7J#d1-92rNX<7n`Hr)o()XN9~VE4mkX zMtMGdyv@_}qex7l(MA){PQvXu0@_0hsP5Rfot-x);|g*m+U{=caZbami|5;7JEbw6B`>5vl1+?AsuJeNc5`a6i@8eU&KvKdb} z8{6ZSNpse`H+{R!*~1wVfE%aV5|*&&X^u|k^O_^8wv^(_nvz<#8rxe@{g^ugiWW7M zbBC4L@7{k1PN;r`C#R9F*H{6&HFS%&!@FP*8i!X3!Y-IjLKxStMAgBurjaSC`VsGv z)cCi3EZj7;aH5Q@4Y&Q{pQyZ^_?^*D>>vt? z($p41TB;c1UH4`sSTn!UVtT#>>cgE0<==}GK zuig*k!4SC%ua1zQ`I^~Ug>?PDf0^Le_xHtCL4a-82CfDeJWf$iK40%$Hz42+ah{jq zY;4mP?fP5))@LfGKeG$`r{28(r~gI^P5;cuO2hBXRRZnbnb8-f0O`?*rR|2+9DlCvrFPpQ00DLm=18R`*k9 z)mYfomP$J`KBIPBK}lW|8JUatvSMY4(TL#sf^tBS`6$%mLac(^!NDRxRObn5L-Z^TDLGH{dcPMhhKJ^itu!e$D#LuF=t4vmxm${_O(E zi;Zc{du)0BzA@E14zOKnM$6sJ!edgq|0NJf$cV4n=+kLAn2|?y7!Q|o0YoyMqKcQI zZo*gQo~!GfoQ}Wjz}mQf*;gg=x|@fUL1p#VJJg!OH%N~ERZzB4#qktY{rHl9WUd(( zVYp4SzES8y;8{V%C?|MqOG)(_J744=Sy84s|3Ss^Bjk*ds=!+_KOpQefu zI{H%G<@v`M0*>Ww+RI#7?+k^yR7WW$78&me>X~+i;(q zNnl2;tQyLkv&m{U`>j`(Ad(Elp<{@xT-JyY(hh zHA23P!l#6VFrcy66?6^C%zaMgScdD#%@YCoC}}ESXQ5MD2iO=#Boi^a4QgUg{NY%6 z6C~TqkGYdtsBf@zm0n{{zwPL@_}2nfevgtSwY7lAdQ}Yt8V^YuCbM`(e)oO)LfxTs zU%cF%&jIu0GmR}5Yo3}ZCb>oq76oQnX$mefge%jhRIOdl>`O@ej;8 z^Z4}^5J)j*oseJw*y4cs6v8weJze(@$P&Wy?W;aHh+$mwo~eMB58(4!co1hNe%^Jd;BsBAz(P zR@BTb6d6y~SI^*6N>IS?pRe_L=SPE)Eb*7?Sf=ML2lGQt0U@DAosq=2*=EMy>Z|2n zm220WSKnI>{Z&#vaBZ$I5wm*i-D4)?aWPn;t@2{zs~GJij5fx z{wrI~^34(bso%M{sc{jB@Ia}c+;v4C%p7zC`P;>_@Y3=8q;=|lw1kcx5**&453qy# z*euAzB;^Eu2o*vGl7VGArXO{x3a95E0g;Q>!DKte5+vvc_2j8F z3Hk0j{2iC^N>);{y&vV*yKvoMHJGcd9;vGc;>#z?#)yE3nSIgLUM{ISWhxBD=<4~jt6%}7l240jnD1_U=s-9cP$DFj*(O!p1~S* zJ4@f0{uQt5J9^o-QjE75wKR=|fp98sF$Li>c|HWpJg=I=o$ByYPsgMO(6)-Ron}S; z1Z(PbazbJVxR8;eZz3s&Ov`tu_%F1ieObP&r=-RDCbX1(yItRvrW&02R)N5MEGBxV zTdQ89-zD;(Vf-7wy7zg@JwF<-Z}zGulGL})a&ruV8*cF{2@Bhom?uumb2+rKzN@nE znO55^DsWo3mi0|G%mv{dk&NIHFtcW{^zwDHP}7EOlurk^MSl}0%9Gqa!v?qNBH1E|Q^DzXC2e7lCtp@1GKyVoJ=iUN9HXv~l0qhBIz5T zp}c6APNA}RQ)PX{JlZp>+m`4dj#cxiTC+EHD0erDXS8KHVsAjXE@!l$_C|6e{l~ZX z$nRLvUDEBZFuIbbiI1s_UVA2L7me=a-fnSgOleOI7eo06CJL%p8ysvzPtBK`dvgfb z9g*}58`^@y8VdG!B`BE8hR7i^gwLh((9h4Wi>UI*_Z-!G@APr$*tG;)X6ysC=dbp2 zrCp7l`a9jUcD%8_HtjMHYcIXx2)tj1)% zg68np>c=*NE%g>ZM24SDdIZX#RVs16F!>ur2{&`^N{ax~wvW}zS2XDsm=>q;T}S56 zlDAQfw|d7Z;$EtYtFB{oTqj|6baaUnjLa#{<{i1dIS%!}!qwhcKT_0LwKP>Xi>6^n zsSA|zV1#h4aUb2M=r63Mmo5tm-2qB091%E43Onx5HxGZMFxjifK_L8h@$G_MnPQPP zzXJ^645Fz;1#q|rXGg>C(YJ~;>eE6oV=HvZfWtP1QrlKhUeoG9H)EB=G7Ktqnp9DG zA8{G+rq-E6D5@`|qTP8sU8;rtU^ZpIz7|T_p|?J^UICe6Iq5mg6C2t)c{MfHS>r)yvM8EpRC?}bgAFBk4+!tzz znzD&w(*R)T0$yGZB{HU;9?qePIi(HN?$dU5bVm?skw8B?Z9$FcA!FC*ij}^(I4~B1 zJx^^-Jb`MBP=$2&c?YGpR8eFcujhb5)KE{DmixuGf7p^Dz1wcU94%?!yE@4=jzvTa zqu4T^7lrS=w#W;BzAZp18;0SvZuH(5Xcc4};lLE-WBFSuoXTD>aNmI=Psj7gd{zNN zFAFb8tDg8&0a`bwUbN~U{VgZO!NZ+L!TpBCzq&*VE$PYGD;uoEjRe$eKqI~X-+m!*hh zEk5ep5GcXpV3-=|-k_4eqCQC><6((wweU6>qxt%E60;op*S8eJd}4z2<-cixqw$EChEW)2m~kQdHdlV2 zPEQXZ2x!=Q@9?EQOUrf(KM^Zi8;jq|JLU9P^DacwsrPG$#)*T|SlU8B4lJbj)AfNy z1HVRqUM7t!Ju@GBsHM)1a~7ounBaVpcE#KdEUm>3Ej)QUGa@^LkaH)vk^oL@%=YBH zZv09byFGO2bkXNa(;E?vFW^i_Yh<43;xAe!ux=qp^#1&Tz$K5qso~$OC>2#6BbFCg zcSeJvF$k3;am`jO=BN7QJtv)@H@DN4zUSr-f7ZFkNBH4oMV-`Bq<_`>V(c9Zw%ki8s0l8 zY5|m2eyrfS)l?fMPM^{x{`gB{nz7IYny3d~Bofn%%A+xh^jQi~SLk*;azi5i;LuN}4~1B%?Z!};z4rH%<+R@^!H z;g`Oj>MT9Ps0M@H7SiWCEZip+O&!-ps(hDjup3lOitkJm%H^V(By(GbviLJX<7ZbR z75ZQ|-EmzBJz?q$N!^XC6Zeq`hF}rMIVJYgq(^7Lpb~;pMmcZ894ShkY48{{kJoNp zt0^KZ8uetS6T+;C*N3)dc;LKwo7~tYZ`=?p}+jDdr-+~8;q5b`N@LikypsZW6a^#0?!QJ&jyTf zP0T5sj!T;&&+Ik=Wy5+A(2Ej8%U;E8a>xcQQ#o5z9H@ZnE-S}27C)-DWhg!fRC zt~mzxP7Y=YH4A+b)bW8#8S!e{bI36ER0)9%gN3aKb67Fple)9-QfO{Uta@4yOx{WX z)RzdATF%IAqAeiplRfCWE|8UWb)y0!05TQ^a}Op0o`Yqk3M&oXxc%B>VoQ_?w#^|~ zi^vOBbAsmajP$aNk-C3JM675Z`!ki?%XN7{HP$)UQ|&!CFD@!fGFC7@XvBT4`XK>( ztT_$TtU4+6f@NE-rndSPSV_oGlJmXrd6I@%Sm(Cd_y>Gi#<&o@^U+O&qz?EgymR@; zIgdrCdxI>hh8aO``>dC~Kq9T0n7uYX}^%5)67gnB`H7aa14Y`_n8%`mN6*x=?Y#%n);`xB+m;diICdaaL99&%zB^x{-uMa%cH}f zPe0oZqhFX%MlL7-^HZmXFAha@P;%Lj}MG=KW~kc26k zXo@yPjw8+}Q9++vR@?lSeG6bTA|X|C{%9sLgYm|2Kqmb8QNO@PeaZ2 z;E-u^vXx2ZlEbpWk8C~b92K%uCK*rQs#0>gZkpu)kdry4KgFkcZ0X#ot`CSXES(dIj(=8A#&S{E3tM0IG(%FUngyyq7-bq~Y8 zcs0=G6v2~mrft0hQ}2s=tzuW?+!?6br6plJo`oqsQqL~dQ9wBb6YaLq!&6I^|4=}^ zHUBs&FZq5YGZ4&$(X>z&`!1yEGwO8Hw$mF~{{{;!XFJBLTXkjwjBBx@pC!I9Ol00` zSb$6rOLOasR~?lF?ae3OGW6z&lU~e^MPEy6DTpu1F4PCzakHolUfbJy-M!Jb)-}-U z=U$`63(fGIu4ZjUH>|o13NV9l&FMKo6qyrVs)R;q{Z}sJG>*+Dpf~ za|`pqooI&P7gl?%UsJufLTa**lWyPNP`F($U)`HGfMSFzE5P{B`}vjK*9Ls==kO=Q z|5N%CIk_HvaD%!yC7v4 zo;BKS^#OPHrg1f+-}nQ+hj7*-cUA^uq^H7b;g-btiXM zDciNS&Rhtn|7eVu5)755y7cN5i!2N3Q(l?+)n~ix{ER@#{QZ=6&m}-bi#s>p;lTV` zH1hxw6g-(!*|*EA_k;CA)v$6=)r9N;ne>IJ@tHJn=LYtXEL154t2XcQfuAyM_Cy>jhT#JL@OfBSZ40&wPv9p}2b;X~dcR2Bdto~Q*^bkRQw{DwRgOlD1FMe1H_G$Y z|B>2kk^x`^)k>FKFBg<%aItmFb)`RId!dJvkxs*E?P$7v`trrf!wNAFF`P2sES~cF z4*&OTIfvX$L4v>^dIc=CyL_md zMPJBI_8$78c_Ch9)>#k|Fn2Jnj|QHgz+E<bnHwY!Jk8b0 zQtqke*sYABfi)&!ZqF;+Ru^E#W|ZB)foJ4I9T*gdP%X3z@U;!hVlyM+4?A=Rum*G2 z)qTLq#U;UW;J6Pm@`rI_tGZ2;A;ZDH7UGearkl9s3Sq=4Lc3io{S;A#L*0zJdx^UL}UncX)*$kv|K$8%~i>`oPT&@Q+G)qL> z$PAP54MQ9@UJAlq{@~=yRLL;ATx+sv+*il%R5;THiWm0N;6I>KpQq7N%u6uO+_1qG z`dRD=n_D6voN=_16hg%p@JLOZo;f`niW#edB<( zx%|{?z96qeUzpc8sj|KNt{MC1sIAfH#dY2BI{`H(Gp+TLayt$d`=g{GtA$=rmt1i6 zQFz4EJwMb$m1WvjTs1^WHEJ${Y#kp@u()R43$G55Ec8G0cLQLnAnY*!x(_NdU`+mM zXBNap*bLXB*?6HcY0DE=6iq3vyD|SSFp$5U|8JWI3`PhDwE^7ym$j|tdWJ7yUNhKt|D&?=j;FeR|F|ehcUd7+q?3%0 ztlK=eDSLBD)@_d>)G<2th=k0OY_gK=Ae*c*;@BiBJ0e@g?>g?ff8Rg9Uk`tnpL0H+ z&--(|uj}=CzOVPC*NS>!{p~}_Fpxm27=-AX)Op|q5A#sj4k~n6QqEY*^9ba4ik|M+ z+SPs;fKb5fEZ>Kx4s?Se_vuR(ZxgiVeW5!bjCDf;R;k_K4EGyG`L;s^d?a&SWr9G8 z&lbO9*2qs`hQLKoZow`j5N`e5F>14zK=3ZA1GsAU9Rq@boAD`XwjLv%F?J+kj)xXz z(K{BeEs7TEh@qRQNa6QC4(e+#u<#f(6L^G%4&PHr?kX3o z#F`J7!=l7^ID{C&hLTjKdM8^^Yfd1S2;7RXQ?NCPC!sC)9 zqGMy4P;JOe4;s%OPNz>w&^Eu>A2Tt#FZ-$9;N?MgS;^AQE1~Mr%T*hzOm6cA5>6!f z6@m;B`$q77I&rlH_G_1$J2A{eC<@Dr-1A|6jgVvomhVs=QX26bp#7n!0_&i0;$rRU zYA=<*eOf=z9;3pY-Z}7HfNTwB+d`8u4Ct#O6+h1*a}VBq#%*32js`lOe|*0N{C-Ga z6*71ZFN{gq13w6LiNmrLJ1{v=dV&Kn0o9cD^!H6y*cZHAPnf}34W;L7Utg5pPfW=i zDV2ZO00f(hL^~oU;*oTUTha;8yM=mc#v>5M6vzi1X=G|I5ZMh&=H{<0fNt}FC<80+ zU<;Aj#S?;zxPbYbYbM4lEkFUrr8om;*jhN6=`!0R4R!Y)=`v028iXr$Ym`*-^Qp>D z!$$NF*xNyehQiO(f53Hm{V|m5cP1p^2Gxv;UW`?4&KFaCxH%BqdwTUM51aR=S@-Am zFN7IG0>TrJmpOz^XgSg3CDk@nybmUD7x1uLkELH;gZKhS zNh=1L{F@+m1o4(rrBdk--F~U^C18P6AXPu8EMup?a11&WQFfK{5TQPOuIuXZ5;SLf zr+yCm0;-c);bEJeN;f0kYA{mS+j)BpoOShtT!&mM*5V#p`2olp@ElSZTl+y@chKU= zfzyz3cDir(_s6El;Z-?8+HmU{j0FPWQ(y%k$C+E2GBts5C6 zG!$*<`A|Ut0hS4eChnk1xY2B;Z|}1PuHlpK5_O0P5mJ|E!$mKTrQkNqH~+N`h8x6mleDSW&3a*sfcc-JWM~8=(Zx@Bbzh=~lIM1YrV=ww zvtZi@6b%ei+U5K}(AQuGkFAOuwFM1R1Y$^a(0z1qFv|se0O;DAC9tGdllWGo9FVdr zC&9tV{@!6a%{w+1!qgqpt?t~ziEVRuE0(Im_ z!T@t%Pu62!OKV1nCrV7%Y~TLTd!YZx3_r5>4iBQj?Td48vftvt_7oc3Gbs3wtP0E9 zoel=gwHJyuw6y0pVt}0iE&_@L0c$2=FIc4L?>$)@sdU&QZ-(7*XNq~p_VM#qW-vIk z$UgDk|3)NUEwN5q4pAFlq{MG$P}BCE>=V@`bds8-r~3S6<`1VI92_+INaWPtLq+2I zqhO!_8?@wx>y685fNh$XunkF1l63UL;1vOV0U3)k@72xdS8)lMw$=Jj%av~S6O3&e z+~=Lwhh|bEliEUKsST6lm4n%RHoctDUmUW7<_UD&eeSkuW&??M1qFF7EYt<2d%|h* z&r~LWoEG9e2=ch{!)l<|+#jwk)F%x&i?zBZnL@-#iO0G4J-tUZ4O6Xm z;7Y8#)k^4j+PU_#-bp8>@b1q5g2~xlavg$p6Ag+}ytA#AP6Nc>AT_yMO{e*(;AS92odxh$uhnR|n^_&4TVKb}_CFicv7F&2kk4z(Ruc&S9 z|1gb!YlrF3adtrhAITpsKusTNlvlJzw5f^)SiU)W3|E^20uSr^v{QD5hbJt3U=dw6 zRoJm|2DjV1^4ZFbxlc>JeU2hPQs)_?RM{_U=xaBC6Y+wn)p{tMg9Pc40A4NUsG)Ac zt|5>;w;?-@K&+1NT5^5ZXMnB+uS!m_O*l{kKQgX68XI!Dlp1^=h#)jjE`Wb0uQ|Qp z0vTPkf@Gre(jK?sGeszLG`{r3RaR4< zJObfxaL3AjUI?<)xu0P$D1i0%`0^;QD-yM8KX+S0nh%V+-p#ef*47sgx^hb}P%W7r zShhWcCZZ#Cp(V@x@qlU$6r_Z^E=p;9=bFosEo%QU#iF zH4k+fmRNXl#oge=L8;tb4b{MsU<>WKEFmk2r7tbl3D^%w4^EH@2sQUkYI8 zW@2W5O1oj&(a71eELlLqRI?MFBz*WR^-jHQLY%Is;XDV(MWpU4qDG!Kn4yIl2r}D{ z@B$q3h`Bd>W6jfSEC#NE1-9P#`%rloBtctV#%{GXgbz3F@OohfL6mF0%A; z{Gf9Hu+RX)31JTU1;CReSPWiUKTT{bG$%HT7KHPZ#>y)BZP#T4Y(fm3E8h@;1Gkd% z%FmQFv)5+$j3=iVaduwHY-z9vA$IqRIFuPsV3E*hO*zgQiMS^?H&^Re??PVqoLTf@ zh++s>!XV81>hoj{yyyfc`42KnF$l>gA{}w z($Lgy7>pebQt0m(liBi4fJAxY_u#^+(b3XebM0Gq8Jf=OvRBGWyROl*TTPGj_SCuB zlwoZBASKR&p=8t_CSTZ_q7JH|hCNmY3ecS87HGDb*?im=X~LrueWOE~m@5=IIzFa> z`Uk5OJY7`c;7LArRS_WYH{y9&$${UVe@4caA`}oU>9A`VD$mwH2UPx5z97&R`^D5E z5I}c8$1Yy1A;@o#S(f)b-0891fmzqY!cNbQ`^tlTc3926|K2+K9G85kQhj&d1cgeO z;bv7tY6Q8ZL(X%}6o`^c(B1>IO_96rU=vJMY#Z!A0Ed_~e6N#lYh*qmErw($Yu2NYe63TTDvY)yq~7kB#v!j!QFqw^pQ^Z{5+M)(=|Gf45L7Yy<8jZKL0uQS_knJj1l9pz}} zZTyhCKt_BdQ`Ihf+kN<4`H#6jd0_9_beZn3DLK&N8u$VJ!brL>0*Uv&yDt$?=+AG5Fa>ToEi ze#q>JY3VchsA8SFM+fjM_pGbl=Nk1fv$Iu{w&?R6IZ~$JciWcit?bR8mz$>Cj51K7 zQjV*ISNAnKk*xT01X%$-Q^=`bH+>zSG~Fsv(o9E*OBJQDqoghLzqIkd+C;)jvz+vV z?=LmIBiCQpTOIN?3V;I@J-YcmGla}?z&}kR*aGp-v81=J;j^xGzCF`YmP;0+N}JEM z{l+Do1mShol<7s1VdL}zDpq+o%YWYV`4GLyAEiIfnVswQQ1-+=rN!xAM~BjwZ^ zI+Hg1$BnqC*6ZZOjpxSyId7kpH+*IMO-(Ilv7)8mp;G`yM+qsaW3P+cf@GVmAztmv=ch&Yk{)4Cb8}+aIjaDEQ%pBx!c;Vtis37U*A + + + + + + + diff --git a/src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.png b/src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.png new file mode 100644 index 0000000000000000000000000000000000000000..3f153597897c0ff6f94a9b441e2cd23cdce6e0bc GIT binary patch literal 140852 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 A);gh0ASJ^VNjmOQd0s8Tt1oMv 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.svg b/src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.svg new file mode 100644 index 0000000000..78fda5174f --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/ErodeDilateBadData_IterationSequence.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Erode / Dilate Bad Data — one cell layer per iteration + Bad data = cells with Feature Id 0 (red); good feature cells in blue + + + iter 0 + iter 1 + iter 2 + iter 3 + + + Dilate + grows outward + + + + + + + + Erode + shrinks inward + + + + + + + + + + + i + Dilate grows the bad-data region outward by one cell layer per iteration (good cells touching bad become bad). + Erode shrinks it: each bad cell is reassigned to the Feature Id held by the majority of its neighbors. + The Number of Iterations sets the layer count; per-axis toggles (X / Y / Z) restrict which directions are processed. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/ErodeDilateCoordinationNumber_CoordinationNumber.png b/src/Plugins/SimplnxCore/docs/Images/ErodeDilateCoordinationNumber_CoordinationNumber.png new file mode 100644 index 0000000000000000000000000000000000000000..656a361b0bbe8bbfa949a119ab6ed57480f64cb5 GIT binary patch literal 176529 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 + + + + + + + + + + + Coordination Number = differing face-neighbors + Count of a cell's 6 face-neighbors (±X, ±Y, ±Z) that belong to a different feature + + + + + CN = 3 · edge cell + + + + + + + + + +Z + + + + +Y + + + + −X + + + + cell + + + + +X + + + + −Y + + + + + −Z + + 3 of 6 neighbors differ + + + + + + CN = 6 · isolated cell + + + + + + + + +Z + + + +Y + + + −X + + + cell + + + +X + + + −Y + + + + −Z + + 6 of 6 neighbors differ + + + + + + center cell + + same feature + + different feature (counts toward CN) + + + + + + + i + When CN ≥ the Coordination Number parameter, the cell's Feature Id and attributes are replaced by a neighbor's + values. With Loop Until Gone enabled, the sweep repeats until no remaining cell meets the criterion. + + + + + + + Higher coordination number = more isolated — a higher threshold absorbs only the most isolated cells. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.png b/src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.png new file mode 100644 index 0000000000000000000000000000000000000000..a842625c392800d1f70bbd5a3ded0b074b9581cb GIT binary patch literal 180664 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μ%L0P><^fx`*%AdnIT~;grMas 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.svg b/src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.svg new file mode 100644 index 0000000000..dbdbc58408 --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/Morphology_OpeningClosing.svg @@ -0,0 +1,63 @@ + + + + + + + Morphological Opening & Closing + An erode / dilate pair applied to the mask's true (colored) region + + + Opening + erode → dilate + removes small + isolated regions + + + + + + input + + + + erode (speck gone) + + + + = opening + + + + + Closing + dilate → erode + fills small + holes + + + + + + input + + + + dilate (hole filled) + + + + = closing + + + + + + + + i + Opening (erode then dilate) removes small isolated regions and thin protrusions while returning the larger + region to about its original size. Closing (dilate then erode) fills small holes and gaps while preserving + the outer boundary. Run the erode and dilate passes with equal iteration counts to keep the overall size stable. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.png b/src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.png new file mode 100644 index 0000000000000000000000000000000000000000..b88bee16496623471b22d9c0a3a35189fb199643 GIT binary patch literal 118542 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.svg b/src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.svg new file mode 100644 index 0000000000..72472dcfa6 --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/ReadHDF5Dataset_TuplesComponents.svg @@ -0,0 +1,56 @@ + + + + + + + Read HDF5 Dataset + A flat dataset is reshaped into tuples × components + + + HDF5 dataset (flat) — 12 values + + + + + 01234567891011 + + + + + reshape + + + tuples (6) + components (2) + + + + + + + + + + 01 + 23 + 45 + 67 + 89 + 1011 + + DataArray — 6 tuples × 2 components + + + + + Reshape rule + total values = ∏(tuple dims) × ∏(comp dims) + 12 = 6 × 2 + + Tuple dimensions + how many elements (e.g. voxels / rows). + Component dimensions + values per element (e.g. a 3-vector → 3). + + diff --git a/src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.png b/src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.png new file mode 100644 index 0000000000000000000000000000000000000000..74d7da221199281092e141289e316fa4add17b8a GIT binary patch literal 135414 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

%A&!zI8>h+!NgW10Y7YxxFnmq*5QKaN_lX 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.svg b/src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.svg new file mode 100644 index 0000000000..a3b392164d --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/ResampleImageGeom_SpacingCellCount.svg @@ -0,0 +1,44 @@ + + + + + + Resample Image Geometry + Change the grid resolution — the physical size stays the same + + + + + + + + + spacing (1, 1) + 8 × 8 cells + + + + resample + spacing × 2 + + + + + + + + + spacing (2, 2) + 4 × 4 cells + + + + + + i + The physical bounds are unchanged, so doubling the spacing along an axis halves the cell count there + (cells become larger and fewer). Each new cell copies the value of the nearest source cell — no interpolation. + Three modes set the new grid: Spacing (physical units), Scaling (percent per axis), or + Exact Dimensions (target cell counts). + + diff --git a/src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.png b/src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.png new file mode 100644 index 0000000000000000000000000000000000000000..cdb120ac392c081318d3a5e961695092ac4386e9 GIT binary patch literal 138619 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�d+%CHLUPS6B`6 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

@Df^Xu&MqMjd5L2_yBn2}jK8O~Hk3!8O$ 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 literal 0 HcmV?d00001 diff --git a/src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.svg b/src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.svg new file mode 100644 index 0000000000..743d2e2e7b --- /dev/null +++ b/src/Plugins/SimplnxCore/docs/Images/RotateSampleRefFrame_SampleVsGeometric.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + Sample reference-frame rotation vs geometric rotation + The same 90° rotation, applied two different ways + + + + + Rotate Sample Reference Frame + axes rotate · microstructure fixed + + + + + + + + + + + + + + + + + + + + x + y + + + + + x' + y' + + + + + + + Geometric rotation + data rotates · axes fixed + + + + + + + + + + + + + + + + + + + x + y + + + + + + + + i + Rotate Sample Reference Frame rotates the coordinate axes and resamples the cell data onto the new grid — the physical + microstructure is unchanged, and the origin usually shifts. To rotate the data itself, use Apply Transformation to Geometry. + + diff --git a/src/Plugins/SimplnxCore/docs/Images/WriteAbaqusHexahedron_VoxelToHex.png b/src/Plugins/SimplnxCore/docs/Images/WriteAbaqusHexahedron_VoxelToHex.png new file mode 100644 index 0000000000000000000000000000000000000000..5983d66278dd91b6ff77acbbdde48eb8ba47e278 GIT binary patch literal 167908 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�ESGXEkjPt9C;rUQVkl3E9lQ6xiy$*Y`qcB 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 y)1H(Y^~19Bfy#AP6m%z + + + + + Write Abaqus Hexahedron + Each voxel becomes an 8-node hexahedral (C3D8) element + + + + + + voxel (cell) + + + + export + + + + + + + + + + + + + + + + + + + C3D8 element · 8 nodes + + + + + Output files (Abaqus .inp) + <prefix>.inp — master (*Include) + _nodes.inp — node coordinates + _elems.inp — C3D8 connectivity + _elset.inp — element sets (per grain) + _sects.inp — sections + + + + + + + i + Each Cell becomes one C3D8 hexahedron with 8 corner nodes. Nodes shared between neighboring + voxels are written once, so the mesh is fully connected — a 2×2×2 block of 8 voxels has 27 unique + nodes, not 64. Element sets are written per grain from the Cell Feature Ids. + + diff --git a/src/Plugins/SimplnxCore/docs/InitializeDataFilter.md b/src/Plugins/SimplnxCore/docs/InitializeDataFilter.md index 09ab8dbb0f..847a117a04 100644 --- a/src/Plugins/SimplnxCore/docs/InitializeDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/InitializeDataFilter.md @@ -6,73 +6,80 @@ Processing (Cleanup) ## Description -This **Filter** allows the user to define the data set in a _DataArray_. +This **Filter** overwrites every tuple in a **Data Array** with a value chosen by one of four initialization modes. Multi-component arrays can be initialized either uniformly (one value applied to every component) or per-component (a semicolon-separated list). ### Initialization Type -The *Initialization Type* parameter provides the following choices: +The *Initialization Type* parameter provides four modes: -- **Fill Value [0]**: Copies a user-supplied constant value (or per-component values) into every tuple in the array. -- **Incremental [1]**: Fills the array starting from a user-supplied value and applying a fixed step (increment or decrement) to each successive tuple. -- **Random [2]**: Generates random values across the full scalar type range. An optional fixed seed can be supplied for reproducibility. -- **Random With Range [3]**: Generates random values within a user-specified minimum/maximum range per component. +- **Fill Value [0]** -- every tuple is set to a user-supplied constant value (or per-component values). +- **Incremental [1]** -- the array is filled starting from a user-supplied starting value, applying a fixed step (increment or decrement) to each successive tuple. +- **Random [2]** -- every tuple is set to a uniformly-random value drawn from the **full range** of the array's data type. An optional fixed seed can be supplied for reproducibility. +- **Random With Range [3]** -- every tuple is set to a uniformly-random value drawn from a user-specified [min, max] interval per component. + +#### Fill Value + +Provide a single value or, for multi-component arrays, a semicolon-separated list. The same value is copied into every tuple. + +#### Incremental + +Provide a starting value, a *Step Operation* (Addition or Subtraction), and a step value. Each successive tuple's value is the previous tuple's value plus (or minus) the step. A step value of 0 leaves that component unchanged across all tuples. + +Example -- a 3-component array filled with 3-D rotations in radians, stepping X and Y but not Z: + +- Starting value: `0` +- Step Operation: Addition +- Step Values: `3.141592;6.283185;0` + +#### Random and Random With Range + +Both modes draw uniformly. *Random* uses the full data-type range; *Random With Range* honors a per-component lower and upper bound. Both modes use the same random seed plumbing: + +- *Use Seed for Random Generation* + *Seed Value* -- supply a fixed integer seed for reproducibility. +- With the option disabled, a time-based seed is generated; the actual seed used is saved to the *Stored Seed Value Array* so the run can be reproduced later. + +*Standardize Seed* (Random mode only) controls whether all components in a tuple share the same random draw: + +- ON: a single value is drawn per tuple and broadcast to all components: `| 3;3;3 | 9;9;9 | 4;4;4 | ...` +- OFF: each component is drawn independently: `| 3;9;4 | 7;2;8 | 5;9;6 | ...` + +For *Random With Range* on a multi-component array, the lower and upper bounds are semicolon-separated per component. A trick for fixing one component while randomizing the others: set the lower and upper bound to the same value for the fixed component. Example -- 3-component array where the middle component is always 6 and the others vary: + +- Lower bound: `0;6;0` +- Upper bound: `90;6;252` ### Step Operation -The *Step Operation* parameter (used with **Incremental** initialization) provides the following choices: - -- **Addition [0]**: Adds the step value to the previous tuple's value at each successive tuple. -- **Subtraction [1]**: Subtracts the step value from the previous tuple's value at each successive tuple. - -This **Filter** provides several ways to do this: - -- Fill Value: - - This type is fairly straight forward you provide a value, or set of values for a multi-component array, and it gets copied into every tuple in the array. - - Nuances to note: - - None for this type aside from aforementioned boolean nuances -- Incremental: - - This allows the user to supply a start value, define the type (increment or decrement), and set a step value to for the operation. Providing 0 will ensure that that component remains unchanged. - - Example: Say you have a 3 component array where you want to define 3-D rotations in radians for different components, but you only want to operate on the x and y and not the z; You could define your starting value as '0' (ignoring the apostrophe marks), select addition as the operation, then define the step values like so: '3.141592;6.283185;0' - - Boolean Nuances: - - For the _Step Values_ please enter uint8 values, preferably a 0 or 1 only. - - Addition: - - Any step value that is greater than 0 will cause all values to be 'true' after the first tuple, 'true' values will remain unchanged. - - If your start value is 'false' and step value > 0, the array will initialize to | false | true | true | ... | - - If your start value is 'true' and step value > 0, the array will initialize to | true | true | true | ... | - - Subtraction: - - Any step value that is greater than 0 will cause all values to be 'false' after the first tuple, 'false' values will remain unchanged. - - If your start value is 'true' and step value > 0, the array will initialize to | true | false | false | ... | - - If your start value is 'false' and step value > 0, the array will initialize to | false | false | false | ... | -- Random: - - This allows the user to randomly generate values from the actual scalar type min to the scalar type max. If you choose to define the seed for the array the seed in the _Seed Value_ box will be used, otherwise a random seed will be generated. Either way the seed will be saved to the _Stored Seed Value Array_. - - **Standardizing Seed:** - - This value allows the user to be able to generate the same sequence of values for every component in the tuple throughout the array when set to true - - Example: - - When true it will look like | 3;3;3 | 9;9;9 | 4;4;4 | ... | - - When false it will look like | 3;9;4 | 7;2;8 | 5;9;6 | ... | -- Random with Range: - - This is beholden to the same rules as random with some additional considerations in relation to the range. - - If you require an array that has one stable component and other variable components you can define the lower and upper bounds of the range to be the same and the variable will never change. - - Example: Say you have a 3 component array where you want the middle component to be always be 6 and the other component to be randomized above six. When defining a range supply '6' (ignoring the apostrophe marks) for the lower bound and '90;6;252' for the upper bound - -The filter provides two ways to define the values in a multi-component array: - -- Define a single value that will be used for every component in the tuple -- Defining each component's value seperated by the semicolon ';' character - -Example: Say you have a 3 component array that you want to range that starts from zero and has unique end values for each component. In the starting value box just supply '0' (ignoring the apostrophe marks) and then define your end values in a list like this: '4;0;7' - -**Boolean Entry Notes:** - -The **ONLY** two ways to specify a 'false' boolean value are as follows: - -- boolean value string types as follows ignoring apostrophe marks: 'False', 'FALSE', 'false' -- all well-formed integers and well-formed floating point definitions of 0 - -**ANY OTHER** string or number **WILL BE** 'true', although it is good practice to define true values as follows: - -- boolean value string types as follows ignoring apostrophe marks: 'True', 'TRUE', 'true' -- all well-formed integers and well-formed floating point definitions of 1 +Used only with *Incremental*: + +- **Addition [0]** -- adds the step value to the previous tuple's value. +- **Subtraction [1]** -- subtracts the step value from the previous tuple's value. + +### Boolean Array Notes + +For boolean arrays, the only values that produce `false` are: + +- The strings `False`, `FALSE`, `false`. +- Any well-formed numeric `0` (integer or floating-point). + +**Any other** string or number is interpreted as `true`. Conventional `true` values are the strings `True`, `TRUE`, `true`, or the numeric `1`. + +For boolean arrays under *Incremental* mode, the *Step Operation* behaves as follows: + +- **Addition** with step value > 0: starting `false` produces `false, true, true, ...`; starting `true` produces all `true`. +- **Subtraction** with step value > 0: starting `true` produces `true, false, false, ...`; starting `false` produces all `false`. + +### Multi-Component Value Format + +Single value: applied to all components. Example: `2.5` initializes every component of every tuple to 2.5. + +Per-component values: semicolons separate components. Example for a 2-component array: `0;1` sets component 0 to 0 and component 1 to 1. + +Semicolons (rather than commas) are used to avoid international locale ambiguity (commas are decimal points in some locales). + +### Required Input Sources + +- **Input Data Array** -- the array to overwrite. Typically a previously created or imported array. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/InitializeImageGeomCellDataFilter.md b/src/Plugins/SimplnxCore/docs/InitializeImageGeomCellDataFilter.md index f61cc5d327..27a0dcb4aa 100644 --- a/src/Plugins/SimplnxCore/docs/InitializeImageGeomCellDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/InitializeImageGeomCellDataFilter.md @@ -6,15 +6,36 @@ Processing (Cleanup) ## Description -This **Filter** allows the user to define a subvolume of the data set in which the **Filter** will reset all data for every **Cell** within the subvolume. The user can choose from three initialization modes: *Manual* (initialize to a user-specified value), *Random* (initialize with random values across the full range of the data type), or *Random With Range* (initialize with random values within a user-specified range). +This **Filter** overwrites every cell within a user-defined *subvolume* of an **Image Geometry** with either a constant value or random values. Use this to reset a region of interest, mask out an area for testing, or stub in synthetic data for development. + +### Subvolume Specification + +The subvolume is specified by minimum and maximum **cell indices** along each axis (X, Y, Z). Indices are **0-based, inclusive** -- a min of 5 and a max of 9 includes cells 5, 6, 7, 8, and 9 (5 cells). The min must be less than or equal to the max along each axis. The min must be at least 0 and the max must be less than the geometry's dimension along that axis. + +The subvolume operates **only on cells inside this index range**; cells outside are unaffected. ### Initialization Type -The *Initialization Type* parameter provides the following choices: +The *Initialization Type* parameter provides three modes: + +- **Manual [0]**: every cell in the subvolume is set to a single user-specified constant value. The value is reinterpreted into each array's data type (e.g., 1.5 → 1 for an int array, 1.5 → 1.5 for a float array, anything non-zero → true for a bool array). +- **Random [1]**: every cell is set to an independent random value drawn from the **full range of the array's data type**. For uint8, this means 0-255. For float32, this means the full IEEE-754 range (which produces extreme values rarely useful for visualization). +- **Random With Range [2]**: every cell is set to an independent random value drawn from the user-specified [min, max] interval. The min/max are interpreted in the array's data type. + +Multiple cell arrays can be initialized in one filter pass; each gets independently-drawn random values when in Random mode. + +### Random Seed + +The random modes use a configurable seed for reproducibility. Enable *Use Seed for Random Generation* and supply an integer to make results deterministic across pipeline runs. With the option disabled, a time-based seed is used (results vary per run). + +### Behavior on Boolean Arrays + +For boolean arrays in random modes, each cell is set to a uniformly-chosen true/false. Range parameters are ignored for boolean arrays. + +### Required Input Sources -- **Manual [0]**: Initializes every cell in the subvolume to a user-specified constant value. -- **Random [1]**: Initializes every cell in the subvolume with random values drawn from the full range of the data type. -- **Random With Range [2]**: Initializes every cell in the subvolume with random values drawn from a user-specified minimum/maximum range. +- **Input Image Geometry** -- the geometry whose cell data will be modified in-place. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. +- **Cell Attribute Arrays to Initialize** -- one or more cell-level arrays already attached to the geometry's Cell Attribute Matrix. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/InterpolatePointCloudToRegularGridFilter.md b/src/Plugins/SimplnxCore/docs/InterpolatePointCloudToRegularGridFilter.md index 98d61e0105..d0c16f39e9 100644 --- a/src/Plugins/SimplnxCore/docs/InterpolatePointCloudToRegularGridFilter.md +++ b/src/Plugins/SimplnxCore/docs/InterpolatePointCloudToRegularGridFilter.md @@ -69,6 +69,10 @@ Statistics are computed on the *weighted* values (`kernel_weight * source_value` Median is not supported because it requires storing every vertex's contribution, which would negate the memory savings of the flat accumulation approach. +### Required Input Sources + +- **Vertex Geometry** -- the point cloud whose arrays will be interpolated, produced by a filter that creates a **Vertex Geometry** such as [Extract Vertex Geometry](ExtractVertexGeometryFilter.md) or [Create Geometry](CreateGeometryFilter.md). + ### Mask An optional boolean or uint8 mask array may be provided. Vertices where the mask value is *false* or *0* are skipped entirely during interpolation – they do not contribute to any voxel's accumulated value or statistics. @@ -79,7 +83,7 @@ This filter uses flat arrays rather than variable-length lists, so memory usage ### Voxel Index Computation -The destination voxel for each vertex is computed on-the-fly from the vertex coordinates and the **Image Geometry**'s origin, spacing, and dimensions. There is no need to pre-compute a voxel indices array (e.g., via the *Map Point Cloud to Regular Grid* filter). Vertices whose coordinates fall outside the **Image Geometry** bounds are silently skipped. +The destination voxel for each vertex is computed on-the-fly from the vertex coordinates and the **Image Geometry**'s origin, spacing, and dimensions. There is no need to pre-compute a voxel indices array (e.g., via the [Map Point Cloud to Regular Grid](MapPointCloudToRegularGridFilter.md) filter). Vertices whose coordinates fall outside the **Image Geometry** bounds are silently skipped. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/IterativeClosestPointFilter.md b/src/Plugins/SimplnxCore/docs/IterativeClosestPointFilter.md index 34221c35b7..bff5cee45f 100644 --- a/src/Plugins/SimplnxCore/docs/IterativeClosestPointFilter.md +++ b/src/Plugins/SimplnxCore/docs/IterativeClosestPointFilter.md @@ -16,50 +16,61 @@ which we can describe in terms of "moving geometry" and "target geometry." The b 1. Initial State: We start with two sets of points or geometries. The "moving geometry" is the one we aim to align with the "target geometry." Initially, the moving geometry may be in any orientation or position relative to the target geometry. -1. Identify Correspondences: For each point in the moving geometry, we find the closest point in the target geometry. These +2. Identify Correspondences: For each point in the moving geometry, we find the closest point in the target geometry. These pairs of points are considered correspondences, based on the assumption that they represent the same point in space after the moving geometry is properly aligned. -1. Estimate Transformation: With the correspondences identified, the algorithm calculates the optimal rigid body +3. Estimate Transformation: With the correspondences identified, the algorithm calculates the optimal rigid body transformation (which includes translation and rotation) that best aligns the moving geometry to the target geometry. This step often involves minimizing a metric, such as the sum of squared distances between corresponding points, to find the best fit. -1. Apply Transformation: The calculated transformation is applied to the moving geometry, aligning it closer to the +4. Apply Transformation: The calculated transformation is applied to the moving geometry, aligning it closer to the target geometry. -1. Iterate: Steps 2 through 4 are repeated iteratively. With each iteration, the moving geometry is brought into closer +5. Iterate: Steps 2 through 4 are repeated iteratively. With each iteration, the moving geometry is brought into closer alignment with the target geometry. The iterations continue until a stopping criterion is met, which could be a predefined number of iterations, a minimum improvement threshold between iterations, or when the change in the error metric falls below a certain threshold. -Final Alignment: Once the iterations stop, the algorithm concludes with the moving geometry optimally aligned to the target +6. Final Alignment: Once the iterations stop, the algorithm concludes with the moving geometry optimally aligned to the target geometry, based on the criteria set for minimizing the differences between them. ICP has a number of advantages, such as robustness to noise and no requirement that the two sets of points to be the same size. However, performance may suffer if the two sets of points are of significantly different size. -## Saving the Output Transformation Matrix. +## Saving the Output Transformation Matrix -The format of the output DataArray is a flattened array 16 elements in size that represents a 4x4 matrix. -The elements are encoded in a ROW MAJOR array, i.e., +The filter always reports the computed rigid body transformation as an output **DataArray**. By default the moving geometry itself is left unchanged. If the *Apply Transformation to Moving Geometry* parameter is enabled, the filter also applies the transformation to the moving geometry's vertices in place, so that it is aligned to the target geometry. + +The output **DataArray** is a flattened array 16 elements in size that represents a 4x4 transformation matrix. +The elements are encoded in ROW MAJOR order, i.e., 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -represents the following 4x4 Matrix +represents the following 4x4 matrix 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +The upper-left 3x3 block holds the rotation, and the first three entries of the rightmost column (elements 4, 8, 12) hold the translation, expressed in the coordinate units of the input geometries. + +The reported matrix can be supplied to [Apply Transformation to Geometry](ApplyTransformationToGeometryFilter.md) to transform this or another geometry as a separate step. + +### Required Input Sources + +- **Moving Vertex Geometry** -- the **Vertex Geometry** to be aligned to the target. +- **Target Vertex Geometry** -- the fixed reference **Vertex Geometry**. The two geometries need not have the same number of points. + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/LabelTriangleGeometryFilter.md b/src/Plugins/SimplnxCore/docs/LabelTriangleGeometryFilter.md index 0150c0e50e..7ddbb33bc0 100644 --- a/src/Plugins/SimplnxCore/docs/LabelTriangleGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/LabelTriangleGeometryFilter.md @@ -24,6 +24,10 @@ The image below shows a single STL file that contains 12 different geometries. T ![Filter Output](Images/LabelTriangleGeometry_1.png) +### Required Input Sources + +- **Triangle Geometry** -- the surface mesh whose triangles will be labeled, typically read from a CAD mesh via [Read STL File](ReadStlFileFilter.md). STL is a common CAD mesh file format that stores a surface as a collection of triangles. + % Auto generated parameter table will be inserted here ## License & Copyright @@ -32,4 +36,4 @@ Please see the description file distributed with this plugin. ## DREAM3D-NX Help -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues) GitHub site where the community of DREAM3D-NX users can help answer your questions. +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/LaplacianSmoothingFilter.md b/src/Plugins/SimplnxCore/docs/LaplacianSmoothingFilter.md index fc52a99704..78d7c298d0 100644 --- a/src/Plugins/SimplnxCore/docs/LaplacianSmoothingFilter.md +++ b/src/Plugins/SimplnxCore/docs/LaplacianSmoothingFilter.md @@ -6,26 +6,26 @@ Surface Meshing (Smoothing) ## Description -This **Filter** applies Laplacian smoothing to any node based geometry except for **vertex**. A. Belyaev [2] has a concise explanation of the Laplacian Smoothing as follows: +This **Filter** applies **Laplacian smoothing** to any node-based geometry except for a **Vertex Geometry**. Laplacian smoothing repeatedly moves each node toward the average position of its connected neighbors, which reduces high-frequency surface noise and tends to flatten the surface. A. Belyaev [1] gives a concise explanation: --------------------------- Let us consider a triangulated surface and for any vertex P let us define the so-called umbrella-operator -![](Images/Laplacian_Fig1.png) +![Definition of the umbrella-operator as a weighted sum over the neighbors of vertex P.](Images/Laplacian_Fig1.png) where summation is taken over all neighbors of P and wi are positive weights. See Fig. 1 for the geometric idea behind the umbrella-operator. -![](Images/Laplacian_Fig2.png) +![Geometric illustration of the umbrella-operator centered on vertex P and its neighbor ring.](Images/Laplacian_Fig2.png) -The weights, can be defined, for example, as the inverse distances between P and its neighbors. The simplest umbrella-operator is obtained if *w* i = 1 and the umbrella-operator has the form +The weights can be defined, for example, as the inverse distances between P and its neighbors. The simplest umbrella-operator is obtained if *w* i = 1 and the umbrella-operator has the form -![](Images/Laplacian_Eq1.png) +![Simplified umbrella-operator where every neighbor weight equals one, divided by the number of neighbors.](Images/Laplacian_Eq1.png) where n is the number of neighbors. The local update rule -![](Images/Laplacian_Eq2.png) +![Local update rule that moves vertex P by lambda times the umbrella-operator.](Images/Laplacian_Eq2.png) applied to every point of the triangulated surface is called Laplacian smoothing of the surface. Typically the factor λ is a small positive number, and the process (2) is executed repeatedly. The Laplacian smoothing algorithm reduces the high frequency surface information and tends to flatten the surface. See Fig. 2 where Laplacian smoothing is applied to a triangulated model of a Noh mask. @@ -33,17 +33,21 @@ If λ is too small, one needs more iterations for smoothing and the smooth --------------------------- -In the Laplacian algorithm the λ term has a range of 0 ≤ λ ≤ 1 and defines a relative distance that a node can move relative to the positions of the nodes neighbors. A λ = 0 value will effectively stop those node types from any movement during the algorithm thus by allowing the user to set this value for specific types of nodes the user can arrest the shrinkage of the surface mesh during the smoothing process. +In the Laplacian algorithm the λ term is dimensionless with a range of 0 ≤ λ ≤ 1 and defines the relative distance that a node can move toward the average position of its neighbors. A value of *λ = 0* effectively stops those node types from any movement during the algorithm. By setting this value for specific types of nodes, the user can arrest the shrinkage of the surface mesh during smoothing. ### Taubin's Lambda-Mu Smoothing Algorithm -One of the options for the filter allows the user to apply Taubin's Lambda-Mu variation on Laplacian smoothing. This variation removes the shrinkage typically found with Laplacian smoothing by adding an additional step within each iteration where the negative of the (Lambda value \* Mu Factor) which effectively moves the points in the **opposite** direction from the initial movement. Because of this negative movement the number of iterations to achieve the same level of smoothing is greatly increased, on the order of 10x to 20x. +One of the filter options applies **Taubin's Lambda-Mu** variation on Laplacian smoothing. This variation removes the shrinkage typically found with Laplacian smoothing by adding a second step within each iteration: it moves the points back by the negative of (*Lambda* * *Mu Factor*), effectively pushing them in the **opposite** direction from the initial movement. The *Mu Factor* is a dimensionless multiplier. Because of this negative movement, the number of iterations needed to achieve the same level of smoothing increases greatly, on the order of 10x to 20x. + +If you instead need a smoothing method that strictly preserves the mesh topology (triple lines, quadruple points, and feature boundaries), consider [Hierarchical Smoothing](HierarchicalSmoothFilter.md). ### Algorithm Usage and Memory Requirements -Currently, if you lock the *Default Lambda* value to zero (0), the triple lines and quadruple points will not be able to move because none of their neighbors can move. The user may want to consider allowing a small value of λ for the default nodes which will allow some movement of the triple lines and/or quadruple Points. +Currently, if you lock the *Default Lambda* value to zero (0), the **triple lines** (edges where three features meet) and quadruple points will not be able to move because none of their neighbors can move. The user may want to consider allowing a small value of λ for the default nodes, which will allow some movement of the triple lines and/or quadruple points. + +The *Iteration Steps* parameter is a dimensionless count of smoothing passes; more steps produce more smoothing. -This **Filter** will create additional internal arrays in order to facilitate the calculations. These arrays are +This **Filter** creates additional internal arrays to facilitate the calculations: - Float - lambda values (same size as nodes array) - 64 bit integer - unique edges array @@ -51,14 +55,11 @@ This **Filter** will create additional internal arrays in order to facilitate th - Integer for number of connections for each node (same size as nodes array) - 64 bit float for delta values (3x size of nodes array) -Due to these array allocations this **Filter** can consume large amounts of memory if the starting mesh has a large number of nodes. - -At the conclusion of the filter these extra internal arrays will be reclaimed by the system. - +Because of these array allocations, this **Filter** can consume large amounts of memory if the starting mesh has a large number of nodes. At the conclusion of the filter these extra internal arrays are reclaimed by the system. ### Node Type Values -The values for the *Node Type* array can take one of the following values. +The values for the *Node Type* array can take one of the following values: namespace SurfaceMesh { namespace NodeType { @@ -72,17 +73,20 @@ The values for the *Node Type* array can take one of the following values. } } -If your surface mesh is lacking a `Node Type` array, you can simply create a DataArray inside the Vertex Data Attribute Matrix. The type should be "int8" and have an initialization value of 3. This will allow **all** nodes to move. +If your surface mesh is lacking a `Node Type` array, you can create a DataArray inside the Vertex Data Attribute Matrix. The type should be "int8" with an initialization value of 3. This will allow **all** nodes to move. + +### Required Input Sources -For more information on surface meshing, visit the tutorial. +- **Triangle Geometry** -- the surface mesh to smooth, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Node Type** -- the per-vertex node classification array, produced by the same surface-meshing filter that created the geometry. % Auto generated parameter table will be inserted here ## References -[1] D. A. Feature, (1988) Laplacian smoothing and Delaunay triangulations. Commun. appl. numer. methods, 4: 709 712. doi: 10.1002/cnm.1630040603 +[1] A. Belyaev, *Mesh smoothing and enhancing curvature estimation*, lecture notes, Max-Planck-Institut fur Informatik. [http://www.mpi-inf.mpg.de/~ag4-gm/handouts/06gm_surf3.pdf](http://www.mpi-inf.mpg.de/~ag4-gm/handouts/06gm_surf3.pdf) -[2] A. Belyaev, Mesh smoothing and enhancing curvature estimation, [http://www.mpi-inf.mpg.de/ ag4-gm/handouts/06gm_surf3.pdf]( ag4-gm/handouts/06gm_surf3.pdf). +[2] Field, D. A. (1988). *Laplacian smoothing and Delaunay triangulations*. Communications in Applied Numerical Methods, 4(6): 709-712. doi:10.1002/cnm.1630040603 ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/MapPointCloudToRegularGridFilter.md b/src/Plugins/SimplnxCore/docs/MapPointCloudToRegularGridFilter.md index 28620ddf87..c2c4d6c02d 100644 --- a/src/Plugins/SimplnxCore/docs/MapPointCloudToRegularGridFilter.md +++ b/src/Plugins/SimplnxCore/docs/MapPointCloudToRegularGridFilter.md @@ -8,13 +8,15 @@ Sampling (Mapping) This **Filter** determines, for a user-defined grid, in which voxel each point in a **Vertex Geometry** lies. The user can either construct a sampling grid by specifying the dimensions, or select a pre-existing **Image Geometry** to use as the sampling grid. The voxel indices that each point lies in are stored on the vertices. -Additionally, the user may opt to use a mask; points for which the mask are false are ignored when computing voxel indices (instead, they are initialized to voxel 0). +Additionally, the user may opt to use a mask; points for which the mask is false are ignored when computing voxel indices (instead, they are initialized to voxel 0). + +The per-vertex voxel indices produced by this filter are commonly used as the input to [Interpolate Point Cloud to Regular Grid](InterpolatePointCloudToRegularGridFilter.md), which transfers point-cloud attribute values onto the regular grid. ### Sampling Grid Type The *Sampling Grid Type* parameter controls how the target grid is defined: -- **Manual [0]**: The user specifies the grid dimensions directly. The filter creates a new **Image Geometry** with those dimensions to use as the sampling grid. +- **Manual [0]**: The user specifies the grid dimensions directly as voxel counts along X, Y, and Z (dimensionless counts). The filter creates a new **Image Geometry** with those dimensions to use as the sampling grid. - **Use Existing Image Geometry [1]**: The user selects a pre-existing **Image Geometry** from the data structure to use as the sampling grid. ### Out of Bounds Handling @@ -35,16 +37,20 @@ The default selection is `Silent`, but it is mostly provided as a way to preserv - User may intend to create a workflow that will be distributed in which the end user may not have control over the parameter, but should be monitoring for anomalies in output - User may want to watch for unexpected behavior - `Error at First Instance` option - - User may to trace down where a anomaly first occurred + - User may want to trace down where an anomaly first occurred - User may be creating a pipeline in a known problem space with a well defined outcome where any data anomalies must be caught early to prevent downstream problems -Continuing along the Out-of-Bounds discussion, the Out-of-Bounds value allows the user to specify a specific `uint64` (0 - 18,446,744,073,709,551,616) value to use for every value from the vertex geometry that falls outside the image geometry. The default value is just the max `unsigned long long int` in an effort to make sure that it doesn't intersect with existing indexed values. This is identical to previous functionality. However, consider the situation where a user has a geometry that contains 1000 voxels, in this case the actual index values are 0-999, so a user could select 1000 and it wouldn't overlap any existing voxel index. Doing this may reduce skew of coloring or other statistic-based analysis. Advanced users may intentionally select a value that overlaps an existing voxel index they wish to remove in a later filter or to later downcast the datasize without overflow, but this is considered an edge case that is functional, but not recommended. +Continuing along the Out-of-Bounds discussion, the Out-of-Bounds value allows the user to specify a specific `uint64` (0 - 18,446,744,073,709,551,615) value to use for every value from the vertex geometry that falls outside the image geometry. The default value is just the max `unsigned long long int` in an effort to make sure that it doesn't intersect with existing indexed values. This is identical to previous functionality. However, consider the situation where a user has a geometry that contains 1000 voxels, in this case the actual index values are 0-999, so a user could select 1000 and it wouldn't overlap any existing voxel index. Doing this may reduce skew of coloring or other statistic-based analysis. Advanced users may intentionally select a value that overlaps an existing voxel index they wish to remove in a later filter or to later downcast the datasize without overflow, but this is considered an edge case that is functional, but not recommended. + +### Required Input Sources + +- **Vertex Geometry** -- the input point cloud whose points are mapped to grid voxels, typically created by an import step or a filter that produces a **Vertex Geometry**. % Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/MoveDataFilter.md b/src/Plugins/SimplnxCore/docs/MoveDataFilter.md index 814595d1b3..e445cf7f56 100644 --- a/src/Plugins/SimplnxCore/docs/MoveDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/MoveDataFilter.md @@ -6,7 +6,24 @@ Core (Memory/Management) ## Description -This **Filter** allows the user to move one or more **Data Objects** to a new parent **Group**. When moving a **Data Array** into an **Attribute Matrix**, the destination must be compatible, meaning the *number of tuples* must be equal (though the actual *tuple dimensions* need not match). +This **Filter** moves one or more **Data Objects** to a new parent **Group** (a **DataGroup**, **Attribute Matrix**, or **Geometry**). The objects retain their names; only their parent changes. + +### Tuple Compatibility When Moving Arrays + +When moving a **Data Array** *into* an **Attribute Matrix**, the destination must be tuple-compatible: the **number of tuples** of the array must equal the number of tuples implied by the destination matrix's tuple dimensions. The *shape* of the tuple dimensions does not need to match -- moving a 1-D array of 60 tuples into a (3, 4, 5) Attribute Matrix is allowed, because both equal 60 total tuples. Moving the same array into a (10, 10) matrix would fail (only 100 total tuples). + +When moving between non-Attribute-Matrix parents (e.g., between two DataGroups), tuple matching is not enforced because DataGroups have no tuple-dimension contract. + +### When to Use This Filter + +- Reorganize pipeline output so related arrays end up in one matrix. +- Move a computed array (e.g., output of a custom filter that landed in a temporary group) into the proper Cell/Feature/Ensemble matrix where downstream filters expect to find it. +- Move a Geometry under a DataGroup to organize multiple geometries. + +### Required Input Sources + +- **Objects to Move** -- a list of paths to existing **DataObjects**. +- **New Parent Path** -- an existing **DataGroup**, **Attribute Matrix**, or **Geometry**. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/MultiThresholdObjectsFilter.md b/src/Plugins/SimplnxCore/docs/MultiThresholdObjectsFilter.md index 2e07d2da61..4df65b0d3e 100644 --- a/src/Plugins/SimplnxCore/docs/MultiThresholdObjectsFilter.md +++ b/src/Plugins/SimplnxCore/docs/MultiThresholdObjectsFilter.md @@ -8,7 +8,9 @@ Processing (Threshold) This **Filter** allows the user to input single or multiple criteria for thresholding **Attribute Arrays** in an **Attribute Matrix**. Internally, the algorithm creates the output boolean arrays for each comparison that the user creates. Comparisons can be either a value and boolean operator (*Less Than*, *Greater Than*, *Equal To*, *Not Equal To*) or a collective set of comparisons. Then all the output arrays are compared with their given comparison operator ( *And* / *Or* ) with the value of a set being the result of its own comparisons calculated from top to bottom. -An example of this **Filter's** use would be after EBSD data is read into DREAM3D-NX and the user wants to have DREAM3D-NX consider **Cells** that the user considers *good*. The user would insert this **Filter** and select the criteria that makes a **Cell** *good*. All arrays **must** come from the same **Attribute Matrix** in order for the **Filter** to execute. +An example of this **Filter's** use would be after EBSD (Electron Backscatter Diffraction) data is read into DREAM3D-NX and the user wants to have DREAM3D-NX consider **Cells** that the user considers *good*. The user would insert this **Filter** and select the criteria that makes a **Cell** *good*. All arrays **must** come from the same **Attribute Matrix** in order for the **Filter** to execute. + +A **Cell** is a single element (voxel) of a gridded geometry such as an **Image Geometry**, and an **Attribute Matrix** is the container that groups together all of the per-**Cell** **Attribute Arrays** (e.g., Confidence Index, Image Quality, Phases) so that they share the same number of tuples. Because the threshold is evaluated tuple-by-tuple across the selected arrays, every array used in a comparison must live in that same **Attribute Matrix**. For example, an integer array contains the values 1, 2, 3, 4, 5. For a comparison value of 3 and the comparison operator greater than, the boolean threshold array produced will contain *false*, *false*, *false*, *true*, *true*. For the comparison set { *Greater Than* 2 AND *Less Than* 5} OR *Equals* 1, the boolean threshold array produced will contain *true*, *false*, *true*, *true*, *false*. @@ -16,9 +18,11 @@ It is possible to set custom values for both the TRUE and FALSE values that will **NOTE**: If custom TRUE/FALSE values are chosen, then using the resulting mask array in any other filters that require a mask array will break those other filters. This is because most other filters that require a mask array make the assumption that the true/false values are 1/0. -% Auto generated parameter table will be inserted here +### Required Input Sources -## Example Pipelines +- The **Attribute Arrays** being thresholded -- any per-element scalar arrays that already exist in a single **Attribute Matrix**. Common producers are EBSD readers such as [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), [Read CTF Data](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read ANG Data](../OrientationAnalysis/ReadAngDataFilter.md) (which supply Confidence Index, Image Quality, Phases, etc.), but any filter that creates scalar **Cell** or **Feature** arrays can supply the inputs. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/NearestPointFuseRegularGridsFilter.md b/src/Plugins/SimplnxCore/docs/NearestPointFuseRegularGridsFilter.md index e62adf49ba..83b4566bb7 100644 --- a/src/Plugins/SimplnxCore/docs/NearestPointFuseRegularGridsFilter.md +++ b/src/Plugins/SimplnxCore/docs/NearestPointFuseRegularGridsFilter.md @@ -6,9 +6,26 @@ Sampling (Resolution) ## Description -This **Filter** fuses two **Image Geometry** data sets together. The grid of **Cells** in the *Reference* **Data Container** is overlaid on the grid of **Cells** in the *Sampling* **Data Container**. Each **Cell** in the *Reference* **Data Container** is associated with the nearest point in the *Sampling* **Data Container** (i.e., no *interpolation* is performed). All the attributes of the **Cell** in the *Sampling* **Data Container** are then assigned to the **Cell** in the *Reference* **Data Container**. +This filter copies the **Cell** data from one **Image Geometry** onto another by matching each cell to the spatially nearest cell in the other grid. It is used to bring the attribute arrays of two separately-sampled volumes into a single grid so they can be analyzed together. -*Note:* The *Sampling* **Data Container** remains identical after this **Filter**, but the *Reference* **Data Container**, while "geometrically identical", gains all the attribute arrays from the *Sampling* **Data Container**. +### Reference vs. Sampling Geometry + +The filter works with two **Image Geometries**: + +- The **Reference** geometry is the grid that is kept. Its cells are the destination. +- The **Sampling** geometry is the grid that is read from. Its cells are the source of the copied data. + +For each cell in the *Reference* geometry, the filter finds the cell in the *Sampling* geometry whose center is physically closest (using the two grids' origins and spacings), and copies all of that sampling cell's attribute arrays onto the reference cell. **No interpolation is performed** — the nearest sampling value is taken as-is. Because the match is by physical position, the two grids may have different spacings, dimensions, or extents; only their overlap in space is meaningful. + +The *Sampling* geometry is left unchanged. The *Reference* geometry keeps its own geometry but gains a copy of the sampling geometry's attribute arrays. + +### Parameter Guidance + +- **Use Custom Fill Value** — controls what happens to reference cells that fall outside the sampling grid (no nearby sampling cell). When off, copied arrays are filled with *0* there; when on, the user supplies the fill value. + +### Required Input Sources + +- **Reference Image Geometry** and **Sampling Image Geometry** -- two **Image Geometries** (each with a **Cell Attribute Matrix**), typically created by separate import or resampling steps. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/PadImageGeometryFilter.md b/src/Plugins/SimplnxCore/docs/PadImageGeometryFilter.md index 37b3e73bcf..8b7eb85866 100644 --- a/src/Plugins/SimplnxCore/docs/PadImageGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/PadImageGeometryFilter.md @@ -1,39 +1,57 @@ # Pad Image Geometry - -## Group (Subgroup) ## +## Group (Subgroup) Generic (Generic) -## Description ## +## Description -This **Filter** pads an image geometry by the given min/max voxels for each dimension in X, Y, and Z, using the default padding value. -It is also possible to optionally update the origin of the image geometry, which prevents the original data from shifting in space. +This **Filter** extends an **Image Geometry** outward by adding cells around the edges. Each added cell is initialized to a user-specified default value. Optionally, the geometry's origin can be updated so that the original data stays in the same physical location after padding. -For example given the original input geometry in Figure 1: +Padding is the inverse operation of [Crop Geometry (Image)](CropImageGeometryFilter.md). Common use cases are creating a margin around a sample before applying a transformation, or extending a small ROI to a standard size for batch processing. -### Figure 1 +### Example -![](Images/PadImageGeometry_0.png) +Given the input geometry in Figure 1: +#### Figure 1 + +![](Images/PadImageGeometry_0.png) -Padding the Image Geometry with X Min=0, X Max=10, Y Min=0, Y Max=10 will give the output as shown in Figure 2 +Padding with X Min=0, X Max=10, Y Min=0, Y Max=10 produces: -### Figure 2 +#### Figure 2 ![](Images/PadImageGeometry_1.png) +### Pad Amounts and Units + +The pad amounts (*X Min*, *X Max*, *Y Min*, *Y Max*, *Z Min*, *Z Max*) are integers in **cells/voxels**. A value of 10 adds 10 cells to that face. Setting a pad amount to 0 means no padding on that face. + +### Default Value + +Each padded cell is initialized to the *Default Value* for every cell-level **Attribute Array** in the target Attribute Matrix. The default value is interpreted in the same data type as each array (e.g., for a uint8 array, the value is cast to uint8; for a float32 array, to float32). Pick a value that is sentinel-like in every array (commonly 0). + +### Update Origin + +If *Update Origin* is **OFF** (the default), the geometry's origin stays at its current location. New cells appear at coordinates less than the original origin, so the original data effectively shifts to "the middle" of the new bounds. + +If *Update Origin* is **ON**, the geometry's origin is shifted so that the original data stays in its original physical coordinates. New cells extend to coordinates below the original origin. + +### Required Input Sources + +- **Input Image Geometry** -- the geometry to extend. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. + % Auto generated parameter table will be inserted here -## Example Pipelines ## +## Example Pipelines 'pad_image_geometry.d3dpipline' -## License & Copyright ## +## License & Copyright Please see the description file distributed with this plugin. -## DREAM3D Mailing Lists ## +## DREAM3D-NX Help -If you need more help with a filter, please consider asking your question on the DREAM3D Users mailing list: -https://groups.google.com/forum/?hl=en#!forum/dream3d-users +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/PartitionGeometryFilter.md b/src/Plugins/SimplnxCore/docs/PartitionGeometryFilter.md index b18da7c2ad..224a8643b3 100644 --- a/src/Plugins/SimplnxCore/docs/PartitionGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/PartitionGeometryFilter.md @@ -6,7 +6,7 @@ Reconstruction (Reconstruction) ## Description -This **Filter** generates a partition grid and assigns partition IDs for every voxel/node of a given geometry. +This **Filter** overlays a coarse **partition grid** onto an existing geometry and tags every cell or vertex of that geometry with the **partition ID** of the partition cell it falls into. The output is a per-cell or per-vertex integer label plus an Image Geometry representing the partition grid itself. Use this filter to prepare for sub-volume statistics, spatially-binned analysis, parallel decomposition, or any workflow that needs to group elements by spatial region. If the **Filter** determines that any voxel/node of the original geometry is out-of-bounds compared to the generated partition grid, the **Out-Of-Bounds Cell ID** will be used as the partition ID in the output partition IDs array. @@ -113,6 +113,12 @@ On all partitioning modes, a vertex mask can be used with a vertex-based input g |:---:|:---:| | ![](Images/PartitionGeometry/UseVertexMask_1a.png) | ![](Images/PartitionGeometry/UseVertexMask_1b.png) | +### Required Input Sources + +- **Input Geometry** -- any supported geometry (Image, RectGrid, Vertex, Edge, Triangle, Quad, Tet, Hex). Typically produced by [Create Geometry](CreateGeometryFilter.md), [Create Image Geometry](CreateImageGeometryFilter.md), or an upstream reader. +- **Partition Grid Geometry** (only when *Partitioning Mode* is *Existing Partition Grid*) -- an Image Geometry produced by a prior run of this filter. +- **Vertex Mask** (optional, for vertex-based input geometries) -- a boolean cell-level array on the input geometry's vertices. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/PointSampleEdgeGeometryFilter.md b/src/Plugins/SimplnxCore/docs/PointSampleEdgeGeometryFilter.md index 19286760e2..3829e1c0bc 100644 --- a/src/Plugins/SimplnxCore/docs/PointSampleEdgeGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/PointSampleEdgeGeometryFilter.md @@ -1,20 +1,37 @@ # Point Sample Edge Geometry +## Group (Subgroup) + +Sampling (Geometry) + ## Description -This **Filter** will take an Edge geometry and sample each edge at a fixed spatial resolution to generate a new Vertex geometry of sample points. For each interpolated point it will: +This filter walks along each edge of an **Edge Geometry** and places new sample points at a fixed spacing, building a new **Vertex Geometry** (a point cloud) of those samples. + +An **Edge Geometry** is a set of straight line segments connecting pairs of vertices. In additive-manufacturing workflows each such segment is a **scan vector** — the path the energy source (e.g. a laser) travels in one pass. This filter converts those continuous segments into evenly spaced discrete points, which is useful for simulating or analyzing the path at a controlled resolution. + +For every sample point the filter: + +- Copies the **edge ID** of the segment the point lies on, so each point knows which original edge it came from. +- Optionally records the **cumulative sample distance** — the straight-line distance from the start of that edge (scan vector) to the sample point. + +Any additional **Edge Data Arrays** the user selects are also copied onto the matching points of the new Vertex Geometry. + +### Parameter Guidance + +- **Sampling Spacing (mm)** — the distance between successive sample points along each edge, in **millimeters**. A smaller value yields more, more closely spaced points (finer resolution) and a larger output. +- **Calculate Cumulative Sample Distance** — when enabled, stores the start-of-edge distance described above for each sample point. -- Copy over the edge ID from the original edge. -- Record the linear distance from the beginning of its scan vector. +### Required Input Sources -The user can select additional Edge Data Arrays to also be copied onto the newly constructed Vertex geometry +- **Input Edge Geometry** -- an **Edge Geometry**, typically produced by [Slice Triangle Geometry](SliceTriangleGeometryFilter.md) or [Create AM Scan Paths](CreateAMScanPathsFilter.md). % Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help -If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. \ No newline at end of file +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/PointSampleTriangleGeometryFilter.md b/src/Plugins/SimplnxCore/docs/PointSampleTriangleGeometryFilter.md index e10fa4b96f..71b2799245 100644 --- a/src/Plugins/SimplnxCore/docs/PointSampleTriangleGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/PointSampleTriangleGeometryFilter.md @@ -2,37 +2,39 @@ ## Group (Subgroup) -DREAM3D Review (Geometry) +Sampling (Geometry) ## Description -This **Filter** randomly samples point locations on **Triangles** in a **Triangle Geometry**. The sampled point locations are then used to construct a **Vertex Geometry**. The number of point samples may either be specified manually or by inferring from another **Geometry**: +This **Filter** randomly samples point locations on the triangles of a **Triangle Geometry** (a node-based surface mesh of triangular faces) and uses those sampled locations to construct a new **Vertex Geometry** (a point cloud). The total number of sample points is supplied directly through the *Number of Sample Points* parameter. -| Geometry | Source for Number of Samples | -|----------|-----------| -| Image | Number of cells | -| Rectilinear Grid | Number of cells | -| Vertex | Number of vertices | -| Edge | Number of vertices | -| Triangle | Number of vertices | -| Quadrilateral | Number of vertices | -| Tetrahedral | Number of vertices | +To ensure an even sampling across the whole surface area of the **Triangle Geometry**, the average number of points placed on each triangle is made proportional to that triangle's area. Larger triangles therefore receive proportionally more samples than smaller ones, which produces a spatially uniform point density rather than an even count per triangle. -In order to ensure an even sampling of the total surface are of the **Triangle Geometry**, the average number of points sampled per triangle is made proportional to the area of the triangle. Within a given **Triangle**, a point is chosen using the following approach: +Within a given triangle, each point is chosen with the following formula: -![Equation 1](Images/PointSampleTriangleGeometry_Eqn1.png) +![Equation: the sampled point P equals (1 minus the square root of r1) times A, plus the square root of r1 times (1 minus r2) times B, plus the square root of r1 times r2 times C.](Images/PointSampleTriangleGeometry_Eqn1.png) -where ![](Images/PSTG_2.png) are the coordinates of the sampled point; ![](Images/PSTG_3.png), ![](Images/PSTG_4.png), and ![](Images/PSTG_5.png) are the coordinates of the vertices beloning to the **Triangle**; and ![](Images/PSTG_6.png) and ![](Images/PSTG_7.png) are random real numbers on the interval ![](Images/PSTG_8.png). This approach has the benefit of uniform sampling within the **Triangle** area, and functions correctly regardless of the dimensionality of the space embedding (i.e., whether the **Triangle** is in the plane or embedded in 3D). +where ![the sampled point coordinates P](Images/PSTG_2.png) are the coordinates of the sampled point; ![vertex A](Images/PSTG_3.png), ![vertex B](Images/PSTG_4.png), and ![vertex C](Images/PSTG_5.png) are the coordinates of the vertices belonging to the triangle; and ![random number r1](Images/PSTG_6.png) and ![random number r2](Images/PSTG_7.png) are random real numbers on the interval ![the interval from zero to one](Images/PSTG_8.png). This approach gives uniform sampling within the triangle area and works correctly regardless of the dimensionality of the embedding space (whether the triangle lies in a plane or is embedded in 3D). -The user may opt to use a mask to prevent certain **Triangles** from being sampled; where the mask is _false_, the **Triangle** will not be sampled. Additionally, the user may choose any number of **Face Attribute Arrays** to transfer to the created **Vertex Geometry**. The vertices in the new **Vertex Geometry** will gain the values of the **Faces** from which they were sampled. +### Random Sampling and Reproducibility -% Auto generated parameter table will be inserted here +The point placement is **random**: both the distribution of samples across triangles and the location of each point within its triangle are drawn from a pseudo-random number generator. By default a new seed is used each run, so the output point cloud differs from run to run. To obtain repeatable results, enable *Use Seed for Random Generation* and supply a fixed *Seed Value*; the seed actually used is also stored in an output array so a run can be reproduced later. + +### Masking and Transferred Data + +The user may opt to use a **mask** (a boolean per-face flag) to prevent certain triangles from being sampled; where the mask is *false*, the triangle is not sampled. Additionally, the user may choose any number of **Face Attribute Arrays** to transfer to the created **Vertex Geometry**. Each vertex in the new geometry inherits the values of the face from which it was sampled. -## Example Pipelines +### Required Input Sources + +- **Triangle Geometry to Sample** -- a **Triangle Geometry** (surface mesh), typically produced by [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Areas** -- a single-component per-face area array, produced by [Compute Triangle Areas](ComputeTriangleAreasFilter.md). +- **Mask** (optional) -- a boolean per-face array, typically produced by a thresholding filter such as [Multi-Threshold Objects](MultiThresholdObjectsFilter.md). + +% Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/QuickSurfaceMeshFilter.md b/src/Plugins/SimplnxCore/docs/QuickSurfaceMeshFilter.md index 3938111fa9..16b0b4ba12 100644 --- a/src/Plugins/SimplnxCore/docs/QuickSurfaceMeshFilter.md +++ b/src/Plugins/SimplnxCore/docs/QuickSurfaceMeshFilter.md @@ -4,81 +4,67 @@ Surface Meshing (Generation) -## Deprecation Notice +## ⚠ Deprecation Notice -The "SurfaceNets" filter should be used instead. Search the filter list for "Surface Nets". +**This filter is deprecated.** Use the [Surface Nets](SurfaceNetsFilter.md) filter instead. Surface Nets produces a smoother mesh (no stair-stepping), runs faster, and includes smoothing in a single pass. This filter is retained for compatibility with legacy pipelines. ## Description -This **Filter** generates a **Triangle Geometry** from a grid **Geometry** (either an **Image Geometry** or a **RectGrid Geometry**) that represents a surface mesh of the present **Features**. The algorithm proceeds by creating a pair of **Triangles** for each face of the **Cell** where the neighboring **Cells** have a different **Feature** Id value. The meshing operation is extremely quick but can result in a surface mesh that is very "stair stepped". The user is encouraged to use a smoothing operation to reduce this "blockiness". +This **Filter** generates a **Triangle Geometry** surface mesh from a grid **Geometry** (Image or Rectilinear Grid). For every cell face shared between two different **Features** (i.e., a Feature boundary), the filter emits two triangles, producing the *stair-stepped* surface that defines the boundary of each Feature. -The user may choose any number of **Cell Attribute Arrays** to transfer to the created **Triangle Geometry**. The **Faces** will gain the values of the **Cells** from which they were created. Currently, the **Filter** disallows the transferring of data that has a *multi-dimensional* component dimensions vector. For example, scalar values and vector values are allowed to be transferred, but N x M matrices cannot currently be transferred. +The resulting mesh is "blocky" because each triangle aligns with a voxel face. To smooth it, apply [Laplacian Smoothing](LaplacianSmoothingFilter.md) afterward -- or, preferably, use [Surface Nets](SurfaceNetsFilter.md), which combines meshing and smoothing in one step. -This filter will ensure that the smaller of the 2 **FaceLabel** values will always be in the first component (component[0]). This will allow assumptions made in downstream filters to continue to work correctly. +![Example Quick Mesh Output](Images/QuickSurface_Output.png) -This filter attempts to repair the windings for a mesh. This may not be possible due to the nature of how meshes are stored in the software. See Verify Traingle Winding documentation for detailed breakdown of nuance. +*Quick Surface Mesh output without smoothing.* -For more information on surface meshing, visit the tutorial. +![Example Quick Mesh Output](Images/QuickSurface_Smooth_Output.png) ---------------- +*Quick Surface Mesh output with Laplacian Smoothing applied.* -![Example Quick Mesh Output](Images/QuickSurface_Output.png) +### Cell Data Transfer -Quick Surface Mesh output **without** any extra smoothing applied +The user may select any number of **Cell Attribute Arrays** to transfer onto the new **Triangle Geometry**. Each output **Face** inherits the values of the **Cell** it came from. Only scalar and vector arrays can be transferred; multi-dimensional component shapes (e.g., N×M matrices) are not supported. ---------------- +### Face Labels Convention -![Example Quick Mesh Output](Images/QuickSurface_Smooth_Output.png) +Each triangle gets a 2-component *Face Labels* attribute storing the two Feature IDs on either side of the boundary. The filter guarantees the smaller Feature ID is in component 0, so downstream filters can rely on a consistent ordering. -Quick Surface Mesh output **with** Laplacian Smoothing filter applied. +If a triangle borders the outer volume rather than a real Feature (i.e., the cell on one side is outside the geometry), one of its Face Labels is set to **-1**. ---------------- +### Node Types -![NodeType = 2](Images/QuickMesh_NodeType_2.png) +A *Node Type* vertex array is produced classifying each vertex by its mesh role: + +| Value | Description | +|-------|-------------| +| 2 | Vertex on the interior of a grain face | +| 3 | Vertex on a triple line (3 grains meet) | +| 4 | Vertex on a quadruple point (4 grains meet) | +| 12 | Vertex on the exterior of the mesh, on a grain face | +| 13 | Vertex on the exterior of the mesh, on a triple line | +| 14 | Vertex on the exterior of the mesh, on a quadruple point | -NodeType = 2 +![NodeType = 2](Images/QuickMesh_NodeType_2.png) ---------------- +*Node Type 2 -- interior face vertex.* ![NodeType = 3](Images/QuickMesh_NodeType_3.png) -NodeType = 3 - ---------------- +*Node Type 3 -- triple line vertex.* ![NodeType = 4](Images/QuickMesh_NodeType_4.png) -NodeType = 4 +*Node Type 4 -- quadruple point vertex.* ---------------- +### Winding -### Node Types +The filter attempts to repair mesh windings so that triangle normals point outward consistently. This may not always succeed -- see [Verify Triangle Winding](VerifyTriangleWindingFilter.md) for cases where the mesh storage scheme prevents fully consistent windings. -One of the arrays to come out of the algorithm is the "Node Type" vertex array. This array uses a value to label each vertex as to what kind of node it was determined to be during the meshing process. +### Required Input Sources -| Value | Description | -|-------|-------------| -| 2 | Node within the interior of the grain face. | -| 3 | Node along a triple line | -| 4 | Node that is a Quadruple point | -| 12 | Node that is on the exterior of the mesh | -| 13 | Node that is on the exterior of the mesh and is a triple line | -| 14 | Node that is on the exterior of the mesh and is a quadruple point | - -### Exterior or Boundary Triangles - -Each triangle that is created will have an 2 component attribute called `Face Labels` that represent the Feature ID on either -side of the triangle. If one of the triangles represents the border of the virtual box then one of the FaceLables will -have a value of -1. - -## Notes - -The Quick Mesh algorithm is very crude and naive in its implementation. This filter -along with the Laplacian Smoothing filter can give you reasonable results. The -newer filter that should replace both the Quick Mesh and the Laplacian Smoothing -filter is the "Surface Nets" surface meshing algorithm. This will create the surface -mesh and smooth in a single filter and give subjectively better results and perform -much faster at both. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Image Geometry** -- typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. ## Comparison of Surface Meshing Filters diff --git a/src/Plugins/SimplnxCore/docs/RandomizeFeatureIdsFilter.md b/src/Plugins/SimplnxCore/docs/RandomizeFeatureIdsFilter.md index f26616aacc..c45c6a50d5 100644 --- a/src/Plugins/SimplnxCore/docs/RandomizeFeatureIdsFilter.md +++ b/src/Plugins/SimplnxCore/docs/RandomizeFeatureIdsFilter.md @@ -8,13 +8,21 @@ Core (Filters) ***WARNING:** This filter can throw a pipeline terminating error (at runtime) if the number of tuples in the supplied Feature `Attribute Matrix` is less than the max value in the Feature Ids `DataArray`* -This filter will randomize a user selected "Feature Ids" array and update every container (`DataArray`, `NeighborList`, and `StringArray`) in the feature `Attribute Matrix`. This does not generate random data but instead uses the existing values and swaps the positions of the values in the array. The intended use case is primarily for visualization, so feature data does not appear as a smooth gradient. +This filter will randomize a user selected **Feature Ids** array and update every container (`DataArray`, `NeighborList`, and `StringArray`) in the Feature **Attribute Matrix**. This does not generate random data but instead uses the existing values and swaps the positions of the values in the array. The intended use case is primarily for visualization, so feature data does not appear as a smooth gradient. + +**Feature Ids** are per-cell integer labels that assign each element (voxel) of a geometry to a *Feature* (for example, a grain). The Feature **Attribute Matrix** is the container holding one tuple per Feature; its per-Feature **Attribute Arrays** (such as sizes, phases, or average orientations) and any `NeighborList` (a variable-length list of each Feature's neighbors) are re-ordered consistently with the new Feature Id assignment so the data stays internally coherent. + +This filter does not expose a random-seed parameter, so the shuffle is **not reproducible** from run to run. If you need a deterministic visualization, apply the randomization once and persist the result rather than re-running it. + +### Required Input Sources + +- A **Feature Ids** array, typically produced by a feature-segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md), and the matching Feature **Attribute Matrix** that array indexes into. % Auto generated parameter table will be inserted here ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/ReadBinaryCTNorthstarFilter.md b/src/Plugins/SimplnxCore/docs/ReadBinaryCTNorthstarFilter.md index 327b8b3aba..2096bd7e7f 100644 --- a/src/Plugins/SimplnxCore/docs/ReadBinaryCTNorthstarFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadBinaryCTNorthstarFilter.md @@ -2,13 +2,13 @@ ## Group (Subgroup) -IOFilters (Input) +IO (Input) ## Description -This **Filter** will import a NorthStar Imaging data set consisting of a single .nsihdr and one or more .nsidat files. The data is read into an Image Geometry. The user can import a subvolume instead of reading the entire data set into memory. +This **Filter** will import a NorthStar Imaging computed tomography (CT) data set consisting of a single .nsihdr and one or more .nsidat files. The data is read into an **Image Geometry**. The scan intensities are stored in a single-component `float32` array (default name *Density*) inside a **Cell Attribute Matrix** (default name *CT Scan Data*). -The user should note that when using the subvolume feature that the ending voxels are **inclusive**. +The user can import a subvolume instead of reading the entire data set into memory. The subvolume start and end values are specified in **voxels** (zero-based), and both the starting and ending voxels are **inclusive**. The .nsihdr file will be read during preflight and the .nsidat file(s) will be extracted from there. The expectation is that the .nsidat files are in the same directory as the .nsihdr files. @@ -18,6 +18,10 @@ The *Length Unit* parameter sets the physical units associated with the **Image Yoctometer, Zeptometer, Attometer, Femtometer, Picometer, Nanometer, Micrometer, Millimeter, Centimeter, Decimeter, Meter, Decameter, Hectometer, Kilometer, Megameter, Gigameter, Terameter, Petameter, Exameter, Zettameter, Yottameter, Angstrom, Mil, Inch, Foot, Mile, Fathom, Unspecified, Unknown. +## Required Input Sources + +None — this filter reads directly from a `.nsihdr`/`.nsidat` file set on disk. + % Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/ReadCSVFileFilter.md b/src/Plugins/SimplnxCore/docs/ReadCSVFileFilter.md index 064a248e34..d23da621dd 100644 --- a/src/Plugins/SimplnxCore/docs/ReadCSVFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadCSVFileFilter.md @@ -8,51 +8,55 @@ IO (Input) This **Filter** reads text data from any text-based file and imports the data into DREAM3D-NX-style arrays. The user specifies which file to import, how the data is formatted, what to call each array, and what type each array should be. -*Note:* This **Filter** is intended to read data that is column-oriented, such that each created DREAM3D-NX array corresponds to a column of data in the text file. Therefore, this **Filter** will only import scalar arrays. If multiple columns are in fact different components of the same array, then the columns may be imported as separate arrays and then combined in the correct order using the Combine Attribute Arrays **Filter**. +*Note:* This **Filter** is intended to read data that is column-oriented, such that each created DREAM3D-NX array corresponds to a column of data in the text file. Therefore, this **Filter** will only import scalar arrays. If multiple columns are in fact different components of the same array, then the columns may be imported as separate arrays and then combined in the correct order using the [Combine Attribute Arrays](CombineAttributeArraysFilter.md) filter. ### Filling Out The Inputs The user first selects the **Input Text File** path, which then enables the rest of the interface. -![Input Text File Field](Images/Read_CSV_1.png) +![Selecting the input text file path](Images/Read_CSV_1.png) If the chosen **Input Text File** already has headers inside the file, the user can select the **Input File Has Headers** checkbox. This enables the **Headers Line Number** spin box where the user can select which line of the file contains the headers. *NOTE*: The interface only allows importing data starting at the line after the chosen **Headers Line Number**. So, in the example below, the **Headers Line Number** is set to 1, so **Start Import Line Number** defaults to 2 and has a range of 2-297 (this particular input file has 297 total lines). The max range of **Headers Line Number** is, of course, set to 296 so that at least 1 line can be imported. -![Input Text File Field](Images/Read_CSV_2.png) +![Setting the headers line number and start import line number](Images/Read_CSV_2.png) The user can choose how the data is delimited: comma (,), tab, semicolon (;) or space ( ). The user may also elect to ignore consecutive delimiters, which treats consecutive delimiters as one delimiter. -![Input Text File Field](Images/Read_CSV_3.png) +![Choosing the column delimiter](Images/Read_CSV_3.png) The user can select the number of preview lines available by changing the **Number of Preview Lines** spin box. The range in the example is set to 1-296 because the import is currently starting at row 2 (from **Start Import Line Number** spin box). -![Input Text File Field](Images/Read_CSV_4.png) +![Adjusting the number of preview lines](Images/Read_CSV_4.png) The user can then set the data format for each column. Selecting one or more columns will enable the **Column Data Type** combo box, where you can choose a data type or decide to skip importing specific columns as well. -![Input Text File Field](Images/Read_CSV_5.png) -![Input Text File Field](Images/Read_CSV_6.png) +![Selecting columns to set the column data type](Images/Read_CSV_5.png) +![Choosing a data type for the selected columns](Images/Read_CSV_6.png) If the **Input File Has Headers** checkbox is OFF, then it is also possible to double-click the headers in the Preview Table to edit them. These values will be used as the name of the **Data Array** in DREAM3D-NX. *NOTE:* Editing table headers is only available when the **Input File Has Headers** checkbox is OFF. If the **Input File Has Headers** checkbox is ON, then the headers will be read from the **Headers Line Number** in the data file, and the table headers will not be editable. -![Input Text File Field](Images/Read_CSV_7.png) +![Editing column header names in the preview table](Images/Read_CSV_7.png) The user can select the tuple dimensions that will be applied to the imported arrays. -![Input Text File Field](Images/Read_CSV_8.png) +![Setting the tuple dimensions for the imported arrays](Images/Read_CSV_8.png) The imported arrays can be stored in an existing attribute matrix or data group, or a new attribute matrix can be created. -![Input Text File Field](Images/Read_CSV_9.png) +![Choosing the destination attribute matrix or data group](Images/Read_CSV_9.png) Afterwards, you end up with a data structure that looks like this: -![Input Text File Field](Images/Read_CSV_10.png) +![Resulting data structure after import](Images/Read_CSV_10.png) + +## Required Input Sources + +None — this filter reads directly from a text/CSV file on disk. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ReadDREAM3DFilter.md b/src/Plugins/SimplnxCore/docs/ReadDREAM3DFilter.md index fceb2b32e7..4ad0f9161f 100644 --- a/src/Plugins/SimplnxCore/docs/ReadDREAM3DFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadDREAM3DFilter.md @@ -1,8 +1,28 @@ # Read DREAM3D-NX File +## Group (Subgroup) + +IO (Input) + ## Description -This **Filter** reads the data structure from an hdf5 file with the .dream3d extension. This filter is capable of reading from legacy .dream3d files also. +This filter reads data from a `.dream3d` file into the pipeline. A `.dream3d` file is an HDF5-based file (HDF5 is a portable, self-describing container format for large scientific datasets) that stores a complete DREAM3D-NX **DataStructure** — its geometries, **Attribute Matrix** groups, and **Data Array**s. + +### Selective (Partial) Import + +The filter does not have to read the entire file. Through the *Import File Path* parameter, the user can browse the structure of the selected `.dream3d` file and choose exactly which data objects to import. Selecting only the objects that are needed avoids loading large arrays that the rest of the pipeline does not use, which saves memory and time. To import everything, simply select all objects. + +### How Imported Objects Are Added + +The selected objects are added into the pipeline's current **DataStructure** at the same paths they had in the file. If an object being imported has the same path as an object already present in the current **DataStructure**, the existing object is replaced (overwritten) by the imported one, so take care when reading into a non-empty **DataStructure**. Any pipeline metadata stored in the file may also be read when the file is opened. + +### Legacy Files + +This filter can also read **legacy** `.dream3d` files — those written by the older DREAM3D 6.x / SIMPL-era applications. Such files use an earlier internal layout, and this filter converts them to the current **DataStructure** format on import. + +### Required Input Sources + +None — this filter reads directly from a `.dream3d` file on disk. % Auto generated parameter table will be inserted here @@ -12,4 +32,8 @@ ALL ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** + +## DREAM3D-NX Help + +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/ReadDeformKeyFileV12Filter.md b/src/Plugins/SimplnxCore/docs/ReadDeformKeyFileV12Filter.md index 925989129e..4c1e1cb721 100644 --- a/src/Plugins/SimplnxCore/docs/ReadDeformKeyFileV12Filter.md +++ b/src/Plugins/SimplnxCore/docs/ReadDeformKeyFileV12Filter.md @@ -6,9 +6,43 @@ SimulationIO (SimulationIO) ## Description -This **Filter** reads DEFORM v12 key files and saves the data in a newly created **Data Container**. +This filter reads a **DEFORM** version 12 "key file" and imports its mesh and field data into a newly created **Quad Geometry**. **DEFORM** is a commercial finite-element simulation package for metal-forming processes (such as forging, extrusion, and rolling). A DEFORM *key file* is the text results file the software exports; it contains the simulation mesh together with the values of physical variables computed at each node and element. -It reads the quadrilateral mesh data (nodal coordinates and connectivity), and the value of variables such as stress, strain, ndtmp, etc at cells and nodes. +### What the Filter Creates + +The filter builds a **Quad Geometry** — a surface mesh made of four-sided (quadrilateral) elements — from the key file. The **Quad Geometry** holds: + +- **Node coordinates**: the positions of the mesh nodes (vertices). +- **Connectivity**: which four nodes form each quadrilateral element. + +Alongside the geometry, the filter creates two attribute groups for the field variables stored in the key file: + +- **Vertex (node) data**: variables defined at each node, such as `ndtmp` (nodal temperature). +- **Cell (element) data**: variables defined at each element, such as stress and strain. + +The units of each imported variable are whatever DEFORM exported them in (for example temperature in degrees Celsius, or stress in MPa); the filter does not convert units. + +### Example Input Structure + +A DEFORM v12 key file is a keyword-driven text file. Each block begins with a keyword followed by the data for that block — for example, a node-coordinate block, an element-connectivity block, and one block per nodal or element variable: + +```text +RZ + 1 0.000000 0.000000 + 2 0.500000 0.000000 + .. +ELMCON + 1 1 2 5 4 + .. +NDTMP + 1 20.000000 + 2 20.000000 + .. +``` + +### Required Input Sources + +None — this filter reads directly from a DEFORM v12 key file on disk. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ReadHDF5DatasetFilter.md b/src/Plugins/SimplnxCore/docs/ReadHDF5DatasetFilter.md index 6247254de6..106d991dee 100644 --- a/src/Plugins/SimplnxCore/docs/ReadHDF5DatasetFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadHDF5DatasetFilter.md @@ -6,37 +6,59 @@ Core (IO/Read) ## Description -This **Filter** allows the user to import datasets from an HDF5 file and store them as attribute arrays in DREAM3D-NX. This filter supports importing datasets with any number of dimensions, as long as the created attribute array's total number of components and the tuple count of the destination attribute matrix multiply together to match the HDF5 dataset's total number of elements. +This filter imports one or more datasets from an HDF5 file and stores each one as a **Data Array** in DREAM3D-NX. HDF5 (Hierarchical Data Format version 5) is a binary file format that organizes named datasets inside a tree of groups, much like files inside folders on a disk. -The component dimensions are input as a comma-delimited list of dimensional values. For example: +When the filter is configured, the user browses the structure of the selected HDF5 file and checks one or more datasets to import. Multiple datasets can be selected and imported in a single pass; each checked dataset becomes its own Data Array. For every checked dataset the user supplies how that dataset's elements should be split into **tuple dimensions** and **component dimensions**: -1. 3, 4 = 3x4 -2. 5, 2, 1 = 5x2x1 -3. 6 = 6 +- **Tuple dimensions** describe how many elements (tuples) the array holds — for example, the number of voxels or rows of data. +- **Component dimensions** describe how many values belong to each tuple — for example, a 3-component vector stores 3 values per tuple. -### Examples +![Fig. 1: The flat HDF5 dataset is reshaped into a Data Array of tuples × components; the element count must equal (product of tuple dimensions) × (product of component dimensions).](Images/ReadHDF5Dataset_TuplesComponents.png) -1. Suppose we have a 1D dataset in an HDF5 file with dimension **12,000**. - We can input component dimensions of **5, 2, 2** and set the destination attribute matrix tuple dimensions to **35 x 5 x 2 x 2** +The filter places the imported array either at the top level of the **Data Structure** or, if the user selects an existing **Data Group** or **Attribute Matrix** as the parent, inside that container. When an Attribute Matrix is chosen as the parent, the tuple dimensions are taken automatically from that Attribute Matrix and do not need to be entered. -+ The total number of elements for the HDF5 dataset is 12,000. -+ The total number of tuples in the destination attribute matrix is 35\*5\*2\*2 = 700. -+ The total number of components for the created attribute array is 5\*2\*2 = 20. -+ The total number of elements for the created attribute array will be 700\*20 = 14,000. +### How It Works -14,000 does not equal 12,000, so this will result in a preflight error. +The import only succeeds when the math is consistent: the total number of elements actually stored in the HDF5 dataset must equal the number of tuples multiplied by the number of components per tuple. -2. Suppose we have a 3D dataset in an HDF5 file with dimensions **1 x 16 x 1001 x 1001**. -We can input component dimensions of **2** and set our destination attribute matrix tuple dimensions to **134 x 67**. +``` +HDF5 dataset element count == (product of tuple dimensions) x (product of component dimensions) +``` -+ The total number of elements for the HDF5 dataset is 1\*16\*1001\*1001 = 16,032,016. -+ The total number of tuples in the destination attribute matrix is 8\*1001\*1001 = 8,016,008. -+ The total number of components for the created attribute array is 2. -+ The total number of elements for the created attribute array will be 8,016,008\*2 = 16,032,016. -+ The total number of elements of the created attribute array (16,032,016) equals the total number of elements of the HDF5 dataset (16,032,016), so we can import this dataset without errors (see below). +If these two totals do not match, the filter reports a preflight error and nothing is imported. + +The component dimensions are entered as a comma-separated list. For example: + +1. `3, 4` means 3 x 4 = 12 components per tuple +2. `5, 2, 1` means 5 x 2 x 1 = 10 components per tuple +3. `6` means 6 components per tuple + +### Worked Examples + +**Example 1 (valid):** Suppose an HDF5 file contains a 1D dataset with **12,000** elements. + +- The user enters component dimensions of `2` (so 2 components per tuple). +- The user enters tuple dimensions of `6000` (so 6,000 tuples). +- Check: 6,000 tuples x 2 components = 12,000 elements, which equals the HDF5 dataset element count of 12,000. The dataset imports successfully. + +**Example 2 (invalid):** Suppose an HDF5 file contains a 1D dataset with **12,000** elements. + +- The user enters component dimensions of `5, 2, 2` (so 5 x 2 x 2 = 20 components per tuple). +- The user enters tuple dimensions of `35, 5, 2, 2` (so 35 x 5 x 2 x 2 = 700 tuples). +- Check: 700 tuples x 20 components = 14,000 elements, which does not equal the HDF5 dataset element count of 12,000. The filter reports a preflight error. + +**Example 3 (valid, multi-dimensional dataset):** Suppose an HDF5 file contains a dataset whose stored dimensions are **16 x 1001 x 1001**, for a total of 16 x 1001 x 1001 = 16,032,016 elements. + +- The user enters component dimensions of `2` (so 2 components per tuple). This means there must be 16,032,016 / 2 = 8,016,008 tuples. +- The user enters tuple dimensions of `8, 1001, 1001` (so 8 x 1001 x 1001 = 8,016,008 tuples). +- Check: 8,016,008 tuples x 2 components = 16,032,016 elements, which equals the HDF5 dataset element count of 16,032,016. The dataset imports successfully. ![Example Image](Images/ImportHDF5Dataset_ui.png) +## Required Input Sources + +None — this filter reads directly from an external `.h5`/`.hdf5` file on disk. The imported array may optionally be placed into an existing **Data Group** or **Attribute Matrix** if one is selected as the parent. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ReadImageFilter.md b/src/Plugins/SimplnxCore/docs/ReadImageFilter.md index 8684f93a39..b73401e0de 100644 --- a/src/Plugins/SimplnxCore/docs/ReadImageFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadImageFilter.md @@ -6,7 +6,9 @@ IO (Input) ## Description -Reads a single 2D image file into a newly created Image Geometry. This filter does not depend on ITK. It uses stb_image for PNG/JPEG/BMP files and libtiff for TIFF files. +Reads a single 2D image file into a newly created **Image Geometry**. To read a numbered sequence of slices into a 3D volume instead, use [Read Images [3D Stack]](ReadImageStackFilter.md). + +This filter does not depend on ITK. It uses stb_image for PNG/JPEG/BMP files and libtiff for TIFF files. The following image types are supported: @@ -17,7 +19,7 @@ The following image types are supported: ### Origin & Spacing Caveats -The user can optionally override the origin and spacing (length units per pixel) for the imported image. The default values from the input file will be used unless the user explicitly enables the "Set Origin" and/or "Set Spacing" options. +The user can optionally override the origin and spacing for the imported image. *Spacing* is the physical size of each pixel and *Origin* is the coordinate of the lower-left corner of the geometry; both are expressed in the same physical length units (for example microns). The default values from the input file will be used unless the user explicitly enables the "Set Origin" and/or "Set Spacing" options. When setting a custom origin, the user can choose whether to place the origin at the corner of the geometry (default) or at the center of the geometry by enabling the "Put Input Origin at the Center of Geometry" option. @@ -50,6 +52,10 @@ The user can crop the incoming 2D image using the Cropping Options section. The Both subvolume cropping types have checkboxes to turn on/off cropping in the X and Y dimensions. For example, if **Physical Subvolume** is selected and only **Crop Y Dimension** is enabled, the image will be cropped in the Y dimension only using physical coordinate bounds. +## Required Input Sources + +None — this filter reads directly from a single image file on disk. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ReadImageStackFilter.md b/src/Plugins/SimplnxCore/docs/ReadImageStackFilter.md index 8bfdb21328..f58c87e044 100644 --- a/src/Plugins/SimplnxCore/docs/ReadImageStackFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadImageStackFilter.md @@ -1,4 +1,4 @@ -# Read Image Stack +# Read Images [3D Stack] ## Group (Subgroup) @@ -6,7 +6,7 @@ IO (Input) ## Description -Reads a numbered sequence of 2D image files and stacks them into a 3D volume. This filter does not depend on ITK; it uses stb_image for PNG/JPEG/BMP files and libtiff for TIFF files. The per-slice read is delegated to the **Read Image** filter, so any option available there (data type conversion, origin/spacing overrides, 2D cropping) is also available per-slice here. +Reads a numbered sequence of 2D image files and stacks them into a 3D volume. This filter does not depend on ITK; it uses stb_image for PNG/JPEG/BMP files and libtiff for TIFF files. The per-slice read is delegated to the [Read Image](ReadImageFilter.md) filter, so any option available there (data type conversion, origin/spacing overrides, 2D cropping) is also available per-slice here. Supported image types: @@ -15,6 +15,10 @@ Supported image types: - BMP (via stb) - TIFF / TIF (via libtiff) +### File List and Slice Ordering + +The stack is defined by a file list rather than a single file. The user supplies an input directory plus a numeric naming pattern (a file prefix, suffix, file extension, and the start/end index with a padding digit count). The filter expands that pattern into an ordered list of files, where each file becomes one Z-slice of the resulting 3D volume. The first file in the list becomes Z = 0, the next file Z = 1, and so on, so the numeric ordering of the file names directly determines the slice order along the Z axis. The total number of files becomes the Z dimension of the created **Image Geometry**. + ### Processing Order Image operations are applied in the following order: @@ -27,7 +31,7 @@ Image operations are applied in the following order: ### Origin & Spacing Caveats -The filter will create a new Image Geometry. The user can optionally override the origin and spacing for the created geometry. The default values from the input files will be used unless the user explicitly enables the "Set Origin" and/or "Set Spacing" options. +The filter will create a new **Image Geometry**. The user can optionally override the origin and spacing for the created geometry. *Spacing* is the physical size of each voxel and *Origin* is the coordinate of the lower-left-back corner of the volume; both are expressed in the same physical length units (for example microns). The default values from the input files will be used unless the user explicitly enables the "Set Origin" and/or "Set Spacing" options. ### Origin & Spacing Processing @@ -64,7 +68,7 @@ The user can optionally resample each image as it is read in. The *Resample Imag ### Grayscale Conversion -When *Convert To GrayScale* is enabled, RGB image data is converted to a scalar grayscale array using the luminosity algorithm with the supplied *Color Weighting* values. Only uint8 input data is supported for grayscale conversion. +When *Convert To GrayScale* is enabled, RGB image data is converted to a scalar grayscale array using the luminosity algorithm. The luminosity algorithm computes each gray value as a weighted sum of the red, green, and blue channels (gray = wR·R + wG·G + wB·B), where the weights come from the supplied *Color Weighting* values (dimensionless). This produces a perceptually weighted brightness rather than a simple channel average. Only uint8 input data is supported for grayscale conversion. ### Output Data Type @@ -88,6 +92,10 @@ Both subvolume cropping types have checkboxes to turn on/off cropping in each of The user can select to flip the images about the X or Y axis during import. +## Required Input Sources + +None — this filter reads from a file list of image files on disk. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ReadNIfTIFileFilter.md b/src/Plugins/SimplnxCore/docs/ReadNIfTIFileFilter.md index 983a12d4cb..eabf585ffb 100644 --- a/src/Plugins/SimplnxCore/docs/ReadNIfTIFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadNIfTIFileFilter.md @@ -15,10 +15,10 @@ The filter transparently handles both uncompressed (`.nii`) and gzipped comparing `sizeof_hdr` against the expected value of 348. NIfTI-1 allows a variable-length extension block between the 348-byte -header and the voxel data. The filter honors `vox_offset` and seeks -past the extension block before reading voxels — any custom extension -metadata (DICOM attributes, AFNI XML, etc.) is **skipped, not -preserved**. +header and the voxel data. The filter honors `vox_offset` (the byte offset +in the file where the voxel data begins) and seeks past the extension +block before reading voxels — any custom extension metadata (DICOM +attributes, AFNI XML, etc.) is **skipped, not preserved**. ### Supported voxel datatypes @@ -41,10 +41,19 @@ Complex and 128-bit float types are not currently supported. ### Orientation -When *Use Stored Affine Transform* is enabled (the default), the filter uses +NIfTI stores up to two affine transforms that map voxel indices to physical +space: the `sform` ("standard" transform, a general affine matrix) and the +`qform` ("quaternion" transform, a rigid rotation plus translation). When +*Use Stored Affine Transform* is enabled (the default), the filter uses the NIfTI `sform` transform (if `sform_code > 0`) or `qform` transform (if `qform_code > 0`) to set the **Image Geometry** origin and spacing. If neither -is set, the filter falls back to `pixdim[1..3]` for spacing and a zero origin. +is set, the filter falls back to `pixdim[1..3]` (the per-axis voxel size +stored in the header) for spacing and a zero origin. + +The spacing units are whatever the source file recorded (most commonly +millimeters for medical NIfTI data) and are **not** converted by this +filter. Treat the resulting **Image Geometry** spacing as being in the +file's native physical units. simplnx Image Geometries are axis-aligned; if the stored transform contains a non-trivial rotation, only the spacing (column magnitudes) and origin are @@ -53,8 +62,10 @@ native storage order. ### Data scaling -When *Apply Scaling Transform* is enabled and the header specifies a -non-trivial scaling (`scl_slope != 0` and (`scl_slope != 1` or +NIfTI can store a linear intensity rescaling defined by two header fields: +`scl_slope` (the multiplicative slope) and `scl_inter` (the additive +intercept). When *Apply Scaling Transform* is enabled and the header +specifies a non-trivial scaling (`scl_slope != 0` and (`scl_slope != 1` or `scl_inter != 0`)), the filter computes `y = scl_slope * x + scl_inter` at read time and promotes the output array to `float32`. Per the NIfTI-1 specification, scaling is never applied to `RGB24` or `RGBA32` data and a @@ -129,18 +140,6 @@ version: In short: use cropping to keep the output DataArray small, not to make large compressed files read faster. -## Parameters - -| Parameter | Type | Default | Description | -|---|---|---|---| -| Input NIfTI File | File path | — | Path to the `.nii` or `.nii.gz` file to read. | -| Use Stored Affine Transform | Bool | `true` | Use `sform`/`qform` to set origin + spacing when present. | -| Apply Scaling Transform | Bool | `true` | Apply `y = slope*x + inter` at read time; promotes to float32. | -| Cropping Options | CropGeometry | `NoCropping` | Optional voxel-index or physical-coordinate sub-volume. Only the selected region is retained in the output DataArray; data outside the region is read but never stored. | -| Image Geometry | Data Path | `NIfTI Image` | Path to the created Image Geometry. | -| Cell Attribute Matrix Name | String | `Cell Data` | Name of the attribute matrix holding voxel values. | -| Image Data Array Name | String | `ImageData` | Name of the array receiving voxel values. | - ## Caveats * Only the single-file NIfTI-1 format (magic `n+1`) is supported. The @@ -163,7 +162,11 @@ large compressed files read faster. * `start <= end` is required on each cropped axis; reversed ranges are rejected at parameter-validation time. -% Auto generated parameter table will be inserted here +## Required Input Sources + +None — this filter reads directly from a `.nii` or `.nii.gz` file on disk. + +% Auto generated parameter table will be inserted here ## Reference diff --git a/src/Plugins/SimplnxCore/docs/ReadRawBinaryFilter.md b/src/Plugins/SimplnxCore/docs/ReadRawBinaryFilter.md index 108db506ba..da7fc63087 100644 --- a/src/Plugins/SimplnxCore/docs/ReadRawBinaryFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadRawBinaryFilter.md @@ -75,6 +75,10 @@ The output array can be placed in two ways: 2. **Standalone**: Select an output path that is not inside an Attribute Matrix (e.g., `MyArray`). The user must provide explicit tuple dimensions via the *Set Tuple Dimensions* checkbox and table. +### Required Input Sources + +None — this filter reads directly from a raw binary file on disk. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ReadStlFileFilter.md b/src/Plugins/SimplnxCore/docs/ReadStlFileFilter.md index 0e5de47d6e..a6a0c961d4 100644 --- a/src/Plugins/SimplnxCore/docs/ReadStlFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReadStlFileFilter.md @@ -6,40 +6,44 @@ IO (Input) ## Description -This **Filter** will read a binary STL File and create a **Triangle Geometry** object in memory. The STL reader is very strict to the STL specification. An explanation of the STL file format can be found on [Wikipedia](https://en.wikipedia.org/wiki/STL). The structure of the file is as follows: +An STL file describes a 3D surface as a list of triangles. This filter reads a **binary** STL file from disk and creates a **Triangle Geometry** (a surface mesh made of triangular faces) in memory, along with a *Face Normals* array (one 3-component normal vector per triangle) and, optionally, a *Face Labels* array. + +The vertex coordinates in an STL file are plain numbers with no embedded unit. They are in whatever length unit the file's author intended (often millimeters or inches), so the reader treats them as dimensionless and copies them through unchanged. + +**Only binary STL files are supported. ASCII STL files are not read by this filter; the filter will report an error if given one.** An ASCII STL file can be converted to binary using a separate 3D mesh tool before reading. + +An explanation of the STL file format can be found on [Wikipedia](https://en.wikipedia.org/wiki/STL_(file_format)). The binary structure is: UINT8[80] Header - UINT32 Number of triangles + UINT32 Number of triangles foreach triangle REAL32[3] Normal vector REAL32[3] Vertex 1 REAL32[3] Vertex 2 REAL32[3] Vertex 3 - UINT16 Attribute byte count + UINT16 Attribute byte count end -The filter will look for specific header information to try and determine the vendor of the STL file. Certain vendors do not write STL files that adhere to the file spec. +The filter inspects the header to try to determine the vendor of the STL file, because some vendors do not write files that strictly follow the specification. -## IMPORANT NOTES: +## IMPORTANT NOTES -**It is very important that the "Attribute byte Count" is correct as DREAM3D-NX follows the specification strictly.** If you are writing an STL file be sure that the value for the "Attribute byte count" is *zero* (0). If you chose to encode additional data into a section after each triangle then be sure that the "Attribute byte count" is set correctly. DREAM3D-NX will obey the value located in the "Attribute byte count". +The reader follows the STL specification strictly and obeys the "Attribute byte count" value written after each triangle. If you are writing an STL file, set the "Attribute byte count" to *zero* (0) unless you are deliberately encoding extra data after each triangle, in which case the count must exactly match the number of extra bytes. An incorrect "Attribute byte count" is the most common cause of read failures, because the reader will skip the number of bytes the file claims are present. -## Known Vendors who Write out of spec STL Files +## Known Vendors Who Write Out-of-Spec STL Files - Materialise Magics [https://www.materialise.com/en/industrial/software/magics-data-build-preparation](https://www.materialise.com/en/industrial/software/magics-data-build-preparation) - The filter looks in the header for "COLOR=" and "MATERIAL=" strings in the header. + The filter looks in the header for "COLOR=" and "MATERIAL=" strings. - Creaform VXelements [https://www.creaform3d.com/en/metrology-solutions/3d-applications-software-platforms](https://www.creaform3d.com/en/metrology-solutions/3d-applications-software-platforms) - + The filter looks for "VXelements" in the header. -## Code to convert +## Code to Convert -If you find yourself in a situation where the STL File is non-conforming and is not made by one of the vendors above, this bit of Python -code can clean up the file. This makes the absolute assumption that the **ONLY** thing wrong with the STL file is that the trailing UINT16 value for -each triangle needs to be set to ZERO. +If you have a non-conforming STL file that was not made by one of the vendors above, the Python snippet below can clean it up. It assumes the **ONLY** problem with the file is that the trailing UINT16 "Attribute byte count" value for each triangle needs to be set to zero. import struct @@ -48,24 +52,24 @@ each triangle needs to be set to ZERO. # Read and copy header header = input_file.read(80) output_file.write(header) - + # Read number of triangles num_triangles = struct.unpack(' [Greater Than] [1]**: Targets **Cells** whose value is greater than the threshold. The replacement neighbor is the one with the lowest value among neighbors that fall below the threshold. +1. For every cell, compare its value of the *Selected Array* to the *Threshold Value* using the *Comparison Operator* (less-than or greater-than). +2. For each cell that passes the comparison (i.e., is flagged for replacement), examine its 6 face-neighbors. +3. Among the neighbors that do **not** pass the comparison, find the one with the maximum (when operator is `<`) or minimum (when operator is `>`) value of the same scalar. This is the "best" neighbor. +4. Copy **all** cell-level arrays in the same attribute matrix from that best neighbor into the flagged cell. -*Note:* By default, the **Filter** will run only one iteration of the cleanup. If the user selects the *Loop Until Gone* -option, then the **Filter** will run iteratively until no **Cells** exist that meet the users criteria. So, if a **Cell** -meets the threshold and so are all of its neighbors, then that **Cell** will not be changed during that iteration and -will remain unchanged until one of its neighbors gets changed by a **Cell** further away. +If a flagged cell has only flagged neighbors (i.e., none of its neighbors pass the threshold), it is left unchanged in this pass. -## Examples +### Comparison Operator -### TSL Data (.ang) File +- **< [Less Than] [0]**: Targets cells whose scalar is **less than** the threshold. Replacement neighbor is the one with the **highest** scalar value among neighbors that exceed the threshold. Use this for measures where higher = better (Confidence Index, Image Quality). +- **> [Greater Than] [1]**: Targets cells whose scalar is **greater than** the threshold. Replacement neighbor is the one with the **lowest** scalar value among neighbors that fall below the threshold. Use this for measures where lower = better (Mean Angular Deviation, scan error metrics). -When attempting to "clean up" EBSD data generated by EDAX/TSL the Attribute Array "Confidence Index" can be used. -Confidence Index is a measure of how confident in the indexing results given by the OIM Analysis software and ranges -from 0.0 (No confidence) to 1.0 (Absolute confidence). More information about the Confidence Index can be found in the -OIM analysis user manual. Typical inputs for TSL (.ang) Data might be the following. +### Loop Until Gone -| Filter Parameter | Value | -|------------------|-----------------------------------------------| -| Threshold Value | 0.1 | -| Operator | < | -| Selected Array | [DataContainer] / CellData / Confidence Index | -| Loop Until Gone | User dependent | +By default, the filter runs a **single pass**. If a flagged cell's neighbors are all flagged in that pass, the cell is left alone. Enabling *Loop Until Gone* repeats the algorithm until every flagged cell has been replaced (typically because flag-replacements propagate inward across multiple passes). + +### Caution: Flood Fill Behavior + +If the threshold is set too aggressively or the dataset has large contiguous regions of low-quality cells, *Loop Until Gone* can act like a flood-fill, propagating one neighbor's data across an entire region. The end result may bear little resemblance to the true microstructure. Always inspect the output and, if grain morphology has shifted dramatically, lower the *Threshold Value* or run a single pass. + +| Original Data | Threshold CI < 0.1 | After Running Filter | True Data | +|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------|----------------------------------------------| +| ![Original Data](Images/NeighborReplace_No_Cleanup.png) | ![Original Data. Black pixels have Confidence Index < 0.1](Images/NeighborReplace_No_Cleanup_Mask.png) | ![Text](Images/NeighborReplace_After_Cleanup.png) | ![Text](Images/NeighborReplace_Exemplar.bmp) | -Using these values says that for every cell that has a confidence index < 0.1 it's neighbor cells will be considered. If -the neighbor cell has a confidence > 0.1 AND is greater than the other neighbors then this cell's data will be copied -into the original cell data location. +The example above shows what happens when too much of the data is below threshold: most fine grains and twins do **not** match the true microstructure. -### Example EDAX Results +## Example Use Cases -**Reasonable Use of the Filter** +### Reasonable Use of the Filter | Original Data | | After Running Filter | True Data | |-----------------------------------------------------------|-----|-----------------------------------------------------|----------------------------------------------| | ![Original Data](Images/NeighborReplace_No_Cleanup_2.png) | | ![Text](Images/NeighborReplace_After_Cleanup_2.png) | ![Text](Images/NeighborReplace_Exemplar.bmp) | -**Example of Too Much Replacement** +### TSL Data (.ang) -- Using Confidence Index -| Original Data | Threshold CI < 0.1 | After Running Filter | True Data | -|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------|---------------------------------------------------|----------------------------------------------| -| ![Original Data](Images/NeighborReplace_No_Cleanup.png) | ![Original Data. Black pixels have Confidence Index < 0.1](Images/NeighborReplace_No_Cleanup_Mask.png) | ![Text](Images/NeighborReplace_After_Cleanup.png) | ![Text](Images/NeighborReplace_Exemplar.bmp) | +EDAX/TSL ANG files include a *Confidence Index* (CI) array that ranges from 0.0 (no confidence) to 1.0 (absolute confidence). To clean up cells with poor indexing, use: -Note how in the above use of the filter the grain morphology is substantially changed from the exemplar data. Except for -very large grains being similar most of the fine grains and twins are **NOT** reproduced from the original. +| Filter Parameter | Value | +|------------------|-----------------------------------------------| +| Threshold Value | 0.1 | +| Operator | < | +| Selected Array | [DataContainer] / CellData / Confidence Index | +| Loop Until Gone | User dependent | + +This says: for every cell with CI < 0.1, find the neighbor with the highest CI among those above 0.1, and copy that neighbor's data into the cell. -### Oxford/Bruker (.ctf) File +### Oxford/Bruker (.ctf) -- Using Error -Oxford Instruments and Bruker CTF data files do not include a "Confidence Index" measure. There are several measures -such as *Mean Angular Deviation (MAD)* or *Bands* but these values are not filled in or are defaulted to 0 (Zero) if the -scan point was not indexed. By using the *Error* value from the data file we can get the same effect as the EDAX -*Confidence Index*. The user would use the following input values: +CTF files do not include a Confidence Index, but they do have an *Error* value that defaults to 0 for indexed points and is non-zero for non-indexed points. This is the inverse direction from CI: | Filter Parameter | Value | |------------------|------------------------------------| @@ -74,14 +70,15 @@ scan point was not indexed. By using the *Error* value from the data file we can | Selected Array | [DataContainer] / CellData / Error | | Loop Until Gone | User dependent | -### Example Oxford/Bruker Results - | Original Data | After Running Filter | |---------------------------------------------------------|-------------------------------------------| | ![Original Data](Images/NeighborReplace_CTF_Before.png) | ![](Images/NeighborReplace_CTF_After.png) | -Note the large areas of unindexed pixels in the original image (black pixels) and how they are all filled in. The filter -can act much like a generic "flood fill" image processing algorithm if used improperly. +The black pixels in the original are unindexed cells (Error > 0) and are filled in by the filter. + +### Required Input Sources + +- **Selected Scalar Array** -- any single-component cell-level scalar suitable for thresholding. Common sources: confidence/quality arrays from [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), [Read CTF Data](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read ANG Data](../OrientationAnalysis/ReadAngDataFilter.md), or any computed per-cell scalar. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/RequireMinNumNeighborsFilter.md b/src/Plugins/SimplnxCore/docs/RequireMinNumNeighborsFilter.md index 5596f74021..887351a8c8 100644 --- a/src/Plugins/SimplnxCore/docs/RequireMinNumNeighborsFilter.md +++ b/src/Plugins/SimplnxCore/docs/RequireMinNumNeighborsFilter.md @@ -6,17 +6,27 @@ Processing (Cleanup) ## Description -This **Filter** sets the minimum number of contiguous neighboring **Features** a **Feature** must have to remain in the structure. Entering zero results in nothing changing. Entering a number larger than the maximum number of neighbors of any **Feature** generates an *error* (since all **Features** would be removed). The user needs to proceed conservatively here when choosing the value for the minimum to avoid accidentally exceeding the maximum. After **Features** are removed for not having enough neighbors, the remaining **Features** are *coarsened* iteratively, one **Cell** per iteration, until the gaps left by the removed **Features** are filled. Effectively, this is an isotropic **Feature** growth in the regions around removed **Features**. +This **Filter** removes **Features** that have fewer than the user-specified number of contiguous neighbors. The most common use case is cleaning up isolated single-feature islands left over from segmentation -- features whose surroundings turned out to be too sparsely connected to support a meaningful grain. After flagged features are removed, the remaining features grow outward via [isotropic coarsening](RequireMinimumSizeFeaturesFilter.md) until every cell is reassigned. -The **Filter** can be run in a mode where the minimum number of neighbors is applied to a single **Ensemble**. The user can select to apply the minimum to one specific **Ensemble**. +The threshold is a **count of contiguous neighbors** (a non-negative integer). Setting the threshold to 0 removes nothing. Setting it larger than the maximum number of neighbors any feature has produces an error (since all features would be removed). Inspect the *Number of Neighbors* output of [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) before choosing a threshold. + +### Apply to Single Phase + +When *Apply to Single Phase* is enabled, the threshold is applied only to features of the specified phase. Features of other phases are untouched regardless of how many neighbors they have. This is useful when isolated features are noise in one phase but meaningful in another. ## WARNING: Feature Data Will Become Invalid -By modifying the cell level data, any feature data that was previously computed will most likely be invalid at this point. Filters that compute feature level data should be rerun to ensure accurate final results from your pipeline. +By modifying cell-level data, any feature-level data that was previously computed will most likely be invalid after this filter runs. Re-run any downstream feature-level computation filters to ensure accurate results. ## WARNING: NeighborList Removal -If the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, those arrays will be **REMOVED** because those lists are now invalid. Re-run the *Find Neighbors* filter to re-create the lists. +If the Cell Feature **Attribute Matrix** contains any *NeighborList* arrays, they will be **removed** because the neighbor relationships have changed. Re-run [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) afterward to rebuild them. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Number of Neighbors** -- produced by [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md). +- **Feature Phases** (only when *Apply to Single Phase* is enabled) -- produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). % Auto generated parameter table will be inserted here @@ -24,7 +34,6 @@ If the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, tho + (02) Small IN100 Full Reconstruction - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/SimplnxCore/docs/RequireMinimumSizeFeaturesFilter.md b/src/Plugins/SimplnxCore/docs/RequireMinimumSizeFeaturesFilter.md index d3a1c185b3..f106557a1f 100644 --- a/src/Plugins/SimplnxCore/docs/RequireMinimumSizeFeaturesFilter.md +++ b/src/Plugins/SimplnxCore/docs/RequireMinimumSizeFeaturesFilter.md @@ -6,17 +6,43 @@ Processing (Cleanup) ## Description -This **Filter** removes **Features** that have a total number of **Cells** below the minimum threshold defined by the user. Entering a number larger than the largest **Feature** generates an *error* (since all **Features** would be removed). Hence, a choice of threshold should be carefully chosen if it is not known how many **Cells** are in the largest **Features**. After removing all the small **Features**, the remaining **Features** are isotropically coarsened to fill the gaps left by the small **Features**. +This **Filter** removes small **Features** from a segmented dataset and fills in the space they leave behind by expanding their neighbors. Features whose cell count is below the user-specified *Minimum Allowed Features Size* are erased; the remaining features grow outward into the erased cells until every cell is reassigned to a surviving feature. -The **Filter** can be run in a mode where the minimum number of neighbors is applied to a single **Ensemble**. The user can select to apply the minimum to one specific **Ensemble**. +This is typically used immediately after segmentation ([Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or similar) to discard spurious single-cell or few-cell "grains" that are almost always noise rather than real features. + +### How This Filter Works + +1. For each **Feature**, look up its cell count from the input *Feature Num. Cells* array. +2. If the feature's count is below the threshold, mark it for removal. All of its cells are temporarily set to Feature Id 0 ("unassigned"). +3. After all small features are removed, the remaining features are *isotropically coarsened* to fill the gaps. + +### What is Isotropic Coarsening? + +"Isotropic coarsening" is an iterative dilation that grows each surviving feature outward by one cell layer at a time, uniformly in all directions. On each pass, an unassigned cell is given the Feature Id of whichever neighbor feature touches it; if multiple features touch it, one is picked. The process repeats until no unassigned cells remain. The result is that every removed cell is absorbed into the closest surviving feature, with no preferred direction. + +### Minimum Size Units + +The *Minimum Allowed Features Size* is in **cells** (integer voxel count), not physical units. A threshold of 10 means "remove any feature with fewer than 10 cells," regardless of the image's spacing. To convert a physical-volume threshold into a cell count, divide by the product of the cell spacing (dx * dy * dz). + +Entering a number larger than the size of the largest feature produces an error, since every feature would be removed. If the size distribution is unknown, compute feature sizes first with [Compute Feature Sizes](ComputeFeatureSizesFilter.md) and inspect the range. + +### Apply to Single Phase + +When *Apply to Single Phase* is enabled, the size threshold is applied only to features of the specified phase. Features of other phases are untouched regardless of their size. This is useful when small features are noise in one phase but meaningful in another (e.g., small precipitates in a matrix). ## WARNING: Feature Data Will Become Invalid -By modifying the cell level data, any feature data that was previously computed will most likely be invalid at this point. Filters that compute feature level data should be rerun to ensure accurate final results from your pipeline. +By modifying the cell-level Feature Ids, any feature-level data that was previously computed (sizes, centroids, average orientations, etc.) will almost certainly be invalid after this filter runs. Re-run any feature-level computation filters downstream of this one to ensure accurate results. ## WARNING: NeighborList Removal -If the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, those arrays will be **REMOVED** because those lists are now invalid. Re-run the *Find Neighbors* filter to re-create the lists. +If the Cell Feature **Attribute Matrix** contains any *NeighborList* arrays, they will be **removed** because the list of neighbors for each surviving feature has changed. Re-run [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) afterward to rebuild the neighbor relationships. + +### Required Input Sources + +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Feature Num. Cells** -- the cell count per feature, produced by [Compute Feature Sizes](ComputeFeatureSizesFilter.md). +- **Feature Phases** (only when *Apply to Single Phase* is enabled) -- produced by [Compute Feature Phases](ComputeFeaturePhasesFilter.md). % Auto generated parameter table will be inserted here @@ -24,7 +50,6 @@ If the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, tho + (02) Small IN100 Full Reconstruction - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/SimplnxCore/docs/ResampleImageGeomFilter.md b/src/Plugins/SimplnxCore/docs/ResampleImageGeomFilter.md index cbaf8036ba..4fb2600e17 100644 --- a/src/Plugins/SimplnxCore/docs/ResampleImageGeomFilter.md +++ b/src/Plugins/SimplnxCore/docs/ResampleImageGeomFilter.md @@ -6,75 +6,56 @@ Sampling (Resample) ## Description -This **Filter** changes the **Cell** spacing/resolution based on inputs from the user. There are several resampling modes: +This **Filter** changes the cell resolution of an **Image Geometry** by overlaying a new regular grid on the existing data and copying the *closest-cell* value from the old grid to each new cell. No interpolation is performed. -### Resampling Mode - -The *Resampling Mode* parameter provides the following choices: - -- **Spacing (0) [0]**: The entered values are the desired new spacings (not multiples of the current resolution). The number of cells in the volume will change accordingly. -- **Scaling (1) [1]**: The entered values are the desired scaling factor for each dimension, expressed as percentages. -- **Exact Dimensions (2) [2]**: The entered values are the desired cell dimensions of the resampled geometry. - -## WARNING: NeighborList Removal - -If the option to "Renumber Features" is turn ON and the Cell Feature AttributeMatrix contains any *NeighborList* data arrays, those arrays will be **REMOVED** because those lists are now invalid. Re-run the *Find Neighbors* filter to re-create the lists. - -### Spacing - -The values entered are the desired new spacings (not multiples of the current resolution). The number of **Cells** in the volume will change when the spacing values are changed and thus the user should be cautious of generating "too many" **Cells** by entering very small values (i.e., very high resolution). +The overall **bounds** of the volume do not change -- only the spacing and the number of cells. To scale the physical extent of a geometry, apply a scaling transformation with [Apply Transformation To Geometry](ApplyTransformationToGeometryFilter.md) instead. -**Example 1**: +![Fig. 1: Resampling overlays a new grid of a different spacing on the same physical volume; doubling the spacing along an axis halves the cell count there. Each new cell takes the value of the nearest source cell — no interpolation is performed.](Images/ResampleImageGeom_SpacingCellCount.png) -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). - -If the new spacing value is (2, 2, 2), then the geometry will have cell dimensions (262, 195, 82) and spacing (2, 2, 2). - -**Example 2**: - -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). - -If the new spacing value is (0.25, 0.7, 2.3), then the geometry will have cell dimensions (2096, 557, 71) and spacing (0.25, 0.7, 2.3). - -### Scale Factor +### Resampling Mode -The values entered are the desired scaling factor for each dimension, in percentages. +The *Resampling Mode* parameter provides three ways to specify the new grid: -**Example 1**: +- **Spacing [0]**: Set the new spacing directly (in physical units; same as the input geometry's spacing). The cell count adjusts accordingly. Use small spacings cautiously -- they can produce very large cell counts. +- **Scaling [1]**: Scale spacing by a percentage per axis. A scaling factor of 30% reduces cell count to roughly 30% of the original (and increases spacing by ~3.33x). +- **Exact Dimensions [2]**: Set the exact new cell counts per axis (integer). Spacing is computed automatically to span the original bounds. -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). +#### Spacing Examples -If the new scaling value is (30%, 30%, 30%), then the geometry will have cell dimensions (157, 117, 49) and spacing (3.3333, 3.3333, 3.3333). +Image with cell dimensions (524, 390, 164) and spacing (1, 1, 1) (units in microns/voxel). -**Example 2**: +- New spacing (2, 2, 2) → cell dimensions (262, 195, 82), spacing (2, 2, 2) microns/voxel. +- New spacing (0.25, 0.7, 2.3) → cell dimensions (2096, 557, 71), spacing (0.25, 0.7, 2.3). -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). +#### Scaling Examples -If the new scaling value is (120.4%, 50.74%, 68.12%), then the geometry will have cell dimensions (630, 197, 111) and spacing (0.830565, 1.97083, 1.468). +Same starting image. -### Exact Dimensions +- Scaling (30%, 30%, 30%) → cell dimensions (157, 117, 49), spacing (3.333, 3.333, 3.333). +- Scaling (120.4%, 50.74%, 68.12%) → cell dimensions (630, 197, 111), spacing (0.831, 1.971, 1.468). -The values entered are the desired cell dimensions of the resampled geometry. (100, 100, 100) would resample the geometry so that there are 100 cells in each dimension. +#### Exact Dimensions Examples -**Example 1**: +Same starting image. -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). +- Exact dimensions (100, 100, 100) → cell dimensions (100, 100, 100), spacing (5.24, 3.9, 1.64). +- Exact dimensions (100, 500, 20) → cell dimensions (100, 500, 20), spacing (5.24, 0.78, 8.2). -If the new exact dimensions are (100, 100, 100), then the geometry will have cell dimensions (100, 100, 100) and spacing (5.24, 3.9, 1.64). +### Resampling Algorithm -**Example 2**: +A new regular grid is overlaid on the old one. For each new cell, the filter finds the old cell whose center is closest and copies that old cell's attributes (Feature Ids, phases, orientations, etc.) into the new cell. There is **no interpolation** -- this is the right behavior for label data (Feature Ids), but it does mean that small features can disappear during downsampling. -Image Geometry with cell dimensions (524, 390, 164) and spacing (1, 1, 1). +### Renumber Features -If the new exact dimensions are (100, 500, 20), then the geometry will have cell dimensions (100, 500, 20) and spacing (5.24, 0.78, 8.2). +When downsampling produces a result in which some Features no longer have any cells, those Features become invalid. Enable *Renumber Features* to detect this case, resize the Cell Feature Attribute Matrix to drop the empty features, and renumber the remaining features so that Feature IDs remain contiguous starting at 1. ---- +## WARNING: NeighborList Removal -A new grid of **Cells** is created and "overlaid" on the existing grid of **Cells**. There is currently no *interpolation* performed, rather the attributes of the old **Cell** that is closest to each new **Cell's** is assigned to that new **Cell**. +When *Renumber Features* is enabled and the Cell Feature Attribute Matrix contains any *NeighborList* arrays, those arrays are **removed** because they refer to the old (pre-renumber) Feature IDs. Re-run [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md) afterward to rebuild them. -*Note:* Present **Features** may disappear when down-sampling to coarse resolutions. If *Renumber Features* is checked, the **Filter** will check if this is the case and resize the corresponding **Feature Attribute Matrix** to comply with any changes. Additionally, the **Filter** will renumber **Features** such that they remain contiguous. +### Required Input Sources -*Note:* This filter does NOT change the overall bounds of the volume, just the spacing and number of cells in the volume. To change the overall bounds of the volume, apply a scaling transformation with the [Apply Transformation To Geometry](./ApplyTransformationToGeometryFilter.md) filter. +- **Input Image Geometry** -- the geometry to be resampled. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ResampleRectGridToImageGeomFilter.md b/src/Plugins/SimplnxCore/docs/ResampleRectGridToImageGeomFilter.md index bbc146e6ed..6ef84c23b2 100644 --- a/src/Plugins/SimplnxCore/docs/ResampleRectGridToImageGeomFilter.md +++ b/src/Plugins/SimplnxCore/docs/ResampleRectGridToImageGeomFilter.md @@ -6,13 +6,30 @@ Sampling (Sampling) ## Description -This **Filter** will resample an existing RectilinearGrid onto a regular grid (Image Geometry) and copy cell data into the newly created Image Geometry Data Container during the process. +This **Filter** converts a **Rectilinear Grid Geometry** (which has variable spacing along each axis) into an **Image Geometry** (which has uniform spacing along each axis). Selected cell-level arrays from the rectilinear grid are copied onto the new uniform grid using a *last-one-wins* rule. -The sampling algorithm is a simple "last one wins" algorithm due to the likely hood that interpolating data is probably not the correct algorithm to bring in data to the new Image Geometry. +### When to Use This Filter -The algorithm logic is thus: If the ImageGeometry cell would contain multiple RectilinearGrid cells, then we select from the covered cells the cell with the largest X, Y and Z index and copy that data into the Image Geometry Cell Attribute Matrix. +Many downstream filters and most external visualization tools expect uniform-grid data. This filter is the right choice when: -The user can select which cell attribute matrix data arrays will be copied into the newly created Image Geometry Cell Attribute Matrix. +- You have data on a variable-spacing rectilinear grid (e.g., imported from a simulation or instrument that uses non-uniform sampling). +- You need uniform Image Geometry data for downstream processing. +- The data being resampled is *categorical* (Feature Ids, phase labels) and interpolation would produce nonsensical intermediate values. + +For interpolatable scalar data (intensity, density), prefer a true resampling filter with interpolation rather than this filter. + +### Algorithm + +If a single Image Geometry cell covers multiple Rectilinear Grid cells, the filter selects the rectilinear cell with the **largest X, Y, and Z index** among the covered cells and copies that one's data. This is a deterministic "last one wins" rule chosen because interpolating across categorical data would be incorrect. + +The user selects: + +- The target Image Geometry's dimensions, origin, and spacing. +- Which cell-level Attribute Arrays from the rectilinear grid should be copied onto the new geometry. + +### Required Input Sources + +- **Rectilinear Grid Geometry** -- the source geometry. Typically produced by [Create Geometry](CreateGeometryFilter.md) with type Rectilinear Grid, or imported from an external simulation. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ReshapeDataArrayFilter.md b/src/Plugins/SimplnxCore/docs/ReshapeDataArrayFilter.md index cf73edcd11..60211190f7 100644 --- a/src/Plugins/SimplnxCore/docs/ReshapeDataArrayFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReshapeDataArrayFilter.md @@ -6,17 +6,33 @@ Core (Generation) ## Description -This **Filter** is used to modify the tuple shape of Data Arrays, Neighbor Lists, and String Arrays within a data structure. It validates the new tuple dimensions to ensure they are positive and differ from the current shape, preventing unnecessary or invalid reshapes. +This **Filter** updates the **tuple dimensions** (the *shape* metadata) of an existing **Data Array**, **Neighbor List**, or **String Array** in place. The total number of tuples is unchanged; only how the shape is described is changed. -**THIS FILTER DOES NOT MOVE ANY THE VALUES IN MEMORY. IT SIMPLY UPDATES THE TUPLE DIMENSIONS. This means that if the data does not -have the proper stride for the new dimensions this could result in incorrect results.** +## ⚠ CRITICAL WARNING: Values Are Not Reordered -For example if a data set is read in from an HDF5 file with a tuple dimension of 3 x 45 this means that there are 45 columns -and 3 rows. If this data is supposed to be interpreted as 3D points, using this data within DREAM3D-NX would not -work because DREAM3D-NX is "C" ordered and the dimensions should be 3 columns x 45 rows. Using this filter will -**NOT** result the correct ordering of the data because the filter will not move any data in memory. +**This filter does NOT move any data in memory.** It only updates the tuple-dimensions metadata. If the data's existing memory layout does not match the new shape's expected layout, **the filter will silently produce incorrectly-shaped data** that downstream filters will misinterpret. -**NOTE:** If the input array is a Neighbor List or String Array, the filter will throw a warning if the new tuple dimensions are multi-dimensional. This is because these array types do not support multi-dimensional tuple dimensions and the filter will default to reshaping the data to an equivalent 1-dimensional number of tuples. +### When This Is Safe vs Dangerous + +DREAM3DNX uses **C-order (row-major)** layout: the last dimension varies fastest in memory. So `(3, 45)` is stored as 3 rows × 45 columns -- 3 contiguous chunks of 45 values each. + +- **Safe**: changing `(135)` → `(3, 45)` simply tells the system "treat this 135-tuple array as a 3×45 array". The bytes in memory are the same; only the shape interpretation changes. +- **Safe**: changing `(3, 45)` → `(135)` flattens to 1D. Memory is identical. +- **DANGEROUS**: reading an array from an HDF5 file that was stored 3 rows × 45 columns and trying to use it as 3-component 45-vertex data. In DREAM3DNX, 3-vertex data is stored as `(N, 3)` with 3 contiguous values per tuple. Calling Reshape from `(3, 45)` to `(45, 3)` **does not transpose** -- it just relabels the shape, and the bytes are now in the wrong order for the new shape. + +To actually transpose or reorder data, use external preprocessing (e.g., reshape the HDF5 dataset before reading) or use an array-arithmetic filter to manually rebuild the array with the desired ordering. + +### Validation + +The filter validates that the new tuple dimensions are positive and that the total tuple count matches the array's existing total. A shape change that would alter the total tuple count fails preflight. + +### Neighbor Lists and String Arrays + +Neighbor Lists and String Arrays do not support multi-dimensional tuple shapes. If you specify a multi-dimensional new shape for one of these array types, the filter emits a warning and falls back to an equivalent 1-D tuple count. + +### Required Input Sources + +- **Array to Reshape** -- any **Data Array**, **Neighbor List**, or **String Array** in the Data Structure. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/ReverseTriangleWindingFilter.md b/src/Plugins/SimplnxCore/docs/ReverseTriangleWindingFilter.md index d6b97553aa..fbf92d32aa 100644 --- a/src/Plugins/SimplnxCore/docs/ReverseTriangleWindingFilter.md +++ b/src/Plugins/SimplnxCore/docs/ReverseTriangleWindingFilter.md @@ -6,11 +6,15 @@ Surface Meshing (Connectivity/Arrangement) ## Description -This **Filter** reverses the *winding* for each **Triangle** in a **Triangle Geometry**. This will *reverse* the direction of calculated **Triangle** normals. Some analysis routines require the normals to be pointing "away" from the center of a **Feature**. This **Filter** allows for manipulation of this construct. +This **Filter** reverses the **winding** of every **Triangle** in a **Triangle Geometry**. The *winding* is the order in which a triangle's three vertices are listed; that order determines which way the triangle's normal points. Reversing the winding therefore *flips* the direction of the triangle normals so they point the opposite way. -% Auto generated parameter table will be inserted here +Some analysis routines require the normals to point "away" from the center of a **Feature**. This **Filter** lets you flip the winding so the normals point in the required direction. After reversing the winding, recompute normals with [Compute Triangle Normals](TriangleNormalFilter.md) so they reflect the new vertex order. To check whether a mesh has consistent winding before or after this operation, use [Verify Triangle Winding](VerifyTriangleWindingFilter.md). + +### Required Input Sources -## Example Pipelines +- **Triangle Geometry** -- the surface mesh whose triangle winding will be reversed. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/RobustAutomaticThresholdFilter.md b/src/Plugins/SimplnxCore/docs/RobustAutomaticThresholdFilter.md index 3042e596e9..146d27799b 100644 --- a/src/Plugins/SimplnxCore/docs/RobustAutomaticThresholdFilter.md +++ b/src/Plugins/SimplnxCore/docs/RobustAutomaticThresholdFilter.md @@ -2,15 +2,19 @@ ## Group (Subgroup) -DREAM3D Review (Threshold) +Threshold ## Description -This **Filter** automatically computes a threshold value for a scalar **Attribute Array** based on the array's gradient magnitude, producing a boolean array that is *false* where the input array is less than the threshold value and *true* otherwise. The threshold value is computed using the following equation: +This filter is *automatic* because it computes the threshold value itself, and *robust* because it derives that value from where the data changes most sharply rather than from a fixed cutoff. The user does not have to choose a threshold value manually; the filter selects one that tends to separate the input array along its sharpest boundaries. It produces a boolean **Mask** array that is *false* where the input array is less than the computed threshold and *true* otherwise. -![\f[ T = \sum_{i = 1}^{n} \frac{a_{i} g_{i}}{g_{i}} \f]](Images/latex24.png) +The threshold is computed as a gradient-magnitude-weighted average of the input array. Each value of the input array is weighted by its corresponding gradient magnitude, so **Cells** that sit on strong boundaries (high gradient magnitude) contribute most to the chosen threshold, while flat interior regions (low gradient magnitude) contribute little. The result is a single threshold value `T` that generally partitions the input array where its gradient is highest. -where \f$ a \f$ is the input array, \f$ g \f$ is the gradient magnitude array, \f$ n \f$ is the length of the input array, and \f$ T \f$ is the computed threshold value. Computing a threshold in this manner will generally partition the input array where its gradient is highest. Gradients may be computed using the Find Derivatives **Filter**. The gradient magnitude may then be found by computing the 2-norm of the gradient. +The *gradient magnitude* measures how quickly the input field changes from one location to the next: it is large at edges or boundaries and near zero in smooth regions. It is obtained by computing the *2-norm* (the square root of the sum of the squares of the per-axis derivative components) of the gradient vector at each **Cell**, which collapses the multi-component gradient into a single non-negative scalar value per **Cell**. The required gradient magnitude array can be produced with the [ITK Gradient Magnitude Image Filter](../ITKImageProcessing/ITKGradientMagnitudeImageFilter.md). + +### Required Input Sources + +- **Gradient Magnitude Data** -- a single-component 32-bit float array giving the gradient magnitude of the input array, produced by [ITK Gradient Magnitude Image Filter](../ITKImageProcessing/ITKGradientMagnitudeImageFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/RotateSampleRefFrameFilter.md b/src/Plugins/SimplnxCore/docs/RotateSampleRefFrameFilter.md index d75c6c003b..fc3797b9fe 100644 --- a/src/Plugins/SimplnxCore/docs/RotateSampleRefFrameFilter.md +++ b/src/Plugins/SimplnxCore/docs/RotateSampleRefFrameFilter.md @@ -17,7 +17,9 @@ This **Filter** is a *lossless reference-frame rotation*: the output is an exact The **Filter** enforces this in preflight. Any rotation that does **not** map the grid onto itself — an arbitrary angle (e.g. 45 degrees), or an off-group axis/angle combination such as **90 degrees about (111)** — is rejected with an error, because a nearest-neighbor resample of such a rotation would silently drop and duplicate voxels and pad the result with background values. To apply an arbitrary rotation (with interpolation), use the [Apply Transformation To Geometry](ApplyTransformationToGeometryFilter.md) filter instead. -### Rotation Representation +![Fig. 1: Rotating the sample reference frame rotates the coordinate axes and resamples the data onto the new grid, leaving the microstructure fixed (left); a geometric rotation instead rotates the data within fixed axes (right).](Images/RotateSampleRefFrame_SampleVsGeometric.png) + +### ⚠ Limited Verification The *Rotation Representation* parameter selects how the rotation is specified. Both forms must still resolve to a rotation that maps the voxel grid onto itself (see Supported Rotations above): @@ -50,6 +52,21 @@ When importing EBSD data from EDAX, the user typically rotates the sample refere - **Selected Image Geometry** -- an **Image Geometry** and all of its **Cell** arrays; produced by any image or EBSD reader, for example [Read H5EBSD File](../OrientationAnalysis/ReadH5EbsdFilter.md), [Import EDAX OIM Data (.h5)](../OrientationAnalysis/ReadH5OimDataFilter.md), or [ITK Import Images (3D Stack)](../ITKImageProcessing/ITKImportImageStackFilter.md). +### Rotation Representation + +The *Rotation Representation* parameter selects how the rotation is specified: + +- **Axis Angle [0]**: A unit axis vector (x, y, z) plus an angle in **degrees**. The most common form for single-axis rotations. +- **Rotation Matrix [1]**: A 3x3 rotation matrix entered directly. + +### Notes on the Output Origin + +The rotated geometry will most likely have an origin that differs from the input geometry's origin (see EDAX example above). If you wish to keep the input origin, enable the *Keep Input Geometry's Origin* option. By default, the option is OFF, so the transformation-derived origin is used. + +### Required Input Sources + +- **Image Geometry** -- the input image whose reference frame is being rotated. Typically produced by an EBSD reader such as [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), [Read CTF Data](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read ANG Data](../OrientationAnalysis/ReadAngDataFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/ScalarSegmentFeaturesFilter.md b/src/Plugins/SimplnxCore/docs/ScalarSegmentFeaturesFilter.md index ab536a2667..031c7de402 100644 --- a/src/Plugins/SimplnxCore/docs/ScalarSegmentFeaturesFilter.md +++ b/src/Plugins/SimplnxCore/docs/ScalarSegmentFeaturesFilter.md @@ -6,19 +6,35 @@ Reconstruction (Segmentation) ## Description -This **Filter** segments the **Features** by grouping neighboring **Cells** that satisfy the *scalar tolerance*, i.e., have a scalar difference less than the value set by the user. The process by which the **Features** are identified is given below and is a standard *burn algorithm*. +This **Filter** groups neighboring **Cells** (voxels) that have similar scalar values into **Features** (connected regions). The output is a *FeatureIds* array that assigns every cell in the input **Image Geometry** to a numbered feature, so that downstream analyses can operate on features instead of individual cells. -1. Randomly select a **Cell**, add it to an empty list and set its *FeatureId* to the current **Feature** -2. Compare the **Cell** to each of its six (6) face-sharing neighbors (i.e., calculate the scalar difference with each neighbor) -3. Add each neighbor **Cell** that has a scalar difference below the user defined tolerance to the list created in 1) and set the *FeatureId* of the neighbor **Cell** to the current **Feature** -4. Remove the current **Cell** from the list and move to the next **Cell** and repeat 2. and 3.; continue until no **Cells** are left in the list -5. Increment the current **Feature** counter and repeat steps 1. through 4.; continue until no **Cells** remain unassigned in the dataset +Use this filter whenever your segmentation criterion is a single scalar value per cell -- for example, image quality, confidence index, a phase label, or a computed property. For orientation-based segmentation of EBSD data, see [Segment Features (Misorientation)](../OrientationAnalysis/EBSDSegmentFeaturesFilter.md) or [Segment Features (C-Axis Misalignment)](../OrientationAnalysis/CAxisSegmentFeaturesFilter.md). -The user has the option to *Use Mask Array*, which allows the user to set a boolean array for the **Cells** that remove **Cells** with a value of *false* from consideration in the above algorithm. This option is useful if the user has an array that either specifies the domain of the "sample" in the "image" or specifies if the orientation on the **Cell** is trusted/correct. +### What is Feature Segmentation? -After all the **Features** have been identified, an **Attribute Matrix** is created for the **Features** and each **Feature** is flagged as *Active* in a boolean array in the matrix. +Segmentation groups cells that "belong together" into discrete regions. Each region receives a unique positive integer *Feature Id*; cells that are excluded (for example, by a mask) are assigned Feature Id 0. After segmentation, a new **Feature Attribute Matrix** is created so that per-feature statistics (sizes, centroids, phases, etc.) can be computed and stored. -If the data is specified as **Periodic**, the segmentation will check if features wrap around geometry bounds in a tileable fashion. If any such features are detected, the filter will throw a warning that centroid data may be incorrect. +![Fig. 1: DREAM3D-NX groups cells into features (grains) via the FeatureIds array, and features into ensembles (phases). Per-feature data lives in the Cell Feature Data attribute matrix; per-phase data lives in Cell Ensemble Data.](Images/DataModel_CellFeatureEnsemble.png) + +### How This Filter Works + +This filter uses a standard *burn algorithm* to grow each feature outward from a seed cell: + +1. Randomly pick an unassigned **Cell** and give it a new *Feature Id*. +2. Compare the cell's scalar value to each of its neighboring cells (see **Neighbor Scheme** below). +3. Any neighbor whose scalar value differs from the seed by less than the user-specified *Scalar Tolerance* is added to the current feature and gets the same *Feature Id*. +4. Repeat step 2-3 from each newly added cell, growing the feature outward until no more neighbors qualify. +5. Increment the feature counter and pick a new unassigned seed cell. Continue until every eligible cell has been assigned. + +### Tolerance and Units + +The *Scalar Tolerance* is in **the same units as the input scalar array**. There are no universal "good" values; the right tolerance depends entirely on what array you are segmenting: + +- For an integer phase map, a tolerance of 0 (or less than 1) groups only cells with exactly the same phase. +- For a floating-point image-quality array with values 0-1, tolerances around 0.05-0.1 are typical. +- For a raw grayscale image with values 0-255, tolerances of 5-20 are typical. + +Start conservative (smaller tolerance -> more, smaller features), inspect the result, and loosen the tolerance if features are being over-split. ### Neighbor Scheme @@ -27,11 +43,7 @@ The *Neighbor Scheme* parameter provides the following choices: - **Face Neighbors [0]**: Only the 6 face-sharing neighbors of a voxel are considered during segmentation. - **All Connected Neighbors [1]**: All 26 neighbors connected by a face, edge, or vertex are considered during segmentation. -## Note on Neighbor Scheme - -Historically DREAM.3D version 6.x has used *only* the 6 face neighbors of a voxel. This release introduces the option -of using all 26 neighboring voxels that are connected by a face, edge or vertex. The default for the filter -is to still use the 6 face neighbors ("Face Only") in order to stay consistent with the output from DREAM.3D version 6.x. +DREAM.3D version 6.x only used face neighbors. The default here is still *Face Only* for backward compatibility; switch to *All Connected* when diagonal connectivity should merge a feature that would otherwise be split. | Neighbor Scheme = "Face Only" | Neighbor Scheme = "All Connected" | |:--:|:--:| @@ -49,6 +61,19 @@ is to still use the 6 face neighbors ("Face Only") in order to stay consistent w |:--:|:--:| | ![Shared Edges & Points With Disconnected Region - "Face Only"](Images/SegmentFeatures/combination_face_only.png) | ![Shared Edges & Points With Disconnected Region - "All Connected"](Images/SegmentFeatures/combination_all_connected.png) | +### Mask Array + +If *Use Mask Array* is enabled, cells flagged *false* in the mask are excluded from segmentation and left with a Feature Id of 0. Masks are commonly used to restrict segmentation to valid sample regions -- for example, a quality threshold on an EBSD confidence index (see [Multi-Threshold Objects](MultiThresholdObjectsFilter.md)). + +### Periodic Option + +If the input data represents a **periodic** structure (i.e., features are allowed to wrap across opposite faces of the volume), enable *Is Periodic*. The filter will detect features that tile across the geometry bounds and emit a warning that centroid and other spatial statistics may be incorrect for those features. + +### Required Input Sources + +- **Input Scalar Array** -- any single-component cell-level scalar array suitable for thresholding. Common sources include image readers such as [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), phase or quality arrays from EBSD readers such as [Read H5EBSD](../OrientationAnalysis/ReadH5EbsdFilter.md), or any computed per-cell scalar from an earlier filter in the pipeline. +- **Mask Array** (optional) -- a boolean array marking valid cells, typically produced by [Multi-Threshold Objects](MultiThresholdObjectsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/SetImageGeomOriginScalingFilter.md b/src/Plugins/SimplnxCore/docs/SetImageGeomOriginScalingFilter.md index d4ed868025..e4252cff3e 100644 --- a/src/Plugins/SimplnxCore/docs/SetImageGeomOriginScalingFilter.md +++ b/src/Plugins/SimplnxCore/docs/SetImageGeomOriginScalingFilter.md @@ -6,13 +6,35 @@ Core (Spatial) ## Description -This **Filter** changes the origin and/or the spacing of an **Image Geometry**. For example, if the current origin is at (0, 0, 0) and the user would like the origin to be (10, 4, 8), then the user should enter the following input values: +This **Filter** updates the origin and/or spacing of an existing **Image Geometry**. The grid dimensions (number of cells per axis) are unchanged; only the physical placement and physical size of the cells are modified. Use this filter to: -+ X Origin: 10 -+ Y Origin: 4 -+ Z Origin: 8 +- Correct an incorrect origin after import (e.g., reset to (0, 0, 0) after a sample-frame rotation). +- Convert the geometry's spacing to a different physical unit (e.g., millimeters → microns). +- Recenter a geometry so the user-specified point lands at the volume's geometric center. -When setting the origin, the user may also enable the *Put Input Origin at the Center of Geometry* option, which adjusts the geometry so that the specified origin is placed at the geometric center rather than the corner. +![Fig. 1: An Image Geometry is defined by its dimensions, spacing, and origin. This filter changes the origin (bottom-left grid point) and/or spacing (distance between grid planes); the dimensions are left unchanged.](Images/CreateImageGeometry_OriginSpacingDimensions.png) + +### Origin + +The *Origin* parameter sets the new physical location of the bottom-left corner of the geometry. For example, to change the origin from (0, 0, 0) to (10, 4, 8): + +- X Origin: 10 +- Y Origin: 4 +- Z Origin: 8 + +Origin coordinates are in the geometry's physical units (microns, millimeters, etc.). + +### Spacing + +The *Spacing* parameter sets the new physical distance between grid planes along each axis. Spacing values must be positive and non-zero. Updating spacing rescales the entire physical extent of the geometry (since the number of cells is unchanged) but leaves cell data values untouched. + +### Put Input Origin at the Center of Geometry + +If *Put Input Origin at the Center of Geometry* is enabled, the user-supplied origin value is treated as the **geometric center** of the volume rather than the bottom-left corner. The filter computes the corresponding bottom-left origin so that the user-supplied point lands at the center. This is convenient for centering a geometry on a meaningful reference point (sample center, beam axis, etc.) without computing the corner offset by hand. + +### Required Input Sources + +- **Input Image Geometry** -- the geometry to modify in place. Typically produced by [Create Image Geometry](CreateImageGeometryFilter.md), [ITK Import Image Stack](../ITKImageProcessing/ITKImportImageStackFilter.md), or an EBSD reader. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/SharedFeatureFaceFilter.md b/src/Plugins/SimplnxCore/docs/SharedFeatureFaceFilter.md index 4f0c21a6ba..eb99998c96 100644 --- a/src/Plugins/SimplnxCore/docs/SharedFeatureFaceFilter.md +++ b/src/Plugins/SimplnxCore/docs/SharedFeatureFaceFilter.md @@ -4,21 +4,24 @@ Surface Meshing (Connectivity/Arrangement) +(Note: this filter's human name is *Compute Triangle Face Ids*, even though its source file is named `SharedFeatureFace`.) + ## Description -This **Filter** assigns a unique Id to each **Triangle** in a **Triangle Geometry** that represents the _unique boundary_ -on which that **Triangle** resides. For example, if there were only two **Features** that shared one boundary, -then the **Triangles** on that boundary would be labeled with a single unique Id. This procedure creates _unique groups_ -of **Triangles**, which themselves are a set of **Features**. Thus, this **Filter** also creates a **Feature Attribute -Matrix** for this new set of **Features**, and creates **Attribute Arrays** for their Ids and number of **Triangles**. This -process can be considered a **segmentation** where each unique id is the shared boundary between two features. +This filter assigns a unique Id to each **Triangle** in a **Triangle Geometry** (a surface mesh built from triangles) that identifies the *unique boundary* on which that triangle resides. A **Feature** is a region of material; the **Face Labels** of a triangle are the pair of **Feature** Ids on either side of it. All triangles sharing the same pair of **Face Labels** form one shared boundary and receive the same unique Id. + +For example, if only two **Features** shared a single boundary, every triangle on that boundary would be labeled with one unique Id. This procedure groups the triangles into unique boundaries, which are themselves treated as a new set of **Features** (one per shared boundary). + +The filter therefore also creates a **Feature Attribute Matrix** (a table holding one row of data per shared-boundary feature) and places two **Attribute Arrays** into it: -Because the algorithm is essentially segmenting the triangles based on the unique combination of face labels, the filter will -also generate a Feature level Attribute Matrix and place two additional _DataArrays_ into that feature attribute matrix -that store the following information: +1. The number of triangles in each unique boundary. +2. The pair of **Face Labels** values that made up each unique boundary. -1. The number of triangles in each unique boundary -2. The pair of Face Label values that made up the unique boundary. +This process can be viewed as a **segmentation** in which each unique Id is the shared boundary between two features. + +### Randomize Face IDs + +The *Randomize Face IDs* parameter shuffles the assigned boundary Id values. The grouping of triangles is unchanged; only the numeric Id labels are permuted. This is purely a visualization aid: with sequential Ids, neighboring boundaries can map to similar colors and blend together, whereas randomized Ids spread adjacent boundaries across the color map so they are easier to tell apart. The two figures below illustrate the difference. ### Generated Feature Boundaries _with_ Randomization @@ -28,13 +31,16 @@ that store the following information: ![Example Surface Mesh Coloring By Feature Face Id](Images/SharedFeaturFace_2.png) ---------------- +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** -- the per-triangle pair of **Feature** Ids, produced alongside the mesh by the surface-meshing filter above. % Auto generated parameter table will be inserted here ## Example Pipelines -"(03) Small IN100 Mesh Statistics.d3dpipeline" ++ (03) Small IN100 Mesh Statistics ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/SilhouetteFilter.md b/src/Plugins/SimplnxCore/docs/SilhouetteFilter.md index 43f31ca03f..09bd6a2d6b 100644 --- a/src/Plugins/SimplnxCore/docs/SilhouetteFilter.md +++ b/src/Plugins/SimplnxCore/docs/SilhouetteFilter.md @@ -6,13 +6,15 @@ DREAM3D Review (Clustering) ## Description -This **Filter** computes the silhouette for a clustered **Attribute Array**. The user must select both the original array that has been clustered and the array of cluster Ids. The silhouette represents a measure for the quality of a clustering. Specifically, the silhouette provides a measure for how strongly a given point belongs to its own cluster compared to all other clusters. The silhouette is computed as follows: +This **Filter** computes the silhouette for a clustered **Attribute Array**. The user must select both the original array that has been clustered and the array of cluster Ids. The silhouette is a dimensionless measure of the quality of a clustering. Specifically, the silhouette provides a measure of how strongly a given point belongs to its own cluster compared to all other clusters. The silhouette is computed as follows: -\f[ s_{i} = \frac{b_{i} - a_{i}}{\max\{a_{i},b_{i}\}} \f] +$$ s_{i} = \frac{b_{i} - a_{i}}{\max\{a_{i},b_{i}\}} $$ -where \f$ a \f$ is the average distance between point \f$ i \f$ and all other points in the cluster point \f$ i \f$ belongs to, \f$ b \f$ is the *next closest* average distance among all other clusters, and \f$ s \f$ is the silhouette value. Using this definition, \f$ s \f$ exists on the interval \f$ [-1, 1] \f$, where 1 indicates that the point strongly belongs to its current cluster and -1 indicates that the point does not belong well to its current cluster. The user may select from a variety of options to use as the distance metric. Additionally, the user may opt to use a mask array to ignore points in the silhouette; these points will contain a silhouette value of 0. +where $a$ is the average distance between point $i$ and all other points in the cluster point $i$ belongs to, $b$ is the *next closest* average distance among all other clusters, and $s$ is the silhouette value. Using this definition, $s$ exists on the interval $[-1, 1]$ (dimensionless), where 1 indicates that the point strongly belongs to its current cluster and -1 indicates that the point does not belong well to its current cluster. The user may select from a variety of options to use as the distance metric. Additionally, the user may opt to use a mask array to ignore points in the silhouette; these points will contain a silhouette value of 0. -The silhouette can be used to determine how well a particular clustering has performed, such as k means or k medoids. +The filter writes one float silhouette value per input point into the created silhouette array, located alongside the input array. Each value lies in the range $[-1, 1]$ (dimensionless). + +The silhouette can be used to determine how well a particular clustering has performed, such as a clustering produced by [Compute K Means](ComputeKMeansFilter.md) or [Compute K Medoids](ComputeKMedoidsFilter.md). ### Distance Metric @@ -25,13 +27,18 @@ The *Distance Metric* parameter controls how the distance between two points is - **Pearson [4]**: Correlation-based distance derived from the Pearson correlation coefficient. - **Squared Pearson [5]**: Square of the Pearson distance. +### Required Input Sources + +- **Cluster Ids** -- the per-point cluster label array, produced by [Compute K Means](ComputeKMeansFilter.md) or [Compute K Medoids](ComputeKMedoidsFilter.md). +- **Clustered Attribute Array** -- the original **Attribute Array** that was clustered (the same array passed to the clustering filter). + % Auto generated parameter table will be inserted here ## Example Pipelines ## License & Copyright -Please see the description file distributed with this plugin. +Please see the description file distributed with this **Plugin** ## DREAM3D-NX Help diff --git a/src/Plugins/SimplnxCore/docs/SliceTriangleGeometryFilter.md b/src/Plugins/SimplnxCore/docs/SliceTriangleGeometryFilter.md index 445a39d67a..36017f7b1b 100644 --- a/src/Plugins/SimplnxCore/docs/SliceTriangleGeometryFilter.md +++ b/src/Plugins/SimplnxCore/docs/SliceTriangleGeometryFilter.md @@ -6,7 +6,9 @@ Sampling (Geometry) ## Description -This **Filter** slices an input **Triangle Geometry**, producing an **Edge Geometry**. The user can control the range over which to slice (either the entire range of the geoemtry or a specified subregion), and the spacing bewteen slices. Currently this filter only supports slicing along the direction of the z axis. The total area and perimieter of each slice is also computed and stored as an attribute on each created slice. +This **Filter** slices an input **Triangle Geometry**, producing an **Edge Geometry**. The user can control the range over which to slice (either the entire range of the geometry or a specified subregion), and the spacing between slices. Currently this filter only supports slicing along the direction of the z axis. The total area and perimeter of each slice is also computed and stored as an attribute on each created slice. + +Both the *Slice Spacing* and the *User Defined Range* values are specified in the same physical units as the input **Triangle Geometry** coordinates (for example, microns if the mesh is in microns). The computed slice area and perimeter are likewise reported in those physical units (squared, for area). Additionally, if the input **Triangle Geometry** is labeled with an identifier array (such as different regions or features), the user may select this array and the resulting edges will inherit these identifiers. @@ -26,7 +28,11 @@ Example Surface Mesh being sliced with a 2.0 slice spacing. The *Slice Range* parameter controls which portion of the geometry is sliced: - **Full Range [0]**: Slices across the entire extent of the geometry along the slicing direction. -- **User Defined Range [1]**: Allows specifying custom start and end values for the slicing range, restricting slices to a subregion of the geometry. +- **User Defined Range [1]**: Allows specifying custom start and end values (in the geometry's physical units) for the slicing range, restricting slices to a subregion of the geometry. + +### Required Input Sources + +- **Triangle Geometry** -- an existing surface mesh. Typically produced by [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md), read from disk via [Read STL File](ReadStlFileFilter.md), or assembled from multiple files by [Combine STL Files](CombineStlFilesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/SplitDataArrayByComponentFilter.md b/src/Plugins/SimplnxCore/docs/SplitDataArrayByComponentFilter.md index 6afce43553..f558c0bb31 100644 --- a/src/Plugins/SimplnxCore/docs/SplitDataArrayByComponentFilter.md +++ b/src/Plugins/SimplnxCore/docs/SplitDataArrayByComponentFilter.md @@ -18,14 +18,18 @@ This **Filter** will produce three new scalar unsigned 8-bit arrays: The user must specify a postfix string to add to the newly created arrays. For example, if the original multicomponent **Attribute Array** is named "Foo" and the postfix is set to "Component", this **Filter** will produce three new arrays named "FooComponent0", "FooComponent1", and "FooComponent2". The numbering will always be present regardless of how the postfix is set. -There is an alternative option which allows the user to select a subset of components to extract instead of extracting all the components by entering the components to be extracted. The components should be specified starting with the first componet as 0. So if the original array has 3 components and the user wanted the first and second components, the unput to the component table should be 0 and 1 respectively. +An alternative *Select Components* option lets the user extract a subset of components rather than all of them. Components are **0-based** -- for a 3-component array, entering 0 and 1 extracts only the first two components. -This **Filter** is the opposite operation of the Combine Attribute Arrays **Filter**, and the generalized version of the Extract Component as Attribute Array **Filter**. +This **Filter** is the inverse of [Combine Attribute Arrays](CombineAttributeArraysFilter.md), and a generalized version of [Extract/Remove Components](ExtractComponentAsArrayFilter.md). **Looking to split by *tuples* instead?** See the *[Split Data Array (By Tuple)](SplitDataArrayByTupleFilter.md)* filter that separates a data array into several smaller data arrays based on the tuple layout. +### Required Input Sources + +- **Multi-Component Input Array** -- any multi-component **Attribute Array**. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/SplitDataArrayByTupleFilter.md b/src/Plugins/SimplnxCore/docs/SplitDataArrayByTupleFilter.md index bddb3f935b..d80710aedf 100644 --- a/src/Plugins/SimplnxCore/docs/SplitDataArrayByTupleFilter.md +++ b/src/Plugins/SimplnxCore/docs/SplitDataArrayByTupleFilter.md @@ -50,6 +50,14 @@ An optional flag allows you to delete the original input array after splitting. See the *[Split Data Array (By Component)](SplitDataArrayByComponentFilter.md)* filter that separates each component into its own scalar array. +### Tuple Counts + +The per-output *tuple counts* are integers. The sum of all requested output counts along the split dimension must equal the input's tuple count along that dimension. + +### Required Input Sources + +- **Input Data Array** -- the array to split. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/SurfaceNetsFilter.md b/src/Plugins/SimplnxCore/docs/SurfaceNetsFilter.md index 81a3b1a1b1..27e66f1230 100644 --- a/src/Plugins/SimplnxCore/docs/SurfaceNetsFilter.md +++ b/src/Plugins/SimplnxCore/docs/SurfaceNetsFilter.md @@ -6,22 +6,25 @@ Surface Meshing (Generation) ## Description -This filter uses the algorithm from {1} to produce a triangle surface mesh. The code is directly based on the sample code from the paper but has been modified to -work with the simplnx library classes. This filter uses a different algorithm that aims to produce a mush that keeps sharp edges -while still producing a mesh superior to marching cubes or QuickMesh. +This filter generates a **Triangle Geometry** (a surface mesh) that wraps the boundaries between labeled regions in a volume. It uses the **Surface Nets** algorithm from {1}. The code is based directly on the sample code from that paper, modified to work with the simplnx library classes. + +Unlike **marching cubes** (a classic algorithm that builds an isosurface by placing triangles inside each cube of eight neighboring **Cells**), Surface Nets keeps sharp edges between materials while still producing a mesh that is generally smoother and higher quality than either marching cubes or the older [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) approach. + +An **isosurface** is the surface that separates regions above a threshold from regions below it; for a labeled volume the "threshold" is simply the boundary between one **Feature** label and a different one. From the abstract of the paper: - We extend 3D SurfaceNets to generate surfaces of segmented 3D medical images composed - of multiple materials represented as indexed labels. Our extension generates smooth, high- - quality triangle meshes suitable for rendering and tetrahedralization, preserves topology and - sharp boundaries between materials, guarantees a user-specified accuracy, and is fast enough - that users can interactively explore the trade-off between accuracy and surface smoothness. +> We extend 3D SurfaceNets to generate surfaces of segmented 3D medical images composed +> of multiple materials represented as indexed labels. Our extension generates smooth, high- +> quality triangle meshes suitable for rendering and tetrahedralization, preserves topology and +> sharp boundaries between materials, guarantees a user-specified accuracy, and is fast enough +> that users can interactively explore the trade-off between accuracy and surface smoothness. + +The filter writes a **Face Labels** array on each triangle: a 2-component value holding the **Feature** Id on either side of the triangle. The filter guarantees the smaller of the two Face Labels values is always stored in the first component (component 0), so that assumptions made in downstream filters continue to work correctly. -This filter will ensure that the smallest of the 2 **FaceLabel** values will always be in the first component (component[0]). This will allow assumptions made in -downstream filters to continue to work correctly. +The filter also attempts to repair the triangle **winding** (the order in which a triangle's three vertices are listed, which determines the direction its normal points). A fully consistent winding may not be achievable because of how meshes are stored in the software; see [Verify Triangle Winding](VerifyTriangleWindingFilter.md) for a detailed breakdown of the nuances. -This filter attempts to repair the windings for a mesh. This may not be possible due to the nature of how meshes are stored in the software. See Verify Traingle Winding documentation for detailed breakdown of nuance. +The *Relaxation Iterations* parameter is a dimensionless count of smoothing passes, and *Max Distance from Voxel Center* is a physical length (same units as the Image Geometry spacing) limiting how far a node may move from its originating voxel center. --------------- @@ -39,12 +42,11 @@ SurfaceNets output **with** the built-in smoothing operation applied. ## Node Types -During the meshing process, each vertex, or node, will get a "Node Type" value assigned to it. These will range from 0 to 6. The value is an internal representation from the SurfaceNets algorithm. They are roughly equivelent to the Node Types from the Quick Surface Mesh algorithm but not strictly the same. - -- Node Type = 0: This is a node that ONLY has 2 features connected to the node. -- Node Type = 2: This is a node that has 3 features connected to the node, such as a triple line -- Node Type = 3-6: These nodes have 4 or more features connected to the node. +During the meshing process, each vertex (node) is assigned a "Node Type" value ranging from 0 to 6. The value is an internal representation from the Surface Nets algorithm. The values are roughly equivalent to the Node Types from the [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) algorithm but are not strictly the same. +- Node Type = 0: A node that has ONLY 2 features connected to it. +- Node Type = 2: A node that has 3 features connected to it, such as a **triple line** (the edge where exactly three features meet). +- Node Type = 3-6: Nodes that have 4 or more features connected to them. | Node Type | Example Image | |-----------|----------------------------------------------| @@ -56,20 +58,22 @@ During the meshing process, each vertex, or node, will get a "Node Type" value a ### Exterior or Boundary Nodes -Nodes that appear on the exterior of a volume have Node Type values starting at 10 and going up from there. For instance, a triple line that is also on the exterior of the volume should have a value of 12. +Nodes that appear on the exterior of a volume have Node Type values starting at 10 and going up from there. For instance, a triple line that is also on the exterior of the volume has a value of 12. ![Exterior Node Types](Images/SurfaceNets_NodeType_Exterior.png) ### Exterior or Boundary Triangles -Each triangle that is created will have an 2 component attribute called `Face Labels` that represent the Feature ID on either -side of the triangle. If one of the triangles represents the border of the virtual box then one of the FaceLables will -have a value of -1. +Each triangle has a 2-component **Face Labels** array that holds the Feature Id on either side of the triangle. If a triangle lies on the border of the virtual bounding box, one of its Face Labels values is -1. ## Notes -This filter should be used in place of the "QuickMesh Surface Filter". +This filter should be used in place of the [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) filter. + +### Required Input Sources +- **Image Geometry** -- the labeled volume to mesh, from an image/volume reader or an upstream processing filter. +- **Cell Feature Ids** -- the per-Cell integer label array that defines the regions to wrap, typically produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). ## Comparison of Surface Meshing Filters @@ -92,19 +96,18 @@ DREAM3D-NX provides three **Filters** that convert a segmented grid into a multi ## Example Pipelines - Pipelines/SimplnxCore/SurfaceNets_Demo.d3dpipeline +Pipelines/SimplnxCore/SurfaceNets_Demo.d3dpipeline ## Citations -{1}[SurfaceNets for Multi-Label Segmentations with Preservation of Sharp Boundaries](https://jcgt.org/published/0011/01/03/paper.pdf) +{1} [SurfaceNets for Multi-Label Segmentations with Preservation of Sharp Boundaries](https://jcgt.org/published/0011/01/03/paper.pdf) + +Sarah F. Frisken, *SurfaceNets for Multi-Label Segmentations with Preservation of Sharp Boundaries*, Journal of Computer Graphics Techniques (JCGT), vol. 11, no. 1, 34-54, 2022. [http://jcgt.org/published/0011/01/03](http://jcgt.org/published/0011/01/03) ## License & Copyright -`Sarah F. Frisken, SurfaceNets for Multi-Label Segmentations with Preservation of Sharp -Boundaries, Journal of Computer Graphics Techniques (JCGT), vol. 11, no. 1, 34–54, 2022` -[http://jcgt.org/published/0011/01/03](http://jcgt.org/published/0011/01/03) +Please see the description file distributed with this **Plugin** -## DREAM3D-NX Mailing Lists +## DREAM3D-NX Help -If you need more help with a **Filter**, please consider asking your question on -the [DREAM3D-NX Users Google group!](https://groups.google.com/forum/?hl=en#!forum/dream3d-users) +If you need help, need to file a bug report or want to request a new feature, please head over to the [DREAM3DNX-Issues](https://github.com/BlueQuartzSoftware/DREAM3DNX-Issues/discussions) GitHub site where the community of DREAM3D-NX users can help answer your questions. diff --git a/src/Plugins/SimplnxCore/docs/TriangleCentroidFilter.md b/src/Plugins/SimplnxCore/docs/TriangleCentroidFilter.md index 545dcfb1f6..0e2fb65c15 100644 --- a/src/Plugins/SimplnxCore/docs/TriangleCentroidFilter.md +++ b/src/Plugins/SimplnxCore/docs/TriangleCentroidFilter.md @@ -6,7 +6,21 @@ Surface Meshing (Misc) ## Description -This **Filter** computes the centroid of each **Triangle** in a **Triangle Geometry** by calculating the average position of all 3 **Vertices** that make up the **Triangle**. +This filter computes the centroid of each **Triangle** in a **Triangle Geometry** (a surface mesh built from triangles) by averaging the positions of the 3 **vertices** (nodes) that make up the triangle, and stores the result as a per-triangle **Face Data** array. + +### When to Use This Filter + +A per-triangle centroid gives a single representative point for each triangle. It is commonly used as a position reference when fitting a local neighborhood of triangles (for example, by [Compute Feature Face Curvature](FeatureFaceCurvatureFilter.md)) and when visualizing or sampling per-face quantities at a point rather than across the whole triangle. + +Note: this filter produces one centroid **per triangle**. To instead compute one centroid **per Feature** (averaged over all the nodes that bound a feature), use [Compute Feature Centroids from Triangle Geometry](ComputeTriangleGeomCentroidsFilter.md). + +### Units + +Centroid coordinates are reported in the **geometry length units** of the **Triangle Geometry** vertices (for example, micrometers if the mesh coordinates are stored in micrometers). + +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/TriangleDihedralAngleFilter.md b/src/Plugins/SimplnxCore/docs/TriangleDihedralAngleFilter.md index ea6e6ac6a9..5922f99334 100644 --- a/src/Plugins/SimplnxCore/docs/TriangleDihedralAngleFilter.md +++ b/src/Plugins/SimplnxCore/docs/TriangleDihedralAngleFilter.md @@ -6,7 +6,24 @@ Surface Meshing (Misc) ## Description -This **Filter** computes the minimum dihedral angle of each **Triangle** in a **Triangle Geometry** by utilizing matrix mathematics +This filter computes, for every **Triangle** in a **Triangle Geometry**, the smallest of its three interior corner angles, and stores that value as a per-triangle **Face Data** array. + +### What This Measures and Why + +Each triangle has three interior angles. This filter records the **minimum** of those three angles. (For a single flat triangle this minimum interior angle is what is referred to here as the "dihedral angle".) It is a standard **mesh-quality** metric: + +- A well-shaped, near-equilateral triangle has a minimum angle close to 60°. +- A long, thin "sliver" triangle has a very small minimum angle (close to 0°). Slivers are numerically poorly conditioned and degrade downstream calculations (curvature, smoothing, finite-element meshing). + +Coloring a surface mesh by this value is a quick way to locate sliver triangles that may need remeshing or smoothing. + +### Units + +The output angle is reported in **degrees** (0° to 60°; a value of 60° corresponds to a perfectly equilateral triangle). + +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Surface Nets](SurfaceNetsFilter.md) or [Quick Surface Mesh](QuickSurfaceMeshFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/TriangleNormalFilter.md b/src/Plugins/SimplnxCore/docs/TriangleNormalFilter.md index c2a4f5ac9c..d722e1478d 100644 --- a/src/Plugins/SimplnxCore/docs/TriangleNormalFilter.md +++ b/src/Plugins/SimplnxCore/docs/TriangleNormalFilter.md @@ -6,14 +6,30 @@ Surface Meshing (Misc) ## Description -This **Filter** computes the normal of each **Triangle** in a **Triangle Geometry** by utilizing matrix subtraction, cross product, and normalization to implement the following theory: - For a triangle with point1, point2, point3, if the vector U = point2 - point1 and the vector V = point3 - point1 +This filter computes the **normal** of each **Triangle** in a **Triangle Geometry** (a surface mesh built from triangles) and stores the result as a per-triangle **Face Data** array. A normal is the direction that points straight out of the flat triangle surface. - Nx = UyVz - UzVy - Ny = UzVx - UxVz - Nz = UxVy - UyVx +### How It Is Computed - Where "point#" represents a 3x1 Matrix of coordinates x, y, and z belonging to one of a Triangles vertexes and N represents the normal of the corresponding axis value +For a triangle with corner **vertices** *point1*, *point2*, and *point3*, the filter forms two edge vectors + + U = point2 - point1 + V = point3 - point1 + +and computes their **cross product** (a vector perpendicular to both edges, and therefore perpendicular to the triangle): + + Nx = Uy*Vz - Uz*Vy + Ny = Uz*Vx - Ux*Vz + Nz = Ux*Vy - Uy*Vx + +The result is then normalized to unit length. + +### Output and Direction + +The output is a 3-component **unit vector** (length 1) and is therefore **dimensionless**. Its sense (which of the two opposite directions it points along) is set by the **winding order** -- the order in which the triangle's three vertices are listed. Reversing the vertex order flips the normal to point the opposite way. Consistent winding across the mesh is what makes all normals point consistently inward or outward. + +### Required Input Sources + +- **Triangle Geometry** -- a surface mesh, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/UncertainRegularGridSampleSurfaceMeshFilter.md b/src/Plugins/SimplnxCore/docs/UncertainRegularGridSampleSurfaceMeshFilter.md index ddaf37c656..38091602b9 100644 --- a/src/Plugins/SimplnxCore/docs/UncertainRegularGridSampleSurfaceMeshFilter.md +++ b/src/Plugins/SimplnxCore/docs/UncertainRegularGridSampleSurfaceMeshFilter.md @@ -6,15 +6,24 @@ Sampling (Resolution) ## Description -This **Filter** "samples" a triangulated surface mesh on a rectilinear grid, but with "uncertainty" in the absolute position of the **Cells**. The "uncertainty" is meant to simulate the possible positioning error in a sampling probe. The user can specify the number of **Cells** along the X, Y, and Z directions in addition to the resolution in each direction and origin to define a rectilinear grid. The sampling, with "uncertainty", is then performed by the following steps: +This **Filter** "samples" a triangulated surface mesh onto a **rectilinear grid** (a regular grid of box-shaped **Cells**), but with "uncertainty" in the absolute position of each Cell. The uncertainty simulates the possible positioning error of a sampling probe. A **Cell** is a single volume element of the output grid, and a **Feature** is one labeled region of the surface mesh. -1. Determine the bounding box and **Triangle** list of each **Feature** by scanning all **Triangles** and noting the **Features** on either side of the **Triangle** -2. For each **Cell** in the rectilinear grid, perturb the location of the **Cell** by generating a three random numbers between [-1, 1] and multiplying them by the three uncertainty values (one for each direction) -3. For each perturbed **Cell** in the rectilinear grid, determine which bounding box(es) they fall in (*Note:* the bounding box of multiple **Features** can overlap) -4. For each bounding box a **Cell** falls in, check against that **Feature's** **Triangle** list to determine if the **Cell** falls within that n-sided polyhedra. (*Note:* if the surface mesh is conformal, then each **Cell** will only belong to one **Feature**, but if not, the last **Feature** the **Cell** is found to fall inside of will *own* the **Cell**) -5. Assign the **Feature** number that the **Cell** falls within to the *Feature Ids* array in the new rectilinear grid geometry +The user specifies the number of **Cells** along the X, Y, and Z directions, plus the resolution (spacing) and origin that define the grid. The grid resolution and origin are given in the same physical length units as the input surface mesh (typically microns). The three uncertainty values are also physical lengths in those same units. The sampling, with uncertainty, is performed by the following steps: -**Note that the unperturbed grid is where the *Feature Ids* actually live, but the perturbed locations are where the Cells are sampled from. Essentially, the *Feature Ids* are stored where the user *thinks* the sampling took place, not where it actually took place!** +1. Determine the bounding box and **Triangle** list of each **Feature** by scanning all **Triangles** and noting the **Features** on either side of each **Triangle**. +2. For each **Cell** in the rectilinear grid, perturb its location by generating three random numbers in the range [-1, 1] and multiplying them by the three uncertainty values (one for each direction). +3. For each perturbed **Cell**, determine which bounding box(es) it falls in (*Note:* the bounding boxes of multiple **Features** can overlap). +4. For each bounding box a **Cell** falls in, test it against that **Feature's** **Triangle** list to determine whether the **Cell** lies within that n-sided polyhedron. (*Note:* if the surface mesh is **conformal** -- meaning adjacent features share exactly one common surface with no gaps or overlaps -- each **Cell** belongs to only one **Feature**; if not, the last **Feature** the **Cell** is found inside of *owns* the **Cell**.) +5. Assign the **Feature** number that the **Cell** falls within to the *Feature Ids* array in the new rectilinear grid geometry. + +**Note that the unperturbed grid is where the *Feature Ids* actually live, but the perturbed locations are where the Cells are sampled from. Essentially, the *Feature Ids* are stored where the user *thinks* the sampling took place, not where it actually took place.** + +For the variant that samples onto a regular grid without positional uncertainty, see the sibling filter [Sample Triangle Geometry on Regular Grid](RegularGridSampleSurfaceMeshFilter.md), which shares the same grid (dimensions, origin, spacing) parameters. + +### Required Input Sources + +- **Triangle Geometry** -- the surface mesh to sample, typically produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** -- the per-face 2-component array identifying the **Features** on either side of each triangle, produced by the same surface-meshing filter. % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/VerifyTriangleWindingFilter.md b/src/Plugins/SimplnxCore/docs/VerifyTriangleWindingFilter.md index d0a5c95f23..b19ee9fb86 100644 --- a/src/Plugins/SimplnxCore/docs/VerifyTriangleWindingFilter.md +++ b/src/Plugins/SimplnxCore/docs/VerifyTriangleWindingFilter.md @@ -2,35 +2,35 @@ ## Group (Subgroup) -Meshing (Cleanup) +Surface Meshing (Connectivity/Arrangement) ## Description -***WARNING***: *If your mesh contains multiple disconnected objects in it, you should run **Label Triangle Geometry** beforehand, and convert the output (region ids) into face labels. Recommended procedure for such is described below in **Multi-Object Meshes**.* +***WARNING***: *If your mesh contains multiple disconnected objects, you should run [Label CAD Geometry](LabelTriangleGeometryFilter.md) beforehand and convert the output (region ids) into face labels. The recommended procedure is described below in **Multi-Object Meshes**.* -This filter attempts to repair the windings for a mesh. This may not be possible due to the nature of how meshes are stored in the software. +This filter attempts to repair the **winding** of a mesh so that it is consistent across the surface. The *winding* is the order in which a triangle's three vertices are listed; that order determines which way the triangle's normal points (the triangle's "front" versus "back" face). Consistent winding means every triangle of a closed surface has its normal pointing the same way relative to the enclosed volume. Achieving fully consistent winding may not be possible because of how meshes are stored in the software. ### Key Nuances -While this filter doesn't modify anything more than the *Shared Faces List*, it has wider downstream implications for the mesh so it is recommended that it is executed as close to the start of the pipeline as possible. This ensures you don't have to recalculate extensive amounts of face data. This is especially pertinent in **Multi-Object Meshes**, where there are prerequisites to be satisfied as well. +While this filter modifies nothing more than the *Shared Faces List*, it has wider downstream implications for the mesh, so it is recommended to run it as close to the start of the pipeline as possible. This avoids recalculating extensive amounts of face data later. This is especially important for **Multi-Object Meshes**, which have additional prerequisites. -The meshes treat both sides of each triangle as valid, the upside to this is that the amount of space needed to store meshes is reduced, but it means that giving every feature the proper winding is impossible. The order of execution is based on feature label numbering, so randomizing order may lead to more visual distinction. +The meshes treat both sides of each triangle as valid. The upside is that less space is needed to store meshes, but it means giving every feature the proper winding is impossible. The order of execution is based on feature label numbering, so randomizing that order may lead to more visual distinction. -This filter requires that vertices are unique, well formed meshes should not have an issue with this. The filter will check this at runtime, returning an error if duplicates are found. If this happens, run *Identify Duplicate Vertices* followed by *Remove flagged Vertices* prior to this. +This filter requires that vertices are unique; well-formed meshes should not have an issue with this. The filter checks this at runtime and returns an error if duplicates are found. If this happens, run [Identify Duplicate Vertices](IdentifyDuplicateVerticesFilter.md) followed by [Remove Flagged Vertices](RemoveFlaggedVerticesFilter.md) prior to this filter. -This filter offers recalculating triangle normals as an option, however it is just a convience option. It simply calls Calculate Triangle Normals at the end. +This filter offers recalculating triangle normals as an option; this is a convenience that simply calls [Compute Triangle Normals](TriangleNormalFilter.md) at the end. -Both *Surface Nets* and *Quick Mesh* (the only synthetic mesh generating currently) already utilize this algorithm at the end of their execution. Thus this filter will be redundant to run on meshes generated from the software's integrated algorithms. +Both [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) and [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) (the only synthetic mesh generators currently available) already apply this algorithm at the end of their execution. This filter is therefore redundant when run on meshes generated by the software's integrated algorithms. -This filter detemines candidates for winding reversal feature by feature based on the volume of the feature. This means its possible you may input a mesh that contains a feature with negative volume (that is untounched during winding repair) that gets all of it's windings reversed as a result. However, to our knowledge there does not exist a case where the feature would not be "inside-out" prior to execution. Essentially, this filter will addtionally preform winding reversal for you if it contains invalid features. +This filter determines candidates for winding reversal feature by feature, based on the **volume** of each feature. A feature whose triangle windings are "inside-out" computes a **negative volume** (the signed volume comes out negative because the surface normals point inward instead of outward). It is possible to input a mesh containing a feature with negative volume that is left untouched during winding repair but then gets all of its windings reversed as a result. To our knowledge there is no case where such a feature would not already be "inside-out" prior to execution. Essentially, this filter will additionally perform winding reversal for you when the mesh contains invalid (inside-out) features. ### Multi-Object Meshes -If your mesh has more than one disconnected object in it, *Label Traingle Geometry* should be run beforehand. This can be confusing because the output of the filter is not a face labels array. To convert the output to face labels, you need to merge this array with another array of zeros (created with *Create Data Array*) using *Combine Attribute Arrays*. The order is not strictly enforced but the internal paradigm is to place the zeros array above the *region ids* array (Option A below). The difference n output is as follows: +If your mesh has more than one disconnected object, run [Label CAD Geometry](LabelTriangleGeometryFilter.md) beforehand. This can be confusing because the output of that filter is a region ids array, not a face labels array. To convert the output to face labels, merge that array with an array of zeros (created with [Create Data Array](CreateDataArrayFilter.md)) using [Combine Attribute Arrays](CombineAttributeArraysFilter.md). The order is not strictly enforced, but the internal convention is to place the zeros array above the *region ids* array (Option A below). The difference in output is as follows: **Option A**: -- Zero's array first +- Zeros array first - Region Ids array second ```console @@ -42,23 +42,28 @@ OR **Option B**: - Region Ids array first -- Zero's array second +- Zeros array second ```console {{1,0}, {1,0}, {1,0}, ...} ``` -The output of this combination will become your face labels for the mesh. +The output of this combination becomes the face labels for the mesh. -The relative pipeline for multiobject meshes should look something like this: +The pipeline for multi-object meshes should look something like this: -1. Identify Duplicate Vertices (optional) -2. Remove Flagged Vertices (optional) -3. Label CAD Geometry (LabelTriangleGeometry) -4. Create Data Array (fill with 0's) -5. Combine Attribute Arrays (make face labels [Zero Array + Region Ids]) +1. [Identify Duplicate Vertices](IdentifyDuplicateVerticesFilter.md) (optional) +2. [Remove Flagged Vertices](RemoveFlaggedVerticesFilter.md) (optional) +3. [Label CAD Geometry](LabelTriangleGeometryFilter.md) +4. [Create Data Array](CreateDataArrayFilter.md) (fill with 0's) +5. [Combine Attribute Arrays](CombineAttributeArraysFilter.md) (make face labels [Zeros Array + Region Ids]) 6. Verify Triangle Winding +### Required Input Sources + +- **Triangle Geometry** -- the surface mesh whose winding will be verified and repaired. +- **Face Labels (or Region Ids)** -- the per-face array identifying the **Features** on either side of each triangle, produced by a surface-meshing filter such as [Create Surface Mesh (Surface Nets)](SurfaceNetsFilter.md) or [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md), or assembled from region ids via [Label CAD Geometry](LabelTriangleGeometryFilter.md) as described above. + % Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/WriteASCIIDataFilter.md b/src/Plugins/SimplnxCore/docs/WriteASCIIDataFilter.md index f8a0aa968a..5a8fdcf1b0 100644 --- a/src/Plugins/SimplnxCore/docs/WriteASCIIDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteASCIIDataFilter.md @@ -2,15 +2,19 @@ ## Group (Subgroup) -IO (Output) (Write) (Export) (Text) (CSV) (ASCII) +IO (Output) ## Description -This filter will write the selected DataArrays to either individual files or as a single CSV style of file. +This filter will write the selected **Data Array**s to either individual files or as a single CSV style of file. The inputs are any existing **Data Array**s (numeric or string) that the user selects to export. + +### Maximum Tuples Per Line + +When writing to multiple files, the *Maximum Tuples Per Line* parameter controls how many tuples are printed on each row of an output file (units: tuples per row). For example, with a value of *1* each tuple is written on its own line; with a value of *10* up to ten tuples are written per line before a new line begins. This makes it possible to reshape long single-column output into a more compact block. The parameter does not apply to string arrays. ## String Data Array Caveats -- The "Maximum Tuples per Line" will not have any effect for that specific array. +- The "Maximum Tuples Per Line" will not have any effect for that specific array. - If the output is for a single file, then each String value will be enclosed in a set of Single Quotes (') characters. ### Multiple Files diff --git a/src/Plugins/SimplnxCore/docs/WriteAbaqusHexahedronFilter.md b/src/Plugins/SimplnxCore/docs/WriteAbaqusHexahedronFilter.md index 0ce78f3152..a8c8c93dbf 100644 --- a/src/Plugins/SimplnxCore/docs/WriteAbaqusHexahedronFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteAbaqusHexahedronFilter.md @@ -6,117 +6,100 @@ IO (Output) ## Description -***WARNING**: If you are not using this filter for stress - strain curves, be sure to disable `Write Dummy Node` or it may mess up mesh connectivity.* +This filter converts a voxel grid (an **Image Geometry**) into a hexahedral element mesh and writes it to a set of Abaqus input (`.inp`) files. **Abaqus** is a commercial *finite-element-analysis* (FEA) software package; FEA is a numerical technique that divides a body into many small, simple elements and solves for quantities such as stress and strain across them. By exporting the microstructure as an Abaqus mesh, the filter lets users run mechanical (stress/strain) simulations on a digital microstructure. -This **Filter** produces the basic five Abaqus .inp files for input into the Abaqus analysis tool. The files created are: xxx.inp (the master file), xxx_nodes.inp, xxx_elems.inp, xxx_elset.inp and xxx_sects.inp. This **Filter** is based on a Python script developed by Matthew W. Priddy (Ga. Tech., early 2015). +Each **Cell** (voxel) in the **Image Geometry** becomes one hexahedral (brick-shaped) element with 8 corner nodes. Nodes shared between neighboring voxels are written only once so the mesh is fully connected. The element type written is `C3D8`, Abaqus's standard 8-node linear brick element. Every element is assigned to an element set named after the **Feature** (grain) it belongs to, using the *Cell Feature Ids* array, so each grain can be given its own material in the simulation. + +![Fig. 1: Each voxel is exported as an 8-node C3D8 hexahedral element (nodes shared between neighbors written once), across five Abaqus .inp files.](Images/WriteAbaqusHexahedron_VoxelToHex.png) + +### Output Files + +The filter writes five plain-text files. The first is a master file that pulls in the other four using Abaqus's `*Include` directive, so the simulation is launched from the master file alone: + +- `.inp` — the master file. It `*Include`s the four files below. +- `_nodes.inp` — the node coordinates. +- `_elems.inp` — the element connectivity (which 8 nodes make up each element). +- `_elset.inp` — the element sets (one set per grain). +- `_sects.inp` — the section definitions assigning a material to each grain set. + +Node coordinates are written in the physical units of the **Image Geometry** (for example microns, if the geometry's spacing is in microns). Each node coordinate is the voxel-grid position scaled by the geometry spacing and offset by its origin. + +### Write Dummy Node + +When the *Write Dummy Node* parameter is enabled, the filter appends one extra "dummy" node at the end of the `_nodes.inp` file. This node is not attached to any element; it exists only as a reference point that some Abaqus stress/strain workflows require (for example, to apply or read periodic boundary conditions). If the export is not being used for stress/strain curves, this parameter should be disabled, because the unused node can interfere with mesh connectivity tools that expect every node to belong to an element. + +### Hourglass Stiffness + +The `_sects.inp` file includes an `*Hourglass Stiffness` value for each grain section. "Hourglass" modes are spurious, zero-energy deformation patterns that reduced-integration brick elements can exhibit; a small artificial stiffness suppresses them. The *Hourglass Stiffness Value* parameter sets this number (default *250*, a dimensionless solver-control value). + +### Required Input Sources + +- **Image Geometry** -- the voxel grid to export. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). One element set is written per Feature Id. ### Example Output +The headers in the snippets below read `DREAM3DLib Version 5.1.566`; these version strings are illustrative and will reflect the actual version that wrote the file. The filter is based on a Python script developed by Matthew W. Priddy (Georgia Tech, early 2015). + The master file: ```text - *Heading - Job 101 - ** Job name : Job 101 - ** Generated by : DREAM3DLib Version 5.1.566.e1e7b7f - *Preprint, echo = NO, model = NO, history = NO, contact = NO - ** - ** ----------------------------Geometry---------------------------- - ** - *Include, Input = 32x32x32_nodes.inp - *Include, Input = 32x32x32_elems.inp - *Include, Input = 32x32x32_elset.inp - *Include, Input = 32x32x32_sects.inp - ** - ** ---------------------------------------------------------------- - ** +*Heading +Job 101 +** Job name : Job 101 +** Generated by : DREAM3DLib Version 5.1.566 +*Preprint, echo = NO, model = NO, history = NO, contact = NO +** +** ----------------------------Geometry---------------------------- +** +*Include, Input = 32x32x32_nodes.inp +*Include, Input = 32x32x32_elems.inp +*Include, Input = 32x32x32_elset.inp +*Include, Input = 32x32x32_sects.inp ``` -The _nodes.inp file: +The `_nodes.inp` file (node ID followed by x, y, z in geometry units): ```text - ** Generated by : DREAM3DLib Version 5.1.566.e1e7b7f - ** ---------------------------------------------------------------- - ** - *Node - 1, 0.000000, 0.000000, 0.000000 - 2, 0.500000, 0.000000, 0.000000 - 3, 1.000000, 0.000000, 0.000000 - 4, 1.500000, 0.000000, 0.000000 - .. +*Node +1, 0.000000, 0.000000, 0.000000 +2, 0.500000, 0.000000, 0.000000 +3, 1.000000, 0.000000, 0.000000 + .. ``` -The _elset.inp file: +The `_elems.inp` file (element ID followed by its 8 node IDs): ```text - ** Generated by : DREAM3DLib Version 5.1.566.e1e7b7f - ** ---------------------------------------------------------------- - ** - ** The element sets - *Elset, elset=cube, generate - 1, 32768, 1 - ** - ** Each Grain is made up of multiple elements - ** - *Elset, elset=Grain1_set - 24126, 24127, 24128, 24159, 24160, 24191, 24192, 25085, 25086, 25087, 25117, 25118, 25119, 25120, 25149, 25150, - 25151, 25152, 25181, 25182, 25183, 25184, 25214, 25215, 25216, 25247, 25248, 26077, 26078, 26079, 26080, 26108, - 26109, 26110, 26111, 26112, 26140, 26141, 26142, 26143, 26144, 26172, 26173, 26174, 26175, 26176, 26204, 26205, - 26206, 26207, 26208, 26237, 26238, 26239, 26240, 26270, 26271, 26272, 26303, 26304, 27069, 27070, 27071, 27072, - 27100, 27101, 27102, 27103, 27104, 27131, 27132, 27133, 27134, 27135, 27136, 27163, 27164, 27165, 27166, 27167, - 27168, 27195, 27196, 27197, 27198, 27199, 27200, 27228, 27229, 27230, 27231, 27232, 27260, 27261, 27262, 27263, - 27264, 27294, 27295, 27296, 27326, 27327, 27328, 27359, 27360, 28093, 28094, 28095, 28096, 28123, 28124, 28125, - 28126, 28127, 28128, 28155, 28156, 28157, 28158, 28159, 28160, 28187, 28188, 28189, 28190, 28191, 28192, 28219, - 28220, 28221, 28222, 28223, 28224, 28252, 28253, 28254, 28255, 28256, 28284, 28285, 28286, 28287, 28288, 28317, - 28318, 28319, 28320, 28350, 28351, 28352, 28383, 28384, 28416, 29116, 29117, 29118, 29119, 29120, 29147, 29148, - 29149, 29150, 29151, 29152, 29179, 29180, 29181, 29182, 29183, 29184, 29211, 29212, 29213, 29214, 29215, 29216, - 29243, 29244, 29245, 29246, 29247, 29248, 29276, 29277, 29278, 29279, 29280, 29308, 29309, 29310, 29311, 29312, - 29341, 29342, 29343, 29344, 29374, 29375, 29376, 29407, 29408, 29440, 30140, 30141, 30142, 30143, 30144, 30171, - 30172, 30173, 30174, 30175, 30176, 30203, 30204, 30205, 30206, 30207, 30208, 30235, 30236, 30237, 30238, 30239, - 30240, 30267, 30268, 30269, 30270, 30271, 30272, 30300, 30301, 30302, 30303, 30304, 30332, 30333, 30334, 30335, - 30336, 30365, 30366, 30367, 30368, 30398, 30399, 30400, 30431, 30432, 31164, 31165, 31166, 31167, 31168, 31195, - 31196, 31197, 31198, 31199, 31200, 31227, 31228, 31229, 31230, 31231, 31232, 31259, 31260, 31261, 31262, 31263, - 31264, 31292, 31293, 31294, 31295, 31296, 31324, 31325, 31326, 31327, 31328, 31357, 31358, 31359, 31360, 31389, - 31390, 31391, 31392, 31422, 31423, 31424, 31455, 31456, 32188, 32189, 32190, 32191, 32192, 32220, 32221, 32222, - 32223, 32224, 32251, 32252, 32253, 32254, 32255, 32256, 32284, 32285, 32286, 32287, 32288, 32316, 32317, 32318, - 32319, 32320, 32348, 32349, 32350, 32351, 32352, 32381, 32382, 32383, 32384, 32413, 32414, 32415, 32416, 32447, - 32448 - *Elset, elset=Grain2_set - .. +*Element, type=C3D8 +1, 1091, 2, 1, 1090, 1124, 35, 34, 1123 +2, 1092, 3, 2, 1091, 1125, 36, 35, 1124 + .. ``` -The _elems.inp file: +The `_elset.inp` file (a "cube" set spanning all elements, then one set per grain — the full grain sets contain many element IDs and are abbreviated here): ```text - ** Generated by : DREAM3DLib Version 5.1.566.e1e7b7f - ** ---------------------------------------------------------------- - ** - *Element, type=C3D8 - 1, 1091, 2, 1, 1090, 1124, 35, 34, 1123 - 2, 1092, 3, 2, 1091, 1125, 36, 35, 1124 - 3, 1093, 4, 3, 1092, 1126, 37, 36, 1125 - 4, 1094, 5, 4, 1093, 1127, 38, 37, 1126 - 5, 1095, 6, 5, 1094, 1128, 39, 38, 1127 - 6, 1096, 7, 6, 1095, 1129, 40, 39, 1128 - .. +** The element sets +*Elset, elset=cube, generate +1, 32768, 1 +** +*Elset, elset=Grain1_set +24126, 24127, 24128, 24159, 24160, 24191, 24192, 25085, 25086, .. +*Elset, elset=Grain2_set + .. ``` -The _sects.inp file: +The `_sects.inp` file (one section per grain, each with its hourglass stiffness): ```text - ** Generated by : DREAM3DLib Version 5.1.566.e1e7b7f - ** ---------------------------------------------------------------- - ** - ** Each section is a separate grain - ** Section: Grain1 - *Solid Section, elset=Grain1_set, material=Grain_Mat1 - *Hourglass Stiffness - 250 - ** -------------------------------------- - ** Section: Grain2 - *Solid Section, elset=Grain2_set, material=Grain_Mat2 - - .. +** Section: Grain1 +*Solid Section, elset=Grain1_set, material=Grain_Mat1 +*Hourglass Stiffness +250 +** Section: Grain2 +*Solid Section, elset=Grain2_set, material=Grain_Mat2 + .. ``` % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/WriteAvizoRectilinearCoordinateFilter.md b/src/Plugins/SimplnxCore/docs/WriteAvizoRectilinearCoordinateFilter.md index 1280f50da4..8590261f7b 100644 --- a/src/Plugins/SimplnxCore/docs/WriteAvizoRectilinearCoordinateFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteAvizoRectilinearCoordinateFilter.md @@ -6,9 +6,17 @@ IO (Output) ## Description -This filter writes out a native Avizo Rectilinear Coordinate data file. Values should be present from segmentation of experimental data or synthetic generation and cannot be determined by this filter. Not having these values will result in the filter to fail/not execute. +This filter writes an **Image Geometry** and its **Cell** *FeatureIds* array to a file that can be read by **Avizo**. Avizo is a commercial 3D visualization and analysis package. Its native data format is **AmiraMesh**, a header-plus-data file (commonly given an `.am` extension). -### Example Output +The filter requires two inputs: an **Image Geometry**, and an Int32 *FeatureIds* **Cell** **Data Array** that labels which **Feature** (for example, which grain) each cell belongs to. The *FeatureIds* values are produced earlier in the pipeline by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md); this filter does not compute them. If no valid *FeatureIds* array is supplied, the filter will not execute. + +The data is written in the **rectilinear-coordinate** form: the file stores explicit per-axis coordinate arrays (the X, Y, and Z positions of the grid lines). This is the counterpart to the [Write Avizo Uniform Coordinate](WriteAvizoUniformCoordinateFilter.md) filter, which instead records a single uniform spacing and bounding box. Use the rectilinear variant when the per-axis coordinate values must be written out explicitly. + +The *Write Binary File* parameter selects the on-disk encoding: *false* (the default) writes the data section as ASCII text, while *true* writes it in little-endian binary, producing smaller files. + +**Units caveat:** the AmiraMesh header always records the coordinate units as `microns`, regardless of the actual units stored on the input **Image Geometry**. If the geometry uses different units, adjust them in Avizo after import. + +### Example AmiraMesh Header # AmiraMesh BINARY-LITTLE-ENDIAN 2.1 # Dimensions in x-, y-, and z-direction @@ -17,18 +25,21 @@ This filter writes out a native Avizo Rectilinear Coordinate data file. Values s Parameters { DREAM3DParams { Author "DREAM3D", - DateTime " . M o n J u n 1 1 0 : 0 1 : 1 4 2 0 1 5 " + DateTime "Mon Jun 1 10:01:14 2015" } Units { - Coordinates "microns" + Coordinates "microns" } - CoordType "rectilinear" + CoordType "rectilinear" } - Lattice { int FeatureIds } = @1 Coordinates { float xyz } = @2 # Data section follows - .. + +### Required Input Sources + +- **Image Geometry** -- the geometry whose dimensions and coordinates are written. +- **Cell Feature Ids** -- an Int32 per-cell label array, produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/WriteAvizoUniformCoordinateFilter.md b/src/Plugins/SimplnxCore/docs/WriteAvizoUniformCoordinateFilter.md index 42d9da60a1..1301d5a552 100644 --- a/src/Plugins/SimplnxCore/docs/WriteAvizoUniformCoordinateFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteAvizoUniformCoordinateFilter.md @@ -6,9 +6,17 @@ IO (Output) ## Description -This filter writes out a native Avizo Uniform Coordinate data file. Values should be present from segmentation of experimental data or synthetic generation and cannot be determined by this filter. Not having these values will result in the filter to fail/not execute. +This filter writes an **Image Geometry** and its **Cell** *FeatureIds* array to a file that can be read by **Avizo**. Avizo is a commercial 3D visualization and analysis package. Its native data format is **AmiraMesh**, a header-plus-data file (commonly given an `.am` extension). -### Example Output +The filter requires two inputs: an **Image Geometry**, and an Int32 *FeatureIds* **Cell** **Data Array** that labels which **Feature** (for example, which grain) each cell belongs to. The *FeatureIds* values are produced earlier in the pipeline by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md); this filter does not compute them. If no valid *FeatureIds* array is supplied, the filter will not execute. + +The data is written in the **uniform-coordinate** form: the file records a single uniform spacing together with the grid's bounding box (minimum and maximum X, Y, and Z), rather than listing per-axis coordinate values. This is the compact counterpart to the [Write Avizo Rectilinear Coordinate](WriteAvizoRectilinearCoordinateFilter.md) filter, which writes explicit per-axis coordinate arrays. Use the uniform variant when the grid has uniform spacing (the usual case for an **Image Geometry**). + +The *Write Binary File* parameter selects the on-disk encoding: *false* (the default) writes the data section as ASCII text, while *true* writes it in little-endian binary, producing smaller files. + +**Units caveat:** the AmiraMesh header always records the coordinate units as `microns`, regardless of the actual units stored on the input **Image Geometry**. If the geometry uses different units, adjust them in Avizo after import. + +### Example AmiraMesh Header # AmiraMesh BINARY-LITTLE-ENDIAN 2.1 # Dimensions in x-, y-, and z-direction @@ -17,19 +25,23 @@ This filter writes out a native Avizo Uniform Coordinate data file. Values shoul Parameters { DREAM3DParams { Author "DREAM3D", - DateTime + DateTime "Mon Jun 1 10:01:14 2015" } Units { - Coordinates "microns" + Coordinates "microns" } - Content " int, uniform coordinates", - # Bounding Box is xmin xmax ymin ymax zmin zmax - BoundingBox , - CoordType "uniform" + Content "int, uniform coordinates", + # Bounding Box is xmin xmax ymin ymax zmin zmax + BoundingBox 0 64 0 64 0 64, + CoordType "uniform" } Lattice { int FeatureIds } = @1 # Data section follows - .. + +### Required Input Sources + +- **Image Geometry** -- the geometry whose dimensions and bounding box are written. +- **Cell Feature Ids** -- an Int32 per-cell label array, produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/WriteBinaryDataFilter.md b/src/Plugins/SimplnxCore/docs/WriteBinaryDataFilter.md index d422016ea4..574404f110 100644 --- a/src/Plugins/SimplnxCore/docs/WriteBinaryDataFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteBinaryDataFilter.md @@ -6,17 +6,37 @@ IO (Output) (Write) (Export) (Binary) ## Description -This **Filter** accepts DataArray(s) as input, extracts the data, and writes each array to a separate binary file in the specified output directory +This filter writes each selected **Data Array** to its own raw binary file in the chosen output directory. One file is written per selected array. + +### How It Works + +For each array, the filter writes the array's numeric values straight to disk as raw bytes. **No header is written** — the file contains only the array values with no metadata describing the data type, dimensions, byte order, or component layout. Because of this, the user must independently record the data type (for example *float32*, *int32*, *uint8*), the tuple and component dimensions, and the endianness chosen below. That information is required later to read the file back correctly. + +The values are written in the same order they are stored in memory: tuple by tuple, with the components of each tuple written together (interleaved). For example, a 3-component array is written as `t0c0, t0c1, t0c2, t1c0, t1c1, t1c2, ...`. + +### File Naming + +Each output file is named after the array it contains, followed by the value of the *File Extension* parameter, and is placed in the *Output Path* directory. For example, an array named `Confidence Index` written with the default extension `.bin` produces a file named `Confidence Index.bin` in the output directory. + +### Reading the Files Back + +These raw binary files can be read back into DREAM3D-NX with the [Read Raw Binary](ReadRawBinaryFilter.md) filter. Because no header was written, the user must supply the data type, dimensions, and endianness to that filter manually — they must match the values used when the file was written. ### Endianess The *Endianess* parameter controls the byte order used when writing numeric values to the binary file: -- **Little Endian [0]**: The least significant byte is stored first. This is the native byte order for x86 and ARM processors and is the most common choice for files consumed on modern desktop systems. -- **Big Endian [1]**: The most significant byte is stored first. This byte order is used by some network protocols and legacy systems. +- *Little Endian*: The least significant byte is stored first. This is the native byte order for x86 and ARM processors and is the most common choice for files consumed on modern desktop systems. +- *Big Endian*: The most significant byte is stored first. This byte order is used by some network protocols and legacy systems. + +## Required Input Sources + +The arrays to export are user-selected **Data Arrays** from anywhere in the **Data Structure**; there is no specific upstream producer filter required. % Auto generated parameter table will be inserted here +## Example Pipelines + ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/SimplnxCore/docs/WriteDREAM3DFilter.md b/src/Plugins/SimplnxCore/docs/WriteDREAM3DFilter.md index 24e258f4d9..7ce5d70186 100644 --- a/src/Plugins/SimplnxCore/docs/WriteDREAM3DFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteDREAM3DFilter.md @@ -1,5 +1,9 @@ # Write DREAM3D-NX File +## Group (Subgroup) + +IO (Output) + ## Description This **Filter** writes the current `DataStructure` to disk as an HDF5 file with the `.dream3d` extension. The file contains every `DataArray`, geometry, attribute matrix, and group in the pipeline, along with the pipeline itself so the work can be re-run or inspected later. @@ -34,6 +38,10 @@ The `.xdmf` file does not contain a copy of the data — it is a metadata wrappe Enabling XDMF costs almost nothing (the file is small and fast to write) and is the recommended setting whenever visualization outside DREAM3D-NX is a possibility. It can safely be left off for intermediate pipeline outputs that will only be re-read by DREAM3D-NX itself. +### Required Input Sources + +None — this filter writes whatever currently exists in the **DataStructure** to the output file. If the file already exists it is overwritten. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/WriteFeatureDataCSVFilter.md b/src/Plugins/SimplnxCore/docs/WriteFeatureDataCSVFilter.md index a1ff8e7b8d..39c80d7ce1 100644 --- a/src/Plugins/SimplnxCore/docs/WriteFeatureDataCSVFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteFeatureDataCSVFilter.md @@ -6,10 +6,12 @@ IO (Output) ## Description -This **Filter** writes the data associated with each **Feature** to a file name specified by the user in *CSV* format. Every array in the **Feature** map is written as a column of data in the *CSV* file. The user can choose to also write the neighbor data. Neighbor data are data arrays that are associated with the neighbors of a **Feature**, such as: list of neighbors, list of misorientations, list of shared surface areas, etc. These blocks of info are written after the scalar data arrays. Since the number of neighbors is variable for each **Feature**, the data is written as follows (for each **Feature**): Id, number of neighbors, value1, value2,...valueN. +A **Feature** is a grouped region of the data, such as a grain. This **Filter** writes the data associated with each **Feature** to a file name specified by the user in *CSV* format. Every array in the **Feature** map is written as a column of data in the *CSV* file. The user can choose to also write the neighbor data. Neighbor data are data arrays that are associated with the neighbors of a **Feature**, such as: list of neighbors, list of misorientations, list of shared surface areas, etc. These blocks of info are written after the scalar data arrays. Since the number of neighbors is variable for each **Feature**, the data is written as follows (for each **Feature**): Id, number of neighbors, value1, value2,...valueN. ### Example Output +In the examples below, the very first line of the output (here `5414`) is the total **Feature** count — the number of Features whose data follows. + The *CSV* file: 5414 @@ -49,6 +51,14 @@ The *Delimiter* parameter selects the character used to separate values within e - **Colon [3]**: Values are separated by a colon (`:`). - **Tab [4]**: Values are separated by a tab character. +## Required Input Sources + +The per-feature columns come from any feature-level **Data Array**s present in the selected Feature **Attribute Matrix** (for example feature phases, sizes, or average orientations). When *Write Neighbor Data* is enabled, the additional neighbor blocks require: + +- **Number of Neighbors** and the contiguous **Neighbor List** -- produced by [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md). +- **Shared Surface Area List** -- produced by [Compute Feature Neighbors](ComputeFeatureNeighborsFilter.md). +- **Neighbor Misorientation List** -- produced by [Compute Feature Neighbor Misorientations](../OrientationAnalysis/ComputeFeatureNeighborMisorientationsFilter.md). + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/WriteImageFilter.md b/src/Plugins/SimplnxCore/docs/WriteImageFilter.md index c47a160161..8a2c898fee 100644 --- a/src/Plugins/SimplnxCore/docs/WriteImageFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteImageFilter.md @@ -91,6 +91,10 @@ the padded size. - **Interaction with *Flip Output Image***: the flip applies to the image data only; the band and its bar remain upright at the bottom of the written file. +### Required Input Sources + +- **Image Data** -- a `uint8` (or `uint16`/`float32` for TIFF) **Cell Data** array on an **Image Geometry**, produced by an image reader such as [Read Image](ReadImageFilter.md) / [Read Images [3D Stack]](ReadImageStackFilter.md), or by any upstream image-processing filter. + % Auto generated parameter table will be inserted here ## Example Pipelines diff --git a/src/Plugins/SimplnxCore/docs/WriteLAMMPSFileFilter.md b/src/Plugins/SimplnxCore/docs/WriteLAMMPSFileFilter.md index 1447639280..f7ec695b39 100644 --- a/src/Plugins/SimplnxCore/docs/WriteLAMMPSFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteLAMMPSFileFilter.md @@ -6,13 +6,40 @@ IO (Output) ## Description -This **Filter** is used to create an atomistic representation of microstructure from image data. The data file produced by this **filter** can be used for initializing the atomic coordinates in LAMMPS package. +This filter writes atom coordinates from a **Vertex Geometry** (a point cloud, where each point is one atom) into an input file for **LAMMPS**. LAMMPS (Large-scale Atomic/Molecular Massively Parallel Simulator) is an open-source molecular-dynamics code from Sandia National Laboratories that simulates the motion of atoms and molecules. -This **filter** should be used in conjunction with another **filter** named "Insert Atoms". Given a microstructure, the "Insert Atoms" filter follows the orientation of different features to insert atoms in them and saves the configuration of atoms in a **Vertex Data Container**. The "Export LAMMPS Filter" uses this **Vertex Data Container** to create an input file for LAMMPS. +The typical workflow first builds an atomistic representation of a microstructure with the *Insert Atoms* filter. Given a microstructure, *Insert Atoms* follows the crystallographic orientation of each **Feature** (grain) to place atoms inside it and stores the resulting atom positions in a **Vertex Geometry**. This **Write LAMMPS File** filter then reads that **Vertex Geometry** and writes a LAMMPS data file that LAMMPS can use to initialize the atom coordinates of a simulation. -% Auto generated parameter table will be inserted here +Atom coordinates are written in the physical units of the **Vertex Geometry** (the same units as the vertex positions, typically Angstroms or nanometers for atomistic data). The *Atom Feature Labels* array assigns each atom an atom type, so atoms belonging to different grains can be distinguished in the simulation. + +### Example Output + +A LAMMPS data file begins with header lines giving the atom and type counts and the simulation box bounds, followed by an `Atoms` section listing, for each atom, its ID, type, and x/y/z coordinates: + +```text +Number of Atoms + +8000 atoms +25 atom types + +0.0 100.0 xlo xhi +0.0 100.0 ylo yhi +0.0 100.0 zlo zhi -## Example Pipelines +Atoms + +1 1 0.000000 0.000000 0.000000 +2 1 1.500000 0.000000 0.000000 +3 2 3.000000 0.000000 0.000000 + .. +``` + +### Required Input Sources + +- **Vertex Geometry** -- the atom positions to export, typically produced by the *Insert Atoms* filter. +- **Atom Feature Labels** -- a per-atom integer array (one value per vertex) giving each atom's type, also produced by *Insert Atoms*. + +% Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/WriteLosAlamosFFTFilter.md b/src/Plugins/SimplnxCore/docs/WriteLosAlamosFFTFilter.md index 2b40aa11b1..e62a7fe75b 100644 --- a/src/Plugins/SimplnxCore/docs/WriteLosAlamosFFTFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteLosAlamosFFTFilter.md @@ -6,40 +6,36 @@ IO (Output) ## Description -This **Filter** will create the directories along the path to the file if possible. +This filter writes per-**Cell** data from an **Image Geometry** to a plain-text file formatted for Ricardo Lebensohn's FFT-based simulation codes[1]. That code is a full-field micromechanical *crystal-plasticity* simulation: it predicts how a polycrystalline microstructure deforms by solving the mechanical equations on the voxel grid using a Fast Fourier Transform (FFT) method, with one material point per voxel. -This **Filter** writes out **CellData** from an **Image Geometry** to a file that is appropriate to use as an input into Ricardo Lebensohn's FFT 3D simulation codes[1]. +Each line of the output describes a single **Cell** and combines its crystallographic orientation, its grid location, and its **Feature** (grain) and phase membership. The orientation is given as three **Euler angles** — three angles (in the Bunge Z-X-Z convention) that together specify how a crystal is rotated relative to the sample reference frame. -The format of the file is an ASCII text file with the following space delimited information: +If possible, the filter creates any missing directories along the path to the output file. + +The format of the file is an ASCII text file with the following space-delimited information: Phi1 Phi Phi2 X Y Z Feature_ID Phase_ID The Euler angles are in degrees. X, Y, Z are integer indices into the **Image** geometry. Feature ID & Phase ID are the integer values for the feature and phase **Starting at One (1)**. +### Required Input Sources + +- **Image Geometry** -- the voxel grid to export. +- **Cell Euler Angles** -- a 3-component, per-cell orientation array (Bunge Z-X-Z, in degrees), typically read from EBSD data via [Read EDAX EBSD Data (.ang)](../OrientationAnalysis/ReadAngDataFilter.md), [Read Oxford Instr. EBSD Data (.ctf)](../OrientationAnalysis/ReadCtfDataFilter.md), or [Read H5EBSD File](../OrientationAnalysis/ReadH5EbsdFilter.md). +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). +- **Cell Phases** -- a per-cell phase index, read alongside the Euler angles from the EBSD readers above. + ### Example Output -The output file: +The output file (columns: Phi1, Phi, Phi2, X, Y, Z, Feature_ID, Phase_ID): 90.000 0.000 0.000 1 1 1 0 1 - 90.000 0.000 0.000 2 1 1 0 1 - 90.000 0.000 0.000 3 1 1 0 1 + 90.000 0.000 0.000 2 1 1 0 1 + 90.000 0.000 0.000 3 1 1 0 1 90.000 0.000 0.000 4 1 1 0 1 - 90.000 0.000 0.000 5 1 1 0 1 - 90.000 0.000 0.000 6 1 1 0 1 - 90.000 0.000 0.000 7 1 1 0 1 - 90.000 0.000 0.000 8 1 1 0 1 - 90.000 0.000 0.000 9 1 1 0 1 - 90.000 0.000 0.000 10 1 1 0 1 - 90.000 0.000 0.000 11 1 1 0 1 - 90.000 0.000 0.000 12 1 1 0 1 - 90.000 0.000 0.000 13 1 1 0 1 - 90.000 0.000 0.000 14 1 1 0 1 - 90.000 0.000 0.000 15 1 1 0 1 - 90.000 0.000 0.000 16 1 1 0 1 - 90.000 0.000 0.000 17 1 1 0 1 - 135.009 55.304 295.274 18 1 1 1742 1 - 90.000 0.000 0.000 19 1 1 0 1 - .. + 135.009 55.304 295.274 18 1 1 1742 1 + 90.000 0.000 0.000 19 1 1 0 1 + .. % Auto generated parameter table will be inserted here @@ -47,8 +43,6 @@ The output file: [1] R.A. Lebensohn, 2001. N-site modeling of a 3D viscoplastic polycrystal using Fast Fourier Transform. Acta mater. 49, 2723-2737. -## Example Pipelines - ## License & Copyright Please see the description file distributed with this **Plugin** diff --git a/src/Plugins/SimplnxCore/docs/WriteNodesAndElementsFilesFilter.md b/src/Plugins/SimplnxCore/docs/WriteNodesAndElementsFilesFilter.md index 280fda67ba..1c6d4b9f91 100644 --- a/src/Plugins/SimplnxCore/docs/WriteNodesAndElementsFilesFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteNodesAndElementsFilesFilter.md @@ -8,7 +8,7 @@ IO (Output) This **Filter** exports node based geometries into structured text files. It allows users to save the following: -1. Node Data (Vertices): Export the coordinates of points that define the geometry. +1. Node Data (Vertices): Export the coordinates of points that define the geometry. The coordinates are written in the geometry's physical units (the same units as the geometry's vertex coordinates). 2. Element Data (Connectivity): Export the node indices that make up the edges, faces, or volumes of the geometry. The filter gives the user the option to export a node file, element file, or both. It also allows the user to decide whether or not to number the nodes and elements and whether or not to include headers for the node and element files. @@ -40,7 +40,7 @@ In this example output, the following filter parameter options have been selecte The output is listed below where column 1 is controlled by the `Number Elements/Cells` parameter and line #2 is controlled by the `Include Element/Cell File Header` parameter. -Some explanation as to the columns is requried for this output. +Some explanation as to the columns is required for this output. - Column #1 is just the index of the element - Column #2 is the number of vertices in this element. in this output, 3 since this was exported from a Triangle Geometry @@ -73,6 +73,10 @@ ELEMENT_NUM NUM_VERTS_IN_ELEMENT V0_Index V1_Index V2_Index | Hexahedral | 8 | +## Required Input Sources + +- **Node-based Geometry** -- any node-based geometry (**Vertex**, **Edge**, **Triangle**, **Quadrilateral**, **Tetrahedral**, or **Hexahedral Geometry**), produced by a surface-meshing filter such as [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md) or a geometry-creation filter such as [Create Geometry](CreateGeometryFilter.md). + % Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/WriteSPParksSitesFilter.md b/src/Plugins/SimplnxCore/docs/WriteSPParksSitesFilter.md index 443adeba36..7cc8629520 100644 --- a/src/Plugins/SimplnxCore/docs/WriteSPParksSitesFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteSPParksSitesFilter.md @@ -4,39 +4,50 @@ IO (Output) -## Description ## - -This **Filter** writes to a data file in a format used by [SPPARKS Kinetic Monte Carlo Simulator](http://spparks.sandia.gov/). - -+ The "Values" section is a pair of numbers where the first number is the site ID and the second number is the actual value of the **Feature** Id at that site. -+ LINE 4 evidently must be what is shown in the example file. -+ LINE 3 is the total number of **Cells**. -+ LINES 5, 6 and 7 are the dimensions of the volume. - -More information can be found at the [SPParks web site.](http://spparks.sandia.gov/doc/read_sites.html) or [http://spparks.sandia.gov/doc/dump.html](http://spparks.sandia.gov/doc/dump.html) - -**This filter will write an SPParks _Sites_ file format** - -## Example Output ## - - [LINE 1] - - [LINE 2] 3 dimension - [LINE 3] 8000000 sites - [LINE 4] 26 max neighbors - [LINE 5] 0 200 xlo xhi - [LINE 6] 0 200 ylo yhi - [LINE 7] 0 200 zlo zhi - [LINE 8] - [LINE 9] Values - [LINE 10] - 1 944 - 2 944 - 3 944 - 4 944 - 5 509 - 6 509 - 7 509 - .. +## Description + +This filter writes a data file in the format used by [SPPARKS](http://spparks.sandia.gov/). **SPPARKS** (Stochastic Parallel PARticle Kinetic Simulator) is an open-source Kinetic Monte Carlo code from Sandia National Laboratories used to simulate microstructure evolution, such as grain growth. + +SPPARKS represents the microstructure as a set of **sites**. In this export each site corresponds to one **Cell** (voxel) of the input **Image Geometry**, and the value stored at each site is that cell's **Feature** Id (the grain it belongs to). The `Values` section of the file is therefore a list of pairs: the first number in each pair is the site ID (running from *1*), and the second number is the Feature Id at that site. + +The header lines describe the lattice the sites live on: + +- **LINE 1** is intentionally left blank (a separator). +- **LINE 2** records the spatial dimension (always `3 dimension` for a 3D **Image Geometry**). +- **LINE 3** is the total number of **Cells** (sites). +- **LINE 4** is the maximum number of neighbors per site. For a 3D cubic lattice this is `26 max neighbors` (the 26 surrounding cells), and SPPARKS expects exactly this value for this lattice type. +- **LINES 5, 6, and 7** give the box extents along x, y, and z. These pairs (for example `0 200`) are **cell-index** extents — dimensionless counts of cells along each axis — not physical lengths in microns. +- **LINE 8** is a blank separator before the `Values` keyword. + +More information can be found in the SPPARKS documentation for [read_sites](http://spparks.sandia.gov/doc/read_sites.html) and [dump](http://spparks.sandia.gov/doc/dump.html). + +### Required Input Sources + +- **Image Geometry** -- the voxel grid whose cells become SPPARKS sites. +- **Cell Feature Ids** -- produced by a segmentation filter such as [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). The Feature Id at each cell becomes that site's value. + +### Example Output + +```text +[LINE 1] +[LINE 2] 3 dimension +[LINE 3] 8000000 sites +[LINE 4] 26 max neighbors +[LINE 5] 0 200 xlo xhi +[LINE 6] 0 200 ylo yhi +[LINE 7] 0 200 zlo zhi +[LINE 8] +[LINE 9] Values +[LINE 10] +1 944 +2 944 +3 944 +4 944 +5 509 +6 509 +7 509 + .. +``` % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/WriteStlFileFilter.md b/src/Plugins/SimplnxCore/docs/WriteStlFileFilter.md index 302c9dfa18..9e41cff946 100644 --- a/src/Plugins/SimplnxCore/docs/WriteStlFileFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteStlFileFilter.md @@ -6,21 +6,26 @@ IO (Output) ## Description -***WARNING:*** The filter now provides implict overflow capabilities for very large datasets, but **this will lead to many duplicated vertices being produced**. Be sure to run a cleaning algorithm when importing these files into DREAM3DNX or other software. For more info see below. +***WARNING:*** The filter now provides implicit overflow capabilities for very large datasets, but **this will lead to many duplicated vertices being produced**. Be sure to run a cleaning algorithm when importing these files into DREAM3DNX or other software. For more info see below. -This **Filter** can generate a single or multiple binary STL (StereoLithography) files for a given Triangle Geometry. +This **Filter** can generate a single or multiple binary STL (StereoLithography) files for a given **Triangle Geometry**. The vertex coordinates written to each STL file are in the **Triangle Geometry**'s physical units. ### File Grouping Type The *File Grouping Type* parameter provides the following choices: -- **Features [0]**: The user must supply a 2-component Int32 array where the values are the 2 features that each triangle belongs to. One STL file is written per feature. +- **Features [0]**: The user must supply a 2-component Int32 array (a **FaceLabels**-style array) where the two values for each triangle are the **Feature** IDs on either side of that triangle. One STL file is written per feature. - **Phases and Features [1]**: The same 2-component array as Features, plus a single-component array representing a higher-order grouping such as a phase or part number. - **Single File [2]**: The entire Triangle Geometry is saved as a single STL file. - **Part Index [3]**: The user must supply a single-component Int32 array at the triangle level that indicates which part each triangle belongs to. This filter supports overflow capabilities for all of the "File Grouping Type"(s) (including single file). This means if you have over the maximum number of triangles for a single STL file (2,147,483,647), the remaining triangles will be written to "overflow files" which will follow the following syntax `{filename}_overflow_{count}`. *Warnings will be emitted during preflight if it is known or a possibility this will occur.* Due to the nature of STL files containing all the vertices relative to the triangles in the file, **duplicate vertices will be written between the files**. For single file overflow, the files will be written in parallel with the number of additional tasks being equivalent to `({number of triangles in Geometry} / 2,147,483,647) + 1`. For multiple files, the existing tasks handling the grouping write out are also responsible for creating/writing any overflow files. +## Required Input Sources + +- **Triangle Geometry** -- a surface mesh produced by a surface-meshing filter such as [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). +- **Face Labels** (only when grouping by feature) -- a 2-component array, on the triangle/face data, holding the two **Feature** IDs on either side of each triangle. This is produced by the same surface-meshing step, for example [Create Surface Mesh (QuickMesh)](QuickSurfaceMeshFilter.md). + % Auto generated parameter table will be inserted here ## License & Copyright diff --git a/src/Plugins/SimplnxCore/docs/WriteVtkRectilinearGridFilter.md b/src/Plugins/SimplnxCore/docs/WriteVtkRectilinearGridFilter.md index 1a275277be..39612f039c 100644 --- a/src/Plugins/SimplnxCore/docs/WriteVtkRectilinearGridFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteVtkRectilinearGridFilter.md @@ -6,7 +6,20 @@ I/O Filters ## Description -This Filter writes a VTK legacy file with a Dataset type of `RECTILINEAR_GRID`. The user can select which arrays from the Image Geometry will be written to the file. +This filter writes the selected data to a **VTK legacy file**. A VTK legacy file is the older, human-readable file format used by the Visualization Toolkit (VTK); it can be opened directly by common scientific visualization tools such as **ParaView** and **VisIt**. + +The file is written with a dataset type of `RECTILINEAR_GRID`. A rectilinear grid stores three explicit per-axis coordinate arrays (one list of X positions, one of Y positions, and one of Z positions). The grid lines are axis-aligned but the spacing along each axis may vary. + +Although the input to this filter is an **Image Geometry** (which has a single uniform spacing along each axis), the output is written in the rectilinear-grid form: the filter expands the image's uniform spacing into the explicit per-axis coordinate arrays that the `RECTILINEAR_GRID` format requires. If the output only needs uniform spacing, the smaller [Write Vtk Structured Points](WriteVtkStructuredPointsFilter.md) format may be preferable. + +The user selects which **Cell** **Data Array**s from the **Image Geometry** are written into the file. Each selected array becomes a cell-data field in the VTK file. + +The *Write Binary File* parameter controls the on-disk encoding. When *false* (the default), the data is written as plain ASCII text, which is portable and easy to inspect but larger and slower to read. When *true*, the data is written in VTK's binary form, producing smaller files that load faster. + +### Required Input Sources + +- **Image Geometry** -- the geometry whose dimensions and spacing define the grid. +- **Cell Data Array(s) to write** -- any per-cell arrays on the **Image Geometry**. A common choice is a *FeatureIds* array produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here diff --git a/src/Plugins/SimplnxCore/docs/WriteVtkStructuredPointsFilter.md b/src/Plugins/SimplnxCore/docs/WriteVtkStructuredPointsFilter.md index 5c7808dcb6..3ad3e1e31c 100644 --- a/src/Plugins/SimplnxCore/docs/WriteVtkStructuredPointsFilter.md +++ b/src/Plugins/SimplnxCore/docs/WriteVtkStructuredPointsFilter.md @@ -6,9 +6,24 @@ I/O Filters ## Description -This Filter writes a VTK legacy file with a Dataset type of `STRUCTURED_POINTS`. The user can select which arrays from the Image Geometry will be written to the file. +This filter writes the selected data to a **VTK legacy file**. A VTK legacy file is the older, human-readable file format used by the Visualization Toolkit (VTK); it can be opened directly by common scientific visualization tools such as **ParaView** and **VisIt**. -Note: This filter only writes cell data to the VTK file. +The file is written with a dataset type of `STRUCTURED_POINTS`. A structured-points dataset describes a regular grid with uniform spacing along each axis: the grid is fully defined by its origin, its per-axis spacing, and its dimensions, so no explicit coordinate arrays are stored. This makes it the most compact VTK form for image data. + +The user selects which **Cell** **Data Array**s from the **Image Geometry** are written into the file. + +**Note:** This filter only writes cell data to the VTK file. + +### When to use this filter vs Write Vtk Rectilinear Grid + +Use **Write Vtk Structured Points** when the **Image Geometry** has uniform spacing (the usual case) and a compact file is desired. Use [Write Vtk Rectilinear Grid](WriteVtkRectilinearGridFilter.md) when the output must store explicit per-axis coordinate arrays (for example, to interoperate with a tool that expects a `RECTILINEAR_GRID` dataset). + +The *Write Binary File* parameter controls the on-disk encoding. When *false* (the default), the data is written as plain ASCII text, which is portable and easy to inspect but larger and slower to read. When *true*, the data is written in VTK's binary form, producing smaller files that load faster. + +### Required Input Sources + +- **Image Geometry** -- the geometry whose origin, spacing, and dimensions define the grid. +- **Cell Data Array(s) to write** -- any per-cell arrays on the **Image Geometry**. A common choice is a *FeatureIds* array produced by [Segment Features (Scalar)](ScalarSegmentFeaturesFilter.md). % Auto generated parameter table will be inserted here

-OnS%UiFP2yWbuArO!1w;ef2V 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