HistogramLUTWidget and black images

155 views
Skip to first unread message

Luca Piazza

unread,
Feb 19, 2018, 4:43:37 AM2/19/18
to pyqtgraph
Hello everybody!

beginner here... ;)
I'm writing a little GUI in PYQT5 to display images and I'd like to add this histogram function.
The problem arises when my images are almost or completely black.
In case of an image with all 0 pixels the histogram breaks my application raising the following error:

File "C:\Program Files\Python36\lib\site-packages\pyqtgraph\graphicsItems\ImageItem.py", line 464, in getHistogram
    bins = np.arange(mn, mx+1.01*step, step, dtype=np.int)
ValueError: arange: cannot compute length


In case of an image with very few counts the histogram breaks my application raising the following error:

File "C:\Program Files\Python36\lib\site-packages\numpy\lib\function_base.py", line 727, in histogram
    '`bins` must increase monotonically, when an array')
ValueError: `bins` must increase monotonically, when an array

Any idea for any solutions?
I don't have the knowledge, unfortunately, to modify the widget myself.

Thanks!
Luca


ps... I will prepare a minimal example in few hours, but I preferred to post this first

Jim Crowell

unread,
Oct 10, 2018, 10:05:17 AM10/10/18
to pyqtgraph
I've also run into this issue. The problem is in pyqtgraph/graphicsItems/ImageItem.py, in getHistogram():

        if bins == 'auto':
            mn
= stepData.min()
            mx
= stepData.max()

...when mx == mn. I just added in immediately after that:

 
           if mx == mn:
                mx
+= 1



Jim Crowell

unread,
Oct 10, 2018, 10:09:55 AM10/10/18
to pyqtgraph
Oh, and BTW, the easiest way to demo the issue is to take pyqtgrapy/examples/HistogramLUT.py and replace:

data = pg.gaussianFilter(np.random.normal(size=(256, 256, 3)), (20, 20, 0))
for i in range(32):
   
for j in range(32):
        data
[i*8, j*8] += .1




with:

data = np.zeros((256,256), dtype=np.uint8)

Patrick

unread,
Oct 13, 2018, 9:33:53 PM10/13/18
to pyqtgraph
Hi,

I think there's a bug in ImageItem.py when returning a histogram for images with unsigned integer data types, and all pixels the same value.

Try changing line 495 in ImageItem.py from:
step = np.ceil((mx-mn) / 500.)
to
step = np.ceil((mx-mn) / 500.) if not (mx-mn) == 0 else 1

Patrick
Reply all
Reply to author
Forward
0 new messages