[scikit-image] image type issue and failed conversion

Juan Nunez-Iglesias jni.soma at gmail.com
Tue Dec 27 19:13:55 EST 2016


Oh, right, sorry, now I see what you're doing.

Arrays are homogeneous, meaning every value has the same type. If you write:

imgs[i, 0] = imgs[i, 0].astype(np.uint8)

you are not changing the type of imgs, so you explicitly cast to uint8 and then the assignment (=) implicitly casts it back to float64. Oops! =)

Please follow the advice of Egor and find the img_as_ubyte and img_as_float methods, and use those to convert images of different types.

Juan.


On 28 Dec 2016, 2:48 AM +1100, wine lover , wrote:
> Hi Juan,
>
> Thanks for pointing the typo. I corrected it, and looks like imgs[i,0]=imgs[i,0].astype(np.unit8) does not solve the problem.
>
> Here is the screenshot of result
>
> imgs[i,0]  (584, 565)
> imgs[i,0]  float64
> imgs[i,0]  255.0
> imgs[i,0]  0.0
> afte applying astype
> imgs[i,0]  (584, 565)
> imgs[i,0]  float64
> imgs[i,0]  255.0
> imgs[i,0]  0.0
>
> Thanks,
> Yuanyuan
>
>
>
> > On Tue, Dec 27, 2016 at 12:10 AM, Juan Nunez-Iglesias <jni.soma at gmail.com> wrote:
> > > Typo: unit8 -> uint8
> > >
> > >
> > > On 27 Dec 2016, 9:27 AM +1100, wine lover <winecoding at gmail.com>, wrote:
> > > > 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_equalized
> > > >
> > > > The dtype is float64, maximum value is 255.0 and minimum value is 0.0
> > > >
> > > > Running 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 as
> > > >  imgs[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 at python.org
> > > > https://mail.python.org/mailman/listinfo/scikit-image
>


On 27 Dec 2016, 9:27 AM +1100, wine lover <winecoding at gmail.com>, wrote:
> 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_equalized
>
> The dtype is float64, maximum value is 255.0 and minimum value is 0.0
>
> Running 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 as
>  imgs[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 at python.org
> https://mail.python.org/mailman/listinfo/scikit-image
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/scikit-image/attachments/20161228/29506429/attachment.html>


More information about the scikit-image mailing list