-
Notifications
You must be signed in to change notification settings - Fork 24
Description
This filter has 2 major known bugs that won't be back patched, but are fixed in DREAM3DNX version 7.5+.
Issue 1: Only values more than the supplied min number of neighbors is checked
Example
Consider this case:
You have three target voxels (A,B,C). A has 6 good neighbors, B has 5 good neighbors, C has 4 good neighbors. If you set 4 as the min number of neighbors, you would expect all of the voxels to be flipped. However, only A and B get flipped. Similarly if you set 6 as the min number of neighbors, none will be flipped even though A should be valid.
Fix
To fix this supply less than what you actually want to be valid by 1. From the example above, instead of supplying 4 as the min number of neighbors you would supply 3 to flip all the voxels.
Ramifications
There are more good voxels that are not being considered potentially skewing downstream results.
Issue 2: Invalid neighbor voxels potentially flagged good
The algorithm did not clear variables between iterations allowing a case where a neighbor voxel with a different phase was counted if the last valid neighbor was less than the supplied tolerance. This led to mask values being flipped that did not meet the correct number of neighbors, which potentially caused a chain of invalid values to be marked valid.
Example
Consider this case:
You have three target voxels (A,B,C). A has 6 good neighbors, B has 5 good neighbors, C has 4 good neighbors. Say B and C are close by in parsing order, B gets parsed first correctly and the last neighbor it checks was valid and updated misorientation value. When it gets to C the first two neighbors are supposed to be ignored because they have different phases than C, however, because of the bug the misorientation value from Bs last valid neighbor is used and the invalid neighbor gets counted. Then when it comes time to check min number of neighbors C gets 5 instead of 4 and gets flipped potentially causing voxels checked after to be flipped as well since C is now valid.
Fix
None
Ramifications
This filter is sequentially dependent in nature, in that if a value gets flipped the neighboring values have their good neighbor counts updated and reevaluated. Thus, when this bug is hit it can cause a chain that flips many invalid cells to valid.