Images are shown for DIFFERENT EVENTS for demonstration purpose only
Algorithm
Chuck suggested merging algorithm with sequence of procedures as follows.
Original array
For test purpose use image shape=(50,50) random standard normal distribution with sigma=10
Split array for integer and float
Input array with float number of photons per pixel is split for (floor) unsigned integer and fractional float [0,1)
Find local maximums
Fractional float array is used to search for local maximums in the rank=1 cross region (among 4 pixels closest to the central):
Color coding:
- (0) dark blue - not maximum
- (1) bright blue - local maximum of rank 1 in the row
- (2) yellow - local maximum of rank 1 in the column
- (3) red - local maximum of rank 1 in the cross region
Find couples of connected pixels
Local maximum (with threshold>0.25) is connected to the nearest (not yet used) neighbor with maximal intensity:
Different colors show pairs of connected pixels
Merge coupled pixels
Each pair total intensity (with threshold 0.75) is used to count additional integer number of photons.
Sum arrays
Add array with merged photons with array of integer number of photons:
Implementation
- C++ algorithm is implemented in ImgAlgos::AlgImgPros::mapOfPhotonNumbersV1
- Boost-python wrapper is in ImgAlgos.pyImgAlgos.cpp
- Pure python wrapper ImgAlgos.PyAlgos.py
Presentation in the Detector package
Reference to ImgAlgos.PyAlgos.photon is in AlgoAccess.py
- AreaDetector.py has photon(...) method