程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python計算機視覺編程 第一章——基本的圖像操作和處理

編輯:Python

目錄

1.1 PIL:Python圖像處理類庫

1.1.1 轉換圖像格式

1.1.2 創建縮略圖

1.1.3 復制和粘貼圖像區域

1.1.4 調整尺寸和旋轉

1.2 Matplotlib

1.2.1 繪制圖像、點和線

1.2.2 圖像輪廓和直方圖

1.2.3 交互式標注

1.3 Unmpy

1.3.1 圖像數組表示

1.3.2 灰度變換

1.3.3 圖像縮放

1.3.4 直方圖均衡化

1.3.5 圖像平均

1.3.6 圖像的主成分分析(PCA)

1.3.7 使用pickle模塊

1.4 Scipy

1.4.1 圖像模糊

1.4.2 圖像導數

1.4.3 形態學:對數計數

1.4.4 一些有用的Scipy模塊

1.讀寫.mat文件

2.以圖像形式保存數組

1.5 高級示例:圖像去噪


1.1 PIL:Python圖像處理類庫

讀取一幅圖像:

from PIL import Image
pil_im=Image.open('empire.jpg')

上述代碼的返回值pil_im是一個PIL圖像對象。

讀取圖像同時轉化為灰度圖像:

pil_im=Image.open('empire.jpg').convert('L')

1.1.1 轉換圖像格式

轉換為JPEG格式:

from PIL import Image
import os
for infile infilelist:
outfile=os.path.splitext(infile)[0]+".jpg"
if infile !=outfile:
try:
Image.open(infile).save(outfile)
except IOError:
print "cannot convert",infile

PIL的open()函數用於創建PIL圖像對象,save()方法一用於保存圖像到具有指定文件名的文件。

下面將創建一個包含文件夾中所有圖像的文件名列表,首先新建一個文件,命名為imtools.py,來存儲一些經常使用的圖像操作,然後將下面的函數添加進去:

import os
def get_imlist(path):
""" 返回目錄中所有 JPG 圖像的文件名列表 """
return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.jpg')]

1.1.2 創建縮略圖

thumbnail()方法接受一個元組參數(該參數指定生成縮略圖的大小),然後將圖像轉換成符合元組參數指定大小的縮略圖。例如:

pil_im.thumbnail((128,128))

1.1.3 復制和粘貼圖像區域

使用crop()方法可以從一幅圖像中裁剪指定區域:

box = (100,100,400,400)
region = pil_im.crop(box)

改區域使用坐標依次是(左,上,右,下)的四元組來指定。PIL中指定坐標系的左上角坐標為(0,0)。旋轉上面代碼獲取區域,然後使用paste()方法將該區域放回去:

region = region.transpose(Image.ROTATE_180)
pil_im.paste(region,box)

1.1.4 調整尺寸和旋轉

調整圖像尺寸:

out = pil_im.resize((128,128))

旋轉圖像:

out = pil_im.rotate(45)

1.2 Matplotlib

1.2.1 繪制圖像、點和線

一個使用點和線繪制圖像的例子:

from PIL import Image
from pylab import *
# 讀取圖像到數組中
im = array(Image.open(r'G:\1.jpg'))
# 繪制圖像
imshow(im)
# 一些點
x = [1000,4000,1000,4000]
y = [500,500,3000,3000]
# 使用紅色星狀標記繪制點
plot(x,y,'r*')
# 繪制連接前兩個點的線
plot(x[:2],y[:2])
# 添加標題,顯示繪制的圖像
title('Plotting: "empire.jpg"')
show()

每個腳本只能調用一次show()命令,而且通常是在腳本的結尾調用。

關閉坐標軸顯示:

axis('off')

 繪圖時控制圖像顏色和樣式的短命令:

plot(x,y) # 默認為藍色實線
plot(x,y,'r*') # 紅色星狀標記
plot(x,y,'go-') # 帶有圓圈標記的綠線
plot(x,y,'ks:') # 帶有正方形標記的黑色虛線

1.2.2 圖像輪廓和直方圖

繪制圖像輪廓:

from PIL import Image
from pylab import *
# 讀取圖像到數組中
im = array(Image.open('2.jpg').convert('L'))
# 新建一個圖像
figure()
# 不使用顏色信息
gray()
# 在原點的左上角顯示輪廓圖像
contour(im, origin='image')
axis('equal')
show()

繪制圖像直方圖:

figure()
hist(im.flatten(),128)

hist()只接受一維數組作為輸入,所以在繪制圖像直方圖之前,必須先對圖像進行壓平處理。

1.2.3 交互式標注

繪制一幅圖像,然後等待用戶點擊三次,依序將這些點擊的坐標[x,y]自動保存在x列表裡:

from PIL import Image
from pylab import *
im = array(Image.open('8.jpg'))
imshow(im)
print ('Please click 3 points')
x = ginput(3)
print ('you clicked:',x)
show()

1.3 Unmpy

1.3.1 圖像數組表示

Numpy中的數組對象是多維的,但是元素必須有相同的數據類型。

im = array(Image.open('empire.jpg'))
print im.shape, im.dtype
im = array(Image.open('empire.jpg').convert('L'),'f')
print im.shape, im.dtype

輸出結果:

每行的第一個元組表示圖像數組的大小(行、列、顏色通道),緊接著的字符串表示數組元素的數據類型。因為圖像通常被編碼成無符號八位整數(uint8),所以在第一種情況下,載入圖像並將其轉換到數組中,數組的數據類型為“uint8”。在第 二種情況下,對圖像進行灰度化處理,並且在創建數組時使用額外的參數“f”;該參數將數據類型轉換為浮點型。

數組中的元素可以使用下標訪問。i,j為坐標,k為顏色通道。

value = im[i,j,k]

多個數組元素可以使用數組切片方式訪問。切片方式返回的是以指定間隔下標訪問該數組的元素值。下面是有關灰度圖像的一些例子:

im[i,:] = im[j,:] # 將第 j 行的數值賦值給第 i 行
im[:,i] = 100 # 將第 i 列的所有數值設為 100
im[:100,:50].sum() # 計算前 100 行、前 50 列所有數值的和
im[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
im[i].mean() # 第 i 行所有數值的平均值
im[:,-1] # 最後一列
im[-2,:] (or im[-2]) # 倒數第二行

如果僅使用一個下標,則該下標為行下標。

1.3.2 灰度變換

下面是對一幅圖像進行灰度變換的一些例子:

from PIL import Image
from numpy import *
from pylab import *
im=array(Image.open('14.jpg').convert('L'))
print(int(im.min()),int(im.max()))
im2=255-im #對圖像進行反向處理
print(int(im2.min()),int(im2.max())) #查看最大/最小元素
im3=(100.0/255)*im+100 #將圖像像素值變換到100...200區間
print(int(im3.min()),int(im3.max()))
im4=255.0*(im/255.0)**2 #對像素值求平方後得到的圖像
print(int(im4.min()),int(im4.max()))
figure()
gray()
subplot(131)
imshow(im2)
axis('off')
title(r'$f(x)=255-x$')
subplot(132)
imshow(im3)
axis('off')
title(r'$f(x)=\frac{100}{255}x+100$')
subplot(133)
imshow(im4)
axis('off')
title(r'$f(x)=255(\frac{x}{255})^2$')
show()

圖像中最大和最小像素值:

 array()變換的相反操作可以使用PIL的formarray()函數完成:

pil_im=Image.fromarray(im)

 如果之前的操作將“uint8”數據類型轉換為其他數據類型,那麼在創建PIL圖像之前,需要將數據類型轉換回來:

pil_im=Image.fromarray(uint8(im))

Numpy總是將數組數據類型轉換成能夠表示數據的“最低”數據類型。對浮點數做乘積或除法操作會使整數類型的數組變成點類型。

1.3.3 圖像縮放

想要對圖像進行縮放處理沒有現成簡單的方法。我們可以使用之前PIL對圖像對象轉換的操作,寫一個簡單的用於圖像縮放的函數。

def imresize(im,sz):
""" Resize an image array using PIL. """
pil_im = Image.fromarray(uint8(im))
return array(pil_im.resize(sz))

1.3.4 直方圖均衡化

直方圖均衡化是指將一幅圖像的灰度直方圖變平,使變換後的圖像中每個灰度值的分布概率都相同。在對圖像做進一步處理之前,直方圖均衡化通常是對圖像灰度值進行歸一化的一個非常好的方法,並且可以增強圖像的對比度。

直方圖均衡化的變換函數是圖像中像素值的累積分布函數:

from PIL import Image
from pylab import *
from PCV.tools import imtools
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('14.jpg').convert('L'))
# 打開圖像,並轉成灰度圖像
#im = array(Image.open('../data/AquaTermi_lowcontrast.JPG').convert('L'))
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始圖像', fontproperties=font)
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方圖均衡化後的圖像', fontproperties=font)
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'原始直方圖', fontproperties=font)
#hist(im.flatten(), 128, cumulative=True, normed=True)
hist(im.flatten(), 128, density=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化後的直方圖', fontproperties=font)
#hist(im2.flatten(), 128, cumulative=True, normed=True)
hist(im2.flatten(), 128, density=True)
show()

明顯可以看出均衡化後的直方圖有了明顯變化,圖像對比度也增加。此外,參考代碼有一些改動:

normed=True

由於 Rectangle 這個庫更新,現在已經沒有normed屬性了。需要將其改為如下形式:

density=True

1.3.5 圖像平均

圖像平均操作是減少圖像噪聲的一種簡單方式。我們可以簡單地從圖像列表中計算出一幅平均圖像。下面的函數可以用於計算平均圖像,將其添加到文件中:

def compute_average(imlist):
""" 計算圖像列表的平均圖像"""
# 打開第一幅圖像,將其存儲在浮點型數組中
averageim = array(Image.open(imlist[0]), 'f')
for imname in imlist[1:]:
try:
averageim += array(Image.open(imname))
except:
print imname + '...skipped'
averageim /= len(imlist)
# 返回uint8 類型的平均圖像
return array(averageim, 'uint8')

1.3.6 圖像的主成分分析(PCA)

PCA(Principal Component Analysis,主成分分析)是一個非常有用的降維技巧。它可以在使用盡可能少維數的前提下,盡量多地保持訓練數據的信息,在此意義上是一個最佳技巧。即使是一幅 100×100像素的小灰度圖像,也有10000維,可以看成10000維空間中的一個點。一兆像素的圖像具有百萬維。由於圖像具有很高的維數,在許多計算機視覺應用中,我們經常使用降維操作。PCA 產生的投影矩陣可以被視為將原始坐標變換到現有的坐標系,坐標系中的各個坐標按照重要性遞減排列。

為了對圖像數據進行 PCA 變換,圖像需要轉換成一維向量表示。我們可以使用 NumPy 類庫中的flatten()方法進行變換。

將變平的圖像堆積起來,我們可以得到一個矩陣,矩陣的一行表示一幅圖像。在計算主方向之前,所有的行圖像按照平均圖像進行了中心化。我們通常使用 SVD(Singular Value Decomposition,奇異值分解)方法來計算主成分;但當矩陣的維數很大時,SVD 的計算非常慢,所以此時通常不使用 SVD 分解。

該函數首先通過減去每一維的均值將數據中心化,然後計算協方差矩陣對應最大特征值的特征向量,此時可以使用簡明的技巧或者 SVD 分解。這裡我們使用了 range() 函數,該函數的輸入參數為一個整數 n,函數返回整數 0…(n-1) 的一個列表。你也可以使用 arange() 函數來返回一個數組,或者使用 xrange() 函數返回一個產生器(可能會提升速度)。我們在本書中貫穿使用range() 函數。

如果數據個數小於向量的維數,我們不用 SVD 分解,而是計算維數更小的協方差矩陣 XXT 的特征向量。通過僅計算對應前 k(k 是降維後的維數)最大特征值的特征向量,可以使上面的 PCA 操作更快。由於篇幅所限,有興趣的讀者可以自行探索。矩陣 V 的每行向量都是正交的,並且包含了訓練數據方差依次減少的坐標方向。

1.3.7 使用pickle模塊

python中的pickle模塊可以保存一些結果或者數據以便後續使用。pickle模塊可以接受幾乎所有的python對象,並且將其轉換成字符串表示,這個過程叫做封裝(pickling)。從字符串表示中重構該對象,稱為拆封(unpickling)。這些字符串表示可以方便地存儲和傳輸。

pickle模塊中有很多不同的協議可以生成.pkl文件;如果不確定的話,最好以二進制文件的形式讀取和寫入。在其他python會話中載入數據,只需要使用load()方法。

with語句可以自動打開和關閉文件(即使在文件打開時發生錯誤)。

1.4 Scipy

1.4.1 圖像模糊

圖像的高斯模糊是非常經典的圖像卷積例子。本質上,圖像模糊就是將(灰度)圖像I和一個高斯核進行卷積操作:

其中*表示卷積操作;Gδ是標准差為δ的二位高斯核,定義為:

高斯模糊通常是其他圖像處理操作的一部分,比如圖像差值操作、興趣點計算以及其他應用。

濾波操作:scipy.ndimage.filters

from PIL import Image
from numpy import *
from pylab import *
from scipy.ndimage import filters
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
im=array(Image.open('14.jpg').convert('L'))
figure()
gray()
axis('off')
subplot(141)
axis('off')
title(u'原圖',fontproperties=font)
imshow(im)
for bi,blur in enumerate([2,5,10]):
im2=zeros(im.shape)
im2=filters.gaussian_filter(im,blur)
im2=np.uint8(im2)
imNum=str(blur)
subplot(1,4,2+bi)
axis('off')
title(u'標准差為'+imNum,fontproperties=font)
imshow(im2)
show()

隨著δ值增加,圖像逐漸變模糊,圖像細節丟失越多。

1.4.2 圖像導數

在很多應用中圖像強度的變化情況是非常重要的信息。強度的變化可以用灰度圖像I(對於彩色圖像,通常對每個顏色通道分別計算導數)的x和y方向導數Ix和Iy進行描述。

梯度大小描述了圖像強度變化的強弱:

梯度角度描述了圖像在每個點(像素)上強度變化最大的方向:

Numpy中的arctan2()函數返回弧度表示的有符號角度,角度的變化區間為-π...π。

我們可以用離散近似的方式來計算圖像的導數。圖像導數大多數可以通過卷積簡單地實現:

prewitt濾波器:

或者sobel濾波器:

這些導數濾波器可以使用scipy.ndimage.filters模塊的標准卷積操作來簡單地實現,例如:

from PIL import Image
from pylab import *
from scipy.ndimage import filters
import numpy
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size=14)
im=array(Image.open('14.jpg').convert('L'))
gray()
subplot(141)
axis('off')
title(u'(a)原圖',fontproperties=font)
imshow(im)
# sobel derivative filters
imx=zeros(im.shape)
filters.sobel(im,1,imx)
subplot(142)
axis('off')
title(u'(b)x方向差分',fontproperties=font)
imshow(imx)
imy=zeros(im.shape)
filters.sobel(im,0,imy)
subplot(143)
axis('off')
title(u'(c)y方向差分',fontproperties=font)
imshow(imy)
mag=255-numpy.sqrt(imx**2+imy**2)
subplot(144)
title(u'(d)梯度幅值',fontproperties=font)
axis('off')
imshow(mag)
show()

上面的腳本使用Sobel濾波器計算x和y方向導數以及梯度大小。在導數圖像中,正導數顯示為亮的像素,負倒數顯示為暗的像素,灰色區域表示導數的值接近於零。 

高斯導數濾波器:

from PIL import Image
from pylab import *
from scipy.ndimage import filters
import numpy
# 添加中文字體支持
#from matplotlib.font_manager import FontProperties
#font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
def imx(im, sigma):
imgx = zeros(im.shape)
filters.gaussian_filter(im, sigma, (0, 1), imgx)
return imgx
def imy(im, sigma):
imgy = zeros(im.shape)
filters.gaussian_filter(im, sigma, (1, 0), imgy)
return imgy
def mag(im, sigma):
# there's also gaussian_gradient_magnitude()
#mag = numpy.sqrt(imgx**2 + imgy**2)
imgmag = 255 - numpy.sqrt(imgx ** 2 + imgy ** 2)
return imgmag
im = array(Image.open('14.jpg').convert('L'))
figure()
gray()
sigma = [2, 5, 10]
for i in sigma:
subplot(3, 4, 4*(sigma.index(i))+1)
axis('off')
imshow(im)
imgx=imx(im, i)
subplot(3, 4, 4*(sigma.index(i))+2)
axis('off')
imshow(imgx)
imgy=imy(im, i)
subplot(3, 4, 4*(sigma.index(i))+3)
axis('off')
imshow(imgy)
imgmag=mag(im, i)
subplot(3, 4, 4*(sigma.index(i))+4)
axis('off')
imshow(imgmag)
show()

結果反映了x、y倒數圖形及梯度大小圖像,δ值越大模糊效果越強,圖像細節丟失越多。

1.4.3 形態學:對數計數

形態學(或數學形態學)是度量和分析基本形狀的圖像處理方法的基本框架與集合。形態學通常用於處理二值圖像,但是也能夠用於灰度圖像。二值圖像是指圖像的每個像素只能取兩個值,通常是0和1。二值圖像通常是,在計算物體的數目,或者度量其大小時,對一幅圖像進行阈值化後的結果。

scipy.ndimage中的morphology模塊可以實現形態學操作,可以使用scipy.ndimage中的measurements模塊來實現二值圖像的計數和度量功能。

from scipy.ndimage import measurements,morphology
# 載入圖像,然後使用阈值化操作,以保證處理的圖像為二值圖像
im = array(Image.open('houses.png').convert('L'))
im = 1*(im<128)
labels, nbr_objects = measurements.label(im)
print "Number of objects:", nbr_objects

上述腳本:

  1. 首先載入該圖像,通過阈值化方式確保該圖像是二值圖像。通過和1相乘,腳本將布爾數組轉換成二進制表示。
  2. 使用label()函數尋找單個的物體,並且按照它們屬於哪個對象將證書標簽給像素賦值。
  3. 圖像灰度值表示對象的標簽。可以看到,在一些對象之間是有一些小的連接。進行二進制開操作,我們可以將其移除:
# 形態學開操作更好地分離各個對象
im_open = morphology.binary_opening(im,ones((9,5)),iterations=2)
labels_open, nbr_objects_open = measurements.label(im_open)
print "Number of objects:", nbr_objects_open

binary_opening()函數的第二個參數指定一個數組元素。該數組表示以一個像素為中心時,使用哪些相鄰像素。參數iterations決定執行該操作的次數。

from PIL import Image
from numpy import *
from scipy.ndimage import measurements, morphology
from pylab import *
""" This is the morphology counting objects example in Section 1.4. """
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
# load image and threshold to make sure it is binary
figure()
gray()
im = array(Image.open('jishu.jpg').convert('L'))
subplot(221)
imshow(im)
axis('off')
title(u'原圖', fontproperties=font)
im = (im < 128)
labels, nbr_objects = measurements.label(im)
print ("Number of objects:", nbr_objects)
subplot(222)
imshow(labels)
axis('off')
title(u'標記後的圖', fontproperties=font)
# morphology - opening to separate objects better
im_open = morphology.binary_opening(im, ones((9, 5)), iterations=2)
subplot(223)
imshow(im_open)
axis('off')
title(u'開運算後的圖像', fontproperties=font)
labels_open, nbr_objects_open = measurements.label(im_open)
print ("Number of objects:", nbr_objects_open)
subplot(224)
imshow(labels_open)
axis('off')
title(u'開運算後進行標記後的圖像', fontproperties=font)
show()

 

隨著迭代次數iterations值增加,對象數目逐漸減少,直到iterations=12時對象數目為0。

1.4.4 一些有用的Scipy模塊

1.讀寫.mat文件

使用scipy.io模塊讀取.mat文件:

data = scipy.io.loadmat('test.mat')

上面代碼中,data對象包含一個字典,字典中的鍵對應於保存在原始.mat文件中的變量名。由於這些變量是數組格式的,因此可以很方便地保存到.mat文件中。你僅需創建一個字典(其中要包含你想要保存的所有變量),然後使用savemat()函數:

data = {}
data['x'] = x
scipy.io.savemat('test.mat',data)

因為上面的腳本保存的是數組x,所以當讀入到Matlab中時,變量的名字仍為x。

2.以圖像形式保存數組

imsave()函數可以從scipy.misc模塊載入。要將數組im保存到文件中,可以使用下面的命令:

from scipy.misc import imsave
imsave('test.jpg',im)

1.5 高級示例:圖像去噪

圖像去噪是在去除圖像噪聲的同時,盡可能地保留圖像細節和結構的處理技術。我們這裡使用 ROF(Rudin-Osher-Fatemi)去噪模型。

一幅(灰度)圖像I的全變差定義為梯度范數之和。在連續表示的情況下,全變差表示為:

在離散表示的情況下,全變差表示為:

其中,上面的式子是在所有圖像坐標x=[x,y]上取和。

在ROF模型裡,目標函數為尋找降噪後的圖像U,使下式最小:

from pylab import *
from numpy import *
from numpy import random
from scipy.ndimage import filters
import imageio
from PCV.tools import rof
""" This is the de-noising example using ROF in Section 1.5. """
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
# create synthetic image with noise
im = zeros((500,500))
im[100:400,100:400] = 128
im[200:300,200:300] = 255
im = im + 30*random.standard_normal((500,500))
U,T = rof.denoise(im,im)
G = filters.gaussian_filter(im,10)
# save the result
#imsave('synth_original.pdf',im)
#imsave('synth_rof.pdf',U)
#imsave('synth_gaussian.pdf',G)
# plot
figure()
gray()
subplot(1,3,1)
imshow(im)
#axis('equal')
axis('off')
title(u'原噪聲圖像', fontproperties=font)
subplot(1,3,2)
imshow(G)
#axis('equal')
axis('off')
title(u'高斯模糊後的圖像', fontproperties=font)
subplot(1,3,3)
imshow(U)
#axis('equal')
axis('off')
title(u'ROF降噪後的圖像', fontproperties=font)
show()

其中第一幅圖示原噪聲圖像,中間一幅圖示用標准差為10進行高斯模糊後的結果,最右邊一幅圖是用ROF降噪後的圖像。上面原噪聲圖像是模擬出來的圖像,現在我們在真實的圖像上進行測試:

from PIL import Image
from pylab import *
from numpy import *
from numpy import random
from scipy.ndimage import filters
import imageio
from PCV.tools import rof
""" This is the de-noising example using ROF in Section 1.5. """
# 添加中文字體支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('jy.png').convert('L'))
U,T = rof.denoise(im,im)
G = filters.gaussian_filter(im,10)
# save the result
#imsave('synth_original.pdf',im)
#imsave('synth_rof.pdf',U)
#imsave('synth_gaussian.pdf',G)
# plot
figure()
gray()
subplot(1,3,1)
imshow(im)
#axis('equal')
axis('off')
title(u'原噪聲圖像', fontproperties=font)
subplot(1,3,2)
imshow(G)
#axis('equal')
axis('off')
title(u'高斯模糊後的圖像', fontproperties=font)
subplot(1,3,3)
imshow(U)
#axis('equal')
axis('off')
title(u'ROF降噪後的圖像', fontproperties=font)
show()

上面的功能實現中,由於版本升級,參考代碼中:

from scipy.misc import imsave

應更改為:

import imageio


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved