Hi Yuanyuan,In your example the image data range is not being rescaled as it already has dtype float. `img_as_float` will rescale from [0:255] to [0:1] only if the dtype of input ndarray is of integer family (and, in your case, uint8).Take a look:In [3]: nd_int = np.random.randint(0, 255, (3, 3))In [4]: nd_intOut[4]:array([[ 85, 15, 60],[225, 252, 32],[162, 173, 34]])In [5]: nd_int = nd_int.astype(np.uint8)In [6]: skimage.img_as_float(nd_int)Out[6]:array([[ 0.33333333, 0.05882353, 0.23529412],[ 0.88235294, 0.98823529, 0.1254902 ],[ 0.63529412, 0.67843137, 0.13333333]])Please, notice that if your data lies in a range [0:255], but the ndarray dtype is not uint8 (e.g. uint16, int8, etc), you will get different results.Regards,Egor2016-12-27 19:12 GMT+03:00 wine lover <winecoding@gmail.com>:Hi Egor,Thank you for the suggestion. This is how I modify the codeimgs_equalized = np.random.rand(imgs.shape[0],imgs.shape[1],imgs.shape[2],img s.shape[3]) for i in range(imgs.shape[0]):print('imgs[i,0] ',imgs[i,0].shape)print('imgs[i,0] ',imgs[i,0].dtype)print('imgs[i,0] ',imgs[i,0].max())print('imgs[i,0] ',imgs[i,0].min())imgs[i,0]=img_as_float(imgs[i,0]) print('afte applying astype')print('imgs[i,0] ',imgs[i,0].shape)print('imgs[i,0] ',imgs[i,0].dtype)print('imgs[i,0] ',imgs[i,0].max())print('imgs[i,0] ',imgs[i,0].min())the output isimgs[i,0] (584, 565)imgs[i,0] float64imgs[i,0] 255.0imgs[i,0] 0.0afte applying astypeimgs[i,0] (584, 565)imgs[i,0] float64imgs[i,0] 255.0imgs[i,0] 0.0Looks like it does not convert the image type as I expected, in specific, the maximum value.Thanks,YuanyuanOn Tue, Dec 27, 2016 at 1:39 AM, Egor Panfilov <egor.v.panfilov@gmail.com> wrote:Dear Yuanyuan,First of all, it is not a good idea to initialize the array with values using `np.empty`. I'd recommend to use either `np.random.rand` or `np.random.randint`.As for main point of your question, I believe you might need http://scikit-image.org/docs/dev/api/skimage.html#img-a (see also http://scikit-image.org/ds-float ocs/dev/user_guide/data_types. ).html So, you can either create an array of floats [0:1) via `np.random.rand`, or create an array of uints via `np.random.randint`, and call `img_as_float`. Then `equalize_adapthist` should work flawlessly.Regards,Egor2016-12-27 1:27 GMT+03:00 wine lover <winecoding@gmail.com>:______________________________Dear All,I was trying to use the above code segment for performing Contrast Limited Adaptive Histogram Equalization (CLAHE).def clahe_equalized(imgs):imgs_equalized = np.empty(imgs.shape)for i in range(imgs.shape[0]):print('imgs[i,0] ',imgs[i,0].dtype)print('imgs[i,0] ',imgs[i,0].max())print('imgs[i,0] ',imgs[i,0].min())imgs_equalized[i,0] = exposure.equalize_adapthist(imgs[i,0],clip_limit=0.03) return imgs_equalizedThe dtype is float64, maximum value is 255.0 and minimum value is 0.0Running the program generates the following error message ( I only keep the related ones)imgs_equalized[i,0] = exposure.equalize_adapthist(imgs[i,0],clip_limit=0.03) raise ValueError("Images of type float must be between -1 and 1.")ValueError: Images of type float must be between -1 and 1.In accordance with the above error message and image characteristics, what are the best way to handle this scenario.I have been thinking of two approaches
- add imgs[i,0] = imgs[i,0]/255. which scale it to 0 and 1
- convert imgs[i,0] from float64 to unit8
but imgs[i,0] = imgs[i,0].astype(np.unit8) gives the error message such asimgs[i,0]=imgs[i,0].astype(np.unit8) AttributeError: 'module' object has no attribute 'unit8'Would you like to give any advice on this problem? Thank you very much!_________________
scikit-image mailing list
scikit-image@python.org
https://mail.python.org/mailman/listinfo/scikit-image
_______________________________________________
scikit-image mailing list
scikit-image@python.org
https://mail.python.org/mailman/listinfo/scikit-image