一. 圖像雙三次插值算法原理:
10年積累的成都網站制作、網站建設、外貿網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有張北免費網站建設讓你可以放心的選擇與我們合作。
假設源圖像 A 大小為 m*n ,縮放后的目標圖像 B 的大小為 M*N 。那么根據比例我們可以得到 B(X,Y) 在 A 上的對應坐標為 A(x,y) = A( X*(m/M), Y*(n/N) ) 。在雙線性插值法中,我們選取 A(x,y) 的最近四個點。而在雙立方插值法中,我們選取的是最近的16個像素點作為計算目標圖像 B(X,Y) 處像素值的參數。如圖所示:
如圖所示 P 點就是目標圖像 B 在 (X,Y) 處對應于源圖像中的位置,P 的坐標位置會出現(xiàn)小數部分,所以我們假設 P 的坐標為 P(x+u,y+v),其中 x,y 分別表示整數部分,u,v 分別表示小數部分。那么我們就可以得到如圖所示的最近 16 個像素的位置,在這里用 a(i,j)(i,j=0,1,2,3) 來表示。?
雙立方插值的目的就是通過找到一種關系,或者說系數,可以把這 16 個像素對于 P 處像素值的影響因子找出來,從而根據這個影響因子來獲得目標圖像對應點的像素值,達到圖像縮放的目的。?
? ? BiCubic基函數形式如下:
二. python實現(xiàn)雙三次插值算法
from PIL import Image
import numpy as np
import math
# 產生16個像素點不同的權重
def BiBubic(x):
x=abs(x)
if x=1:
? ? return 1-2*(x**2)+(x**3)
elif x2:
? ? return 4-8*x+5*(x**2)-(x**3)
else:
? ? return 0
# 雙三次插值算法
# dstH為目標圖像的高,dstW為目標圖像的寬
def BiCubic_interpolation(img,dstH,dstW):
scrH,scrW,_=img.shape
#img=np.pad(img,((1,3),(1,3),(0,0)),'constant')
retimg=np.zeros((dstH,dstW,3),dtype=np.uint8)
for i in range(dstH):
? ? for j in range(dstW):
? ? ? ? scrx=i*(scrH/dstH)
? ? ? ? scry=j*(scrW/dstW)
? ? ? ? x=math.floor(scrx)
? ? ? ? y=math.floor(scry)
? ? ? ? u=scrx-x
? ? ? ? v=scry-y
? ? ? ? tmp=0
? ? ? ? for ii in range(-1,2):
? ? ? ? ? ? for jj in range(-1,2):
? ? ? ? ? ? ? ? if x+ii0 or y+jj0 or x+ii=scrH or y+jj=scrW:
? ? ? ? ? ? ? ? ? ? continue
? ? ? ? ? ? ? ? tmp+=img[x+ii,y+jj]*BiBubic(ii-u)*BiBubic(jj-v)
? ? ? ? retimg[i,j]=np.clip(tmp,0,255)
return retimg
im_path='../paojie.jpg'
image=np.array(Image.open(im_path))
image2=BiCubic_interpolation(image,image.shape[0]*2,image.shape[1]*2)
image2=Image.fromarray(image2.astype('uint8')).convert('RGB')
image2.save('BiCubic_interpolation.jpg')
三. 實驗結果:
四. 參考內容:
???
???
有些Python小白對numpy中的常見函數不太了解,今天小編就整理出來分享給大家。
Numpy是Python的一個科學計算的庫,提供了矩陣運算的功能,其一般與Scipy、matplotlib一起使用。其實,list已經提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數。
數組常用函數
1.where()按條件返回數組的索引值
2.take(a,index)從數組a中按照索引index取值
3.linspace(a,b,N)返回一個在(a,b)范圍內均勻分布的數組,元素個數為N個
4.a.fill()將數組的所有元素以指定的值填充
5.diff(a)返回數組a相鄰元素的差值構成的數組
6.sign(a)返回數組a的每個元素的正負符號
7.piecewise(a,[condlist],[funclist])數組a根據布爾型條件condlist返回對應元素結果
8.a.argmax(),a.argmin()返回a最大、最小元素的索引
改變數組維度
a.ravel(),a.flatten():將數組a展平成一維數組
a.shape=(m,n),a.reshape(m,n):將數組a轉換成m*n維數組
a.transpose,a.T轉置數組a
數組組合
1.hstack((a,b)),concatenate((a,b),axis=1)將數組a,b沿水平方向組合
2.vstack((a,b)),concatenate((a,b),axis=0)將數組a,b沿豎直方向組合
3.row_stack((a,b))將數組a,b按行方向組合
4.column_stack((a,b))將數組a,b按列方向組合
數組分割
1.split(a,n,axis=0),vsplit(a,n)將數組a沿垂直方向分割成n個數組
2.split(a,n,axis=1),hsplit(a,n)將數組a沿水平方向分割成n個數組
數組修剪和壓縮
1.a.clip(m,n)設置數組a的范圍為(m,n),數組中大于n的元素設定為n,小于m的元素設定為m
2.a.compress()返回根據給定條件篩選后的數組
數組屬性
1.a.dtype數組a的數據類型
2.a.shape數組a的維度
3.a.ndim數組a的維數
4.a.size數組a所含元素的總個數
5.a.itemsize數組a的元素在內存中所占的字節(jié)數
6.a.nbytes整個數組a所占的內存空間7.a.astype(int)轉換a數組的類型為int型
數組計算
1.average(a,weights=v)對數組a以權重v進行加權平均
2.mean(a),max(a),min(a),middle(a),var(a),std(a)數組a的均值、最大值、最小值、中位數、方差、標準差
3.a.prod()數組a的所有元素的乘積
4.a.cumprod()數組a的元素的累積乘積
5.cov(a,b),corrcoef(a,b)數組a和b的協(xié)方差、相關系數
6.a.diagonal()查看矩陣a對角線上的元素7.a.trace()計算矩陣a的跡,即對角線元素之和
以上就是numpy中的常見函數。更多Python學習推薦:PyThon學習網教學中心。
savetxt
import numpy as np
i2 = np.eye(2)
np.savetxt("eye.txt", i2)
3.4 讀入CSV文件
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True) #index從0開始
3.6.1 算術平均值
np.mean(c) = np.average(c)
3.6.2 加權平均值
t = np.arange(len(c))
np.average(c, weights=t)
3.8 極值
np.min(c)
np.max(c)
np.ptp(c) 最大值與最小值的差值
3.10 統(tǒng)計分析
np.median(c) 中位數
np.msort(c) 升序排序
np.var(c) 方差
3.12 分析股票收益率
np.diff(c) 可以返回一個由相鄰數組元素的差
值構成的數組
returns = np.diff( arr ) / arr[ : -1] #diff返回的數組比收盤價數組少一個元素
np.std(c) 標準差
對數收益率
logreturns = np.diff( np.log(c) ) #應檢查輸入數組以確保其不含有零和負數
where 可以根據指定的條件返回所有滿足條件的數
組元素的索引值。
posretindices = np.where(returns 0)
np.sqrt(1./252.) 平方根,浮點數
3.14 分析日期數據
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
dates, close=np.loadtxt('data.csv', delimiter=',', usecols=(1,6), converters={1:datestr2num}, unpack=True)
print "Dates =", dates
def datestr2num(s):
return datetime.datetime.strptime(s, "%d-%m-%Y").date().weekday()
# 星期一 0
# 星期二 1
# 星期三 2
# 星期四 3
# 星期五 4
# 星期六 5
# 星期日 6
#output
Dates = [ 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 0. 1. 2. 3. 4. 1. 2. 4. 0. 1. 2. 3. 4. 0.
1. 2. 3. 4.]
averages = np.zeros(5)
for i in range(5):
indices = np.where(dates == i)
prices = np.take(close, indices) #按數組的元素運算,產生一個數組作為輸出。
a = [4, 3, 5, 7, 6, 8]
indices = [0, 1, 4]
np.take(a, indices)
array([4, 3, 6])
np.argmax(c) #返回的是數組中最大元素的索引值
np.argmin(c)
3.16 匯總數據
# AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
#得到第一個星期一和最后一個星期五
first_monday = np.ravel(np.where(dates == 0))[0]
last_friday = np.ravel(np.where(dates == 4))[-1]
#創(chuàng)建一個數組,用于存儲三周內每一天的索引值
weeks_indices = np.arange(first_monday, last_friday + 1)
#按照每個子數組5個元素,用split函數切分數組
weeks_indices = np.split(weeks_indices, 5)
#output
[array([1, 2, 3, 4, 5]), array([ 6, 7, 8, 9, 10]), array([11,12, 13, 14, 15])]
weeksummary = np.apply_along_axis(summarize, 1, weeks_indices,open, high, low, close)
def summarize(a, o, h, l, c): #open, high, low, close
monday_open = o[a[0]]
week_high = np.max( np.take(h, a) )
week_low = np.min( np.take(l, a) )
friday_close = c[a[-1]]
return("APPL", monday_open, week_high, week_low, friday_close)
np.savetxt("weeksummary.csv", weeksummary, delimiter=",", fmt="%s") #指定了文件名、需要保存的數組名、分隔符(在這個例子中為英文標點逗號)以及存儲浮點數的格式。
0818b9ca8b590ca3270a3433284dd417.png
格式字符串以一個百分號開始。接下來是一個可選的標志字符:-表示結果左對齊,0表示左端補0,+表示輸出符號(正號+或負號-)。第三部分為可選的輸出寬度參數,表示輸出的最小位數。第四部分是精度格式符,以”.”開頭,后面跟一個表示精度的整數。最后是一個類型指定字符,在例子中指定為字符串類型。
numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs)
def my_func(a):
... """Average first and last element of a 1-D array"""
... return (a[0] + a[-1]) * 0.5
b = np.array([[1,2,3], [4,5,6], [7,8,9]])
np.apply_along_axis(my_func, 0, b) #沿著X軸運動,取列切片
array([ 4., 5., 6.])
np.apply_along_axis(my_func, 1, b) #沿著y軸運動,取行切片
array([ 2., 5., 8.])
b = np.array([[8,1,7], [4,3,9], [5,2,6]])
np.apply_along_axis(sorted, 1, b)
array([[1, 7, 8],
[3, 4, 9],
[2, 5, 6]])
3.20 計算簡單移動平均線
(1) 使用ones函數創(chuàng)建一個長度為N的元素均初始化為1的數組,然后對整個數組除以N,即可得到權重。如下所示:
N = int(sys.argv[1])
weights = np.ones(N) / N
print "Weights", weights
在N = 5時,輸出結果如下:
Weights [ 0.2 0.2 0.2 0.2 0.2] #權重相等
(2) 使用這些權重值,調用convolve函數:
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
sma = np.convolve(weights, c)[N-1:-N+1] #卷積是分析數學中一種重要的運算,定義為一個函數與經過翻轉和平移的另一個函數的乘積的積分。
t = np.arange(N - 1, len(c)) #作圖
plot(t, c[N-1:], lw=1.0)
plot(t, sma, lw=2.0)
show()
3.22 計算指數移動平均線
指數移動平均線(exponential moving average)。指數移動平均線使用的權重是指數衰減的。對歷史上的數據點賦予的權重以指數速度減小,但永遠不會到達0。
x = np.arange(5)
print "Exp", np.exp(x)
#output
Exp [ 1. 2.71828183 7.3890561 20.08553692 54.59815003]
Linspace 返回一個元素值在指定的范圍內均勻分布的數組。
print "Linspace", np.linspace(-1, 0, 5) #起始值、終止值、可選的元素個數
#output
Linspace [-1. -0.75 -0.5 -0.25 0. ]
(1)權重計算
N = int(sys.argv[1])
weights = np.exp(np.linspace(-1. , 0. , N))
(2)權重歸一化處理
weights /= weights.sum()
print "Weights", weights
#output
Weights [ 0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]
(3)計算及作圖
c = np.loadtxt('data.csv', delimiter=',', usecols=(6,),unpack=True)
ema = np.convolve(weights, c)[N-1:-N+1]
t = np.arange(N - 1, len(c))
plot(t, c[N-1:], lw=1.0)
plot(t, ema, lw=2.0)
show()
3.26 用線性模型預測價格
(x, residuals, rank, s) = np.linalg.lstsq(A, b) #系數向量x、一個殘差數組、A的秩以及A的奇異值
print x, residuals, rank, s
#計算下一個預測值
print np.dot(b, x)
3.28 繪制趨勢線
x = np.arange(6)
x = x.reshape((2, 3))
x
array([[0, 1, 2], [3, 4, 5]])
np.ones_like(x) #用1填充數組
array([[1, 1, 1], [1, 1, 1]])
類似函數
zeros_like
empty_like
zeros
ones
empty
3.30 數組的修剪和壓縮
a = np.arange(5)
print "a =", a
print "Clipped", a.clip(1, 2) #將所有比給定最大值還大的元素全部設為給定的最大值,而所有比給定最小值還小的元素全部設為給定的最小值
#output
a = [0 1 2 3 4]
Clipped [1 1 2 2 2]
a = np.arange(4)
print a
print "Compressed", a.compress(a 2) #返回一個根據給定條件篩選后的數組
#output
[0 1 2 3]
Compressed [3]
b = np.arange(1, 9)
print "b =", b
print "Factorial", b.prod() #輸出數組元素階乘結果
#output
b = [1 2 3 4 5 6 7 8]
Factorial 40320
print "Factorials", b.cumprod()
#output
平滑函數。
交叉熵損失函數,也稱為對數損失或者logistic損失。當模型產生了預測值之后,將對類別的預測概率與真實值(由0或1組成)進行不比較,計算所產生的損失,然后基于此損失設置對數形式的懲罰項。
在神經網絡中,所使用的Softmax函數是連續(xù)可導函數,這使得可以計算出損失函數相對于神經網絡中每個權重的導數(在《機器學習數學基礎》中有對此的完整推導過程和案例,這樣就可以相應地調整模型的權重以最小化損失函數。
擴展資料:
注意事項:
當預測類別為二分類時,交叉熵損失函數的計算公式如下圖,其中y是真實類別(值為0或1),p是預測類別的概率(值為0~1之間的小數)。
計算二分類的交叉熵損失函數的python代碼如下圖,其中esp是一個極小值,第五行代碼clip的目的是保證預測概率的值在0~1之間,輸出的損失值數組求和后,就是損失函數最后的返回值。
參考資料來源:百度百科-交叉熵
參考資料來源:百度百科-損失函數
本文題目:clip函數python,clip函數glsl
鏈接地址:http://aaarwkj.com/article42/hsochc.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網站建設、網站內鏈、外貿網站建設、建站公司、、面包屑導航
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)