2 Display a saved image#

Objectives#

  • use functions and modules

  • know how to load and display an image, and use a colormap

  • display the size of an image

  • convert an image to grayscale

  • use the : operator

  • understand that an image is also a 2D signal

Modules#

The use of the function ccc available in the submodule bbb of the module aaa writes aaa.bbb.ccc. I am sure you agree this is a bit long to write, that is why we usually rename the submodule to something shorter. Thus, the following instructions rename skimage.io to io, and matplotlib.pyplot to plt:

import skimage.io as io
import matplotlib.pyplot as plt

The three modules used in this course are:

Refer to the documentation on these websites to get the syntax of the functions.

Display the color image#

Now you can load the image 4.2.03.tiff (I load it directly from the website):

f = io.imread("http://sipi.usc.edu/database/download.php?vol=misc&img=4.2.03")

and display it (I take this opportunity to add a title):

plt.imshow(f)
plt.title('4.2.03.tiff (Mandrill)')
plt.show()
../_images/8f7946e9cc0c4e01b445c64011434362c6b252ee48081ca9ce71b4d5d7532cdd.png

The function plt.show() is the correct way to show the image.

The image dimensions can be read on the displayed image: a little more than 500 pixels per side, and 3 bands since the image is in color. A more precise alternative is to use the shape function:

print(f.shape)
(512, 512, 3)

So the image if of size 512 × 512, with 3 bands.

Conversion to grayscale#

We need to import a new module (I am doing this at this point, but it is recommended to import all modules at the beginning of the notebook).

import skimage.color as color

g = color.rgb2gray(f)
plt.imshow(g)
plt.title('Mandrill (grayscale)')
plt.show()
../_images/2671b61405dfe543fabdf824fc1baf510aac2f9b6bbf990f9605940d55c5c1a2.png

What’s that weird grayscale image? It’s rather green… 😲

This actually is a grayscale image (the image has only one band). But the default colormap provided with imshow is a gradient of blue and green. To display it in real gray levels, you must specify the option cmap in imshow. A large number of palettes are available (see catalog); here we choose the classic gray:

plt.imshow(g, cmap="gray")
plt.title('Mandrill (grayscale)')
plt.show()
../_images/f208136b96be03cd3b172e6bf744acd6722edd394681a328619bd9688048378a.png

Phew! 😅

The grayscale image has intensities in this range:

print(f"Min : {g.min()}")
print(f"Max : {g.max()}")
Min : 0.0
Max : 0.9116803921568628

The range of colors can also be redefined by specifying the intensities corresponding to black (vmin) and white (vmax):

plt.imshow(g, vmin=0.0, vmax=0.5, cmap="gray");
plt.title("Intensity range = [0.0, 0.5]");
plt.show()
../_images/c2fd0d44cf22fbe1f9ab1f90d540880e5edfdd363bcd8a6c5b9a435835e12d85.png

Extraction of pixels#

The syntax g[a:b,c:d] extract pixels located between rows a and b–1 and columns c and d–1. If a or c is not given, then it is considered to be \(0\). If b or d is not given, then it is considered to be the maximal index in the dimension.

Then we have the instensity of top-left pixel:

g[0,0]
0.5775650980392157

The intensities of the five first pixels of the second row:

g[1,0:5]
array([0.46821647, 0.39396314, 0.15052863, 0.27128118, 0.3509451 ])

And the intensities of all the pixels in the third row:

g[2,:]
array([0.29887137, 0.45405412, 0.17520392, 0.18225216, 0.39513529,
       0.23370078, 0.23346275, 0.18306275, 0.44279098, 0.42749882,
       0.19147922, 0.23552588, 0.28236667, 0.14554353, 0.10365373,
       0.20003569, 0.47681922, 0.41969843, 0.38021059, 0.22593216,
       0.28821765, 0.20411412, 0.16150392, 0.25885922, 0.3675949 ,
       0.70087843, 0.80062784, 0.69879137, 0.3542451 , 0.18072471,
       0.37092039, 0.66425961, 0.62859882, 0.32563176, 0.48865843,
       0.44584078, 0.43163216, 0.41797137, 0.4346651 , 0.50814902,
       0.29834   , 0.53164941, 0.52597647, 0.48358314, 0.55389647,
       0.58781529, 0.5523349 , 0.56919608, 0.32072275, 0.47438745,
       0.57285569, 0.25036235, 0.34582863, 0.3136149 , 0.38447255,
       0.37164275, 0.33711451, 0.67537804, 0.59824706, 0.62892549,
       0.54611451, 0.59752706, 0.40229412, 0.2953298 , 0.64953529,
       0.65788039, 0.24202118, 0.36884667, 0.49252118, 0.79315843,
       0.70304157, 0.46462706, 0.42678275, 0.25671647, 0.19072196,
       0.64614784, 0.66011961, 0.35292157, 0.57037412, 0.50863059,
       0.29234667, 0.49992588, 0.7499898 , 0.60244275, 0.55461333,
       0.58998824, 0.47794706, 0.31540235, 0.47809922, 0.24272667,
       0.52286   , 0.78632667, 0.70392667, 0.3449149 , 0.32193765,
       0.40283765, 0.33996588, 0.25855725, 0.46996627, 0.56721255,
       0.66268706, 0.26738078, 0.62769373, 0.57931686, 0.34050745,
       0.32190706, 0.17445294, 0.29652902, 0.46807725, 0.59419804,
       0.65354157, 0.55356863, 0.45248588, 0.63711373, 0.78667608,
       0.78139176, 0.66867098, 0.62541686, 0.64168824, 0.50473098,
       0.21474   , 0.46951373, 0.80832078, 0.55386   , 0.74174588,
       0.74282902, 0.42696157, 0.55508784, 0.79211451, 0.65287216,
       0.30708235, 0.61376431, 0.77478275, 0.34201961, 0.26216392,
       0.26048941, 0.34937765, 0.32378039, 0.60389686, 0.48542196,
       0.47154392, 0.53828667, 0.57594   , 0.60560745, 0.56346784,
       0.4943749 , 0.55253725, 0.49998745, 0.73936353, 0.46750078,
       0.35117451, 0.64160078, 0.50857294, 0.67457882, 0.28412471,
       0.31143451, 0.26363176, 0.40436863, 0.20817922, 0.45073765,
       0.24656078, 0.20288588, 0.44887765, 0.52612471, 0.57509843,
       0.70517725, 0.31155529, 0.44951725, 0.32749373, 0.45062392,
       0.22434784, 0.21253137, 0.53796627, 0.58654235, 0.51004549,
       0.35401255, 0.34762314, 0.52055216, 0.3524502 , 0.20716549,
       0.55764588, 0.55081412, 0.53530706, 0.73204196, 0.72333333,
       0.43177686, 0.5625302 , 0.57672157, 0.68679882, 0.49665098,
       0.32977137, 0.61064471, 0.57949647, 0.71874471, 0.60622392,
       0.45755961, 0.47033333, 0.6539451 , 0.71454745, 0.61620275,
       0.59436353, 0.4811651 , 0.40566353, 0.29167176, 0.49708235,
       0.52531412, 0.33124627, 0.56904824, 0.54893294, 0.44701686,
       0.42592863, 0.39929843, 0.46948353, 0.26834902, 0.37489725,
       0.65960863, 0.32994863, 0.29597843, 0.48790157, 0.51648039,
       0.30926745, 0.40897059, 0.70658431, 0.68584392, 0.31943608,
       0.51457098, 0.68033098, 0.44309608, 0.21460941, 0.5708051 ,
       0.30841569, 0.12148471, 0.18900745, 0.23111176, 0.35617373,
       0.63064078, 0.62157843, 0.4543251 , 0.5868102 , 0.63134549,
       0.35060667, 0.51869843, 0.23740824, 0.44154902, 0.60687922,
       0.63498353, 0.25839373, 0.49051725, 0.60004118, 0.68548235,
       0.55514078, 0.73690902, 0.7019949 , 0.49392235, 0.38955451,
       0.27914118, 0.4273651 , 0.41536784, 0.25250863, 0.49767843,
       0.34849373, 0.29043529, 0.27982392, 0.55084627, 0.62948549,
       0.55583882, 0.27288784, 0.56052235, 0.66894   , 0.38284314,
       0.43967529, 0.2774502 , 0.26997804, 0.28804706, 0.45563294,
       0.50055765, 0.74024863, 0.61882902, 0.41892431, 0.56081059,
       0.60970863, 0.71147412, 0.75721647, 0.61909059, 0.65936275,
       0.59161608, 0.44407569, 0.39787529, 0.42114314, 0.48729686,
       0.37464902, 0.30955882, 0.33337961, 0.64318431, 0.51892157,
       0.58090078, 0.55057686, 0.4523302 , 0.52688392, 0.31417373,
       0.27305843, 0.43903255, 0.60187137, 0.61762431, 0.42226471,
       0.31401608, 0.39641686, 0.61858353, 0.53392157, 0.30225922,
       0.46834196, 0.40980824, 0.37164039, 0.4239549 , 0.37574392,
       0.51241843, 0.51272314, 0.58368431, 0.59460706, 0.33814078,
       0.63098902, 0.65416745, 0.50459647, 0.64279059, 0.6570851 ,
       0.49102588, 0.65684078, 0.50505098, 0.23141804, 0.20387608,
       0.49046824, 0.27620549, 0.43045922, 0.55709804, 0.74841216,
       0.64306627, 0.70716745, 0.73133412, 0.36815294, 0.65667098,
       0.5889549 , 0.61651529, 0.46833451, 0.22244235, 0.28930235,
       0.42694039, 0.39629882, 0.64588667, 0.3499502 , 0.28574039,
       0.42263804, 0.29248078, 0.2453702 , 0.36597843, 0.49566784,
       0.46113333, 0.30190118, 0.42555647, 0.69971176, 0.70840078,
       0.48582118, 0.2531898 , 0.18831843, 0.40755412, 0.44412275,
       0.32613882, 0.53831333, 0.42903098, 0.6589251 , 0.72162392,
       0.5700298 , 0.67195373, 0.71072235, 0.58323725, 0.38245529,
       0.66597765, 0.62270745, 0.4811502 , 0.64357294, 0.6911302 ,
       0.46150588, 0.17370039, 0.15491882, 0.28686196, 0.61202824,
       0.73338157, 0.74530902, 0.65347608, 0.65087098, 0.42826314,
       0.71725647, 0.7201349 , 0.49603922, 0.37203765, 0.47086471,
       0.62737216, 0.58209098, 0.68531843, 0.58510431, 0.47664118,
       0.61493765, 0.59421137, 0.3861098 , 0.38211294, 0.7358498 ,
       0.41067137, 0.47752078, 0.74665765, 0.70586902, 0.31205961,
       0.30702824, 0.3080549 , 0.51851961, 0.47489216, 0.53479569,
       0.53559843, 0.65944471, 0.53486235, 0.52856706, 0.48515569,
       0.26078157, 0.65548824, 0.5378302 , 0.31735647, 0.4392051 ,
       0.40995098, 0.48542941, 0.62159569, 0.52709922, 0.35710235,
       0.6793502 , 0.78834275, 0.77483686, 0.79081216, 0.61601529,
       0.51214941, 0.51948667, 0.42916549, 0.48015098, 0.44226784,
       0.54357725, 0.59253137, 0.60061098, 0.42591373, 0.65666078,
       0.76882392, 0.78575882, 0.60957451, 0.4676651 , 0.60167059,
       0.80047137, 0.72537804, 0.43510392, 0.62954549, 0.60625098,
       0.42893529, 0.76703882, 0.82513882, 0.65869098, 0.46839176,
       0.48753216, 0.5579451 , 0.60944706, 0.75215451, 0.71587137,
       0.70802667, 0.54521608, 0.35049961, 0.61257843, 0.74617333,
       0.81649373, 0.74969255, 0.62443255, 0.32151059, 0.65618471,
       0.66241922, 0.31468392, 0.44372863, 0.63504941, 0.68894196,
       0.72772   , 0.77370588, 0.60649843, 0.32699569, 0.50390627,
       0.40383373, 0.24985725, 0.38521412, 0.49977216, 0.68890275,
       0.69251961, 0.73503176, 0.59991294, 0.69705137, 0.40038588,
       0.37019922, 0.17809255, 0.19862824, 0.33471961, 0.27111333,
       0.26034118, 0.5153349 , 0.59366039, 0.37718471, 0.30610902,
       0.40581451, 0.54923098, 0.49104588, 0.39092235, 0.38469098,
       0.34957098, 0.31829373])

Brightness profile#

I choose a horizontal cut on the 200th line of the image:

cut = 200          # Cut location
profil = g[cut,:]  # Extract all the pixels of the row 'cut' in the image g

Now we can display the brightness profile…

plt.figure(figsize=(10,5))           # New figure with specific display size

plt.subplot(1,2,1)                   # Plot on the left
plt.plot(profil,'b')                 # Brightness profile
plt.title("Brightness profile")      # Title

plt.subplot(1,2,2)                   # Image on the right
plt.imshow(g, cmap="gray")           # Image
plt.plot((0,511), (cut,cut), 'b')    # Cut line in blue
plt.title("Mandrill")                # Title

plt.show()
../_images/b4958e1d785ef75be4ddc85ddf1c68bbab571fcefc5ace181d3af22e861b60fa.png

Do you see on the profile the Mandrill’s nose and the protruding ridges on its sides?