Repository: scikit-image/scikit-image

Issue:
Examples wanted for the gallery
While starting working on the user guide, I noticed that several functions or functionalities are not illustrated in any example of the gallery. Here are a few examples of functionalities that could make nice examples for the gallery (and hence sections of the user guide). Feel free to ask more item to the wishlist in the conversation to follow.
- [x] RGB to HSV conversion, for example for image enhancement (as increasing image saturation), or for image segmentation (in the `data.coffee()` image, a mask of the cup + saucer can be obtained from thresholding the hue channel). WIP: #3607 
-  [x] RGB to gray conversion. Comment on the different weights of the 3 channels, and on the float dtype of the output. 
- [X] gamma and log contrast adjustement. Plot the different kinds of transformations and show the result when applied to a grayscale image such as `moon` DONE: #1670
- [X] Richardson-Lucy deconvolution. DONE: #2376 
- [ ] LPIFilter2D / inverse filters (I have no idea how they are used. @stefanv ?)
- [ ] ``measure.block_reduce``
- [ ] ``measure.profile_line``



Discussion:
I noticed that the rgb2hsv function is used in the "Tinting gray-scale images" example of the gallery. The RGB to HSV conversion is explained quite well in this example. Maybe changing the example title into "Manipulate color spaces" or "RGB to HSV conversion" or something like that might help people who look for an RGB to HSV conversion.  (Sorry if my english is bad :) )

I volunteer for adding an example for gamma and log contrast adjustment.

I'm adding Richardson-Lucy deconvolution to Reconstruction example.

I will now work on RGB to HSV conversion.

Resolving patch:
diff --git a/doc/examples/color_exposure/plot_rgb_to_hsv.py b/doc/examples/color_exposure/plot_rgb_to_hsv.py
new file mode 100644
--- /dev/null
+++ b/doc/examples/color_exposure/plot_rgb_to_hsv.py
@@ -0,0 +1,81 @@
+"""
+==========
+RGB to HSV
+==========
+
+This example illustrates how RGB to HSV (Hue, Saturation, Value) conversion
+[1]_ can be used to facilitate segmentation processes.
+
+Usually, objects in images have distinct colors (hues) and luminosities, so
+that these features can be used to separate different areas of the image.
+In the RGB representation the hue and the luminosity are expressed as a linear
+combination of the R,G,B channels, whereas they correspond to single channels
+of the HSV image (the Hue and the Value channels). A simple segmentation of the
+image can then be effectively performed by a mere thresholding of the HSV
+channels.
+
+.. [1] https://en.wikipedia.org/wiki/HSL_and_HSV
+
+"""
+
+##############################################################################
+# We first load the RGB image and extract the Hue and Value channels:
+
+import matplotlib.pyplot as plt
+
+from skimage import data
+from skimage.color import rgb2hsv
+
+rgb_img = data.coffee()
+hsv_img = rgb2hsv(rgb_img)
+hue_img = hsv_img[:, :, 0]
+value_img = hsv_img[:, :, 2]
+
+fig, (ax0, ax1, ax2) = plt.subplots(ncols=3, figsize=(8, 2))
+
+ax0.imshow(rgb_img)
+ax0.set_title("RGB image")
+ax0.axis('off')
+ax1.imshow(hue_img, cmap='hsv')
+ax1.set_title("Hue channel")
+ax1.axis('off')
+ax2.imshow(value_img)
+ax2.set_title("Value channel")
+ax2.axis('off')
+
+fig.tight_layout()
+
+##############################################################################
+# We then set a threshold on the Hue channel to separate the cup from the
+# background:
+
+hue_threshold = 0.04
+binary_img = hue_img > hue_threshold
+
+fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(8, 3))
+
+ax0.hist(hue_img.ravel(), 512)
+ax0.set_title("Histogram of the Hue channel with threshold")
+ax0.axvline(x=hue_threshold, color='r', linestyle='dashed', linewidth=2)
+ax0.set_xbound(0, 0.12)
+ax1.imshow(binary_img)
+ax1.set_title("Hue-thresholded image")
+ax1.axis('off')
+
+fig.tight_layout()
+
+##############################################################################
+# We finally perform an additional thresholding on the Value channel to partly
+# remove the shadow of the cup:
+
+fig, ax0 = plt.subplots(figsize=(4, 3))
+
+value_threshold = 0.10
+binary_img = (hue_img > hue_threshold) | (value_img < value_threshold)
+
+ax0.imshow(binary_img)
+ax0.set_title("Hue and value thresholded image")
+ax0.axis('off')
+
+fig.tight_layout()
+plt.show()


Test patch: