Skip to content

Commit

Permalink
Merge pull request #310 from bear-rsg/keeping-low-intensity-pixels
Browse files Browse the repository at this point in the history
Keeping low intensity pixels
  • Loading branch information
tobyhodges authored Dec 13, 2023
2 parents 49112f9 + a396db9 commit b9bc009
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions episodes/03-skimage-images.md
Original file line number Diff line number Diff line change
Expand Up @@ -379,39 +379,46 @@ The file `data/sudoku.png` is an RGB image of a sudoku puzzle:

![](data/sudoku.png){alt='Su-Do-Ku puzzle'}

Your task is to turn all of the bright pixels in the image to a
Your task is to load the image in grayscale format and turn all of
the bright pixels in the image to a
light gray colour. In other words, mask the bright pixels that have
a pixel value greater than, say, 192 and set their value to 192 (the
value 192 is chosen here because it corresponds to 75% of the
range 0-255 of an 8-bit pixel). The results should look like this:

![](fig/sudoku-gray.png){alt='Modified Su-Do-Ku puzzle'}

*Hint: this is an instance where it is helpful to load the image in grayscale format.*
*Hint: the `cmap`, `vmin`, and `vmax` parameters of `matplotlib.pyplot.imshow`
will be needed to display the modified image as desired. See the [Matplotlib
documentation](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.imshow.html)
for more details on `cmap`, `vmin`, and `vmax`.*

::::::::::::::: solution

## Solution

First, load the image file `data/sudoku.png` as a grayscale image. Remember that we use `image = np.array(image)` to create a copy of the image array because `imageio.imread` returns a non-writeable image.
First, load the image file `data/sudoku.png` as a grayscale image.
Note we may want to create a copy of the image array to avoid modifying our original variable and
also because `imageio.v3.imread` sometimes returns a non-writeable image.

```python

sudoku = iio.imread(uri="data/sudoku.png")
sudoku = iio.imread(uri="data/sudoku.png", mode="L")
sudoku_gray_background = np.array(sudoku)
```

Then change all bright pixel values greater than 192 to 192:

```python
sudoku = sudoku.copy()
sudoku[sudoku > 125] = 125
sudoku_gray_background[sudoku_gray_background > 192] = 192
```

Finally, display the modified image. Note that we have to specify `vmin=0` and `vmax=255` as the range of the colorscale because it would otherwise automatically adjust to the new range 0-192.
Finally, display the original and modified images side by side. Note that we have to specify `vmin=0` and `vmax=255` as the range of the colorscale because it would otherwise automatically adjust to the new range 0-192.

```python
fig, ax = plt.subplots()
plt.imshow(sudoku, cmap="gray", vmin=0, vmax=1)
fig, ax = plt.subplots(ncols=2)
ax[0].imshow(sudoku, cmap="gray", vmin=0, vmax=255)
ax[1].imshow(sudoku_gray_background, cmap="gray", vmin=0, vmax=255)
```

:::::::::::::::::::::::::
Expand Down

0 comments on commit b9bc009

Please sign in to comment.