Hi Egor, Hi Juan,

Thank you very much for the help!

Yuanyuan

On Thu, Dec 29, 2016 at 4:16 AM, Egor Panfilov <egor.v.panfi...@gmail.com>
wrote:

> 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_int
> Out[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,
> Egor
>
> 2016-12-27 19:12 GMT+03:00 wine lover <winecod...@gmail.com>:
>
>> Hi Egor,
>>
>> Thank you for the suggestion. This is how I modify the code
>>
>> imgs_equalized = np.random.rand(imgs.shape[0],i
>> mgs.shape[1],imgs.shape[2],imgs.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 is
>>
>> 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
>>
>>
>> Looks like it does not convert the image type as I expected, in specific,
>> the maximum value.
>>
>> Thanks,
>> Yuanyuan
>>
>>
>>
>>
>>
>>
>> On Tue, Dec 27, 2016 at 1:39 AM, Egor Panfilov <egor.v.panfi...@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-as-float (see
>>> also http://scikit-image.org/docs/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,
>>> Egor
>>>
>>> 2016-12-27 1:27 GMT+03:00 wine lover <winecod...@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(im
>>>> gs[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(im
>>>> gs[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
>>>>
>>>>
>>>>    1. add imgs[i,0] = imgs[i,0]/255.   which scale it to 0 and 1
>>>>    2.  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@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
>>>
>>>
>>
>
_______________________________________________
scikit-image mailing list
scikit-image@python.org
https://mail.python.org/mailman/listinfo/scikit-image

Reply via email to