2020年4月13日 星期一

Python 學習筆記 : SciPy 測試 (二) : Lena 不見了

我在 "Learning SciPy for Numerical and Scientific Computing (第二版)" 這本書的第二章看到 SciPy 的子套件 misc 裡面竟然藏了一張模特兒的美照, 這張解析度 512*512 的照片取自 1972 年 11 月的花花公子中間折頁 (centerfold), 照片中的人物是瑞典模特兒 Lena Söderberg, 由名攝影師與建築師 Dwight Hooker 為當期雜誌所拍攝, 這張照片後來成為影像處理界的標準測試圖像 (稱為 Lenna 圖, Lena 為瑞典文), 許多 Photoshop 教科書上都用這張照片當範例 :


Source : Wiki


用 Matplotlib 繪製此照片之程式碼如下 :

import scipy.misc
import matplotlib.pyplot as plt
lena=scipy.misc.lena()
plt.gray()
plt.imshow(lena)
plt.show()

但是執行到 lena=scipy.misc.lena() 就出現錯誤訊息 :

>>> import scipy.misc
>>> import matplotlib.pyplot as plt 
>>> lena=scipy.misc.lena() 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module>
AttributeError: module 'scipy.misc' has no attribute 'lena' 

用 dir() 檢視 scipy.misc 成員, 真的沒有 lena :

>>> dir(scipy.misc)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'absolute_import', 'ascent', 'central_diff_weights', 'derivative', 'division', 'doccer', 'electrocardiogram', 'face', 'print_function', 'test']

原因是 SciPy 從 1.0.0 版開始移除了 lena 圖片, 改成了上樓梯的圖 ascent, 參考 :

python scipy找不到lena

的確, 我在 SciPy 0.14.0 版教學文件上還找得到 lena 圖的資料 :

https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.misc.lena.html
https://docs.scipy.org/doc/scipy-0.14.0/reference/misc.html

但在 1.0.0 版就沒有了, 取而代之的是 ascent :

https://docs.scipy.org/doc/scipy-1.0.0/reference/misc.html

好吧, 那就用 ascent 來試試看吧!

>>> import scipy.misc
>>> import matplotlib.pyplot as plt 
>>> ascent=scipy.misc.ascent()
>>> plt.gray() 
>>> plt.imshow(ascent) 
>>> plt.show()

結果如下 :




這 .... 比起 lena 圖真是遜色多了.

沒有留言 :