在一定的范圍內,無論物體是大還是小,人眼都可以分辨出來。然而計算機要有相同的能力卻不是那么的容易,在未知的場景中,計算機視覺并不能提供物體的尺度大小,其中的一種方法是把物體不同尺度下的圖像都提供給機器,讓機器能夠對物體在不同的尺度下有一個統一的認知。在建立統一認知的過程中,要考慮的就是在圖像在不同的尺度下都存在的特征點。
創新互聯公司是一家專業提供淮陽企業網站建設,專注與成都網站設計、成都網站建設、成都h5網站建設、小程序制作等業務。10年已為淮陽眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。
在早期圖像的多尺度通常使用圖像金字塔表示形式。圖像金字塔是同一圖像在不同的分辨率下得到的一組結果其生成過程一般包括兩個步驟:
多分辨率的圖像金字塔雖然生成簡單,但其本質是降采樣,圖像的局部特征則難以保持,也就是無法保持特征的尺度不變性。
我們還可以通過圖像的模糊程度來模擬人在距離物體由遠到近時物體在視網膜上成像過程,距離物體越近其尺寸越大圖像也越模糊,這就是高斯尺度空間,使用不同的參數模糊圖像(分辨率不變),是尺度空間的另一種表現形式。
構建尺度空間的目的是為了檢測出在不同的尺度下都存在的特征點,而檢測特征點較好的算子是Δ^2G(高斯拉普拉斯,LoG)
使用LoG雖然能較好的檢測到圖像中的特征點,但是其運算量過大,通常可使用DoG(差分高斯,Difference of Gaussina)來近似計算LoG。
從上式可以知道,將相鄰的兩個高斯空間的圖像相減就得到了DoG的響應圖像。為了得到DoG圖像,先要構建高斯尺度空間,而高斯的尺度空間可以在圖像金字塔降采樣的基礎上加上高斯濾波得到,也就是對圖像金字塔的每層圖像使用不同的參數σ進行高斯模糊,使每層金字塔有多張高斯模糊過的圖像。
如下圖,octave間是降采樣關系,且octave(i+1)的第一張(從下往上數)圖像是由octave(i)中德倒數第三張圖像降采樣得到。octave內的圖像大小一樣,只是高斯模糊使用的尺度參數不同。
對于一幅圖像,建立其在不同尺度scale下的圖像,也稱為octave,這是為了scale-invariant,也就是在任何尺度都能有對應的特征點。下圖中右側的DoG就是我們構建的尺度空間。
為了尋找尺度空間的極值點,每一個采樣點要和它所有的相鄰點比較,看其是否比它的圖像域和尺度域的相鄰點大或者小。如圖所示,中間的檢測點和它同尺度的8個相鄰點和上下相鄰尺度對應的9×2個點共26個點比較,以確保在尺度空間和二維圖像空間都檢測到極值點。 一個點如果在DOG尺度空間本層以及上下兩層的26個領域中是最大或最小值時,就認為該點是圖像在該尺度下的一個特征點。下圖中將叉號點要比較的26個點都標為了綠色。
找到所有特征點后, 要去除低對比度和不穩定的邊緣效應的點 ,留下具有代表性的關鍵點(比如,正方形旋轉后變為菱形,如果用邊緣做識別,4條邊就完全不一樣,就會錯誤;如果用角點識別,則穩定一些)。去除這些點的好處是增強匹配的抗噪能力和穩定性。最后,對離散的點做曲線擬合,得到精確的關鍵點的位置和尺度信息。
近來不斷有人改進,其中最著名的有 SURF(計算量小,運算速度快,提取的特征點幾乎與SIFT相同)和 CSIFT(彩色尺度特征不變變換,顧名思義,可以解決基于彩色圖像的SIFT問題)。
其中sift.detectAndCompute()函數返回kp,des。
上圖dog的shape為(481, 500, 3),提取的特征向量des的shape為(501, 128),501個128維的特征點。
該方法可以在特征點處繪制一個小圓圈。
python剔除掉一堆數據中離散度比較大的數據步驟如下:
1、創建DataFrame:可以使用Pandas的DataFrame()函數創建一個DataFrame,將數據存入DataFrame中。
2、計算每個特征的IQR值:可以使用Pandas的describe()函數,計算每個特征列的四分位數,再計算出每列IQR值。
3、計算每個特征的離散度:可以根據每列的最小值和最大值,減去其最低四分位數和最高四分位數,來計算每個特征的離散度。
4、篩選出離散度比較大的數據:可以根據不同的閾值,篩選出離散度比較大的數據,并剔除掉這部分數據。
1、在pandas中,我們采用了R語言中的慣用法,即將缺失值表示為NA,它表示不可用not available。
2、pandas項目中還在不斷優化內部細節以更好處理缺失數據。
3、過濾掉缺失數據的辦法有很多種。可以通過pandas.isnull或布爾索引的手工方法,但dropna可能會更實用一些。對于一個Series,dropna返回一個僅含非空數據和索引值的Series。
4、而對于DataFrame對象,可能希望丟棄全NA或含有NA的行或列。dropna默認丟棄任何含有缺失值的行。
5、最后通過一個常數調用fillna就會將缺失值替換為那個常數值,若是通過一個字典調用fillna,就可以實現對不同的列填充不同的值。這樣就完成了。
上一課已經體驗到了 Seaborn 相對 Matplotlib 的優勢,本課將要介紹的是 Seaborn 對分類數據的統計,也是它的長項。
針對分類數據的統計圖,可以使用 sns.catplot 繪制,其完整參數如下:
本課使用演繹的方式來學習,首先理解這個函數的基本使用方法,重點是常用參數的含義。
其他的參數,根據名稱也能基本理解。
下面就依據 kind 參數的不同取值,分門別類地介紹各種不同類型的分類統計圖。
讀入數據集:
然后用這個數據集制圖,看看效果:
輸出結果:
毫無疑問,這里繪制的是散點圖。但是,該散點圖的橫坐標是分類特征 time 中的三個值,并且用 hue='kind' 又將分類特征插入到圖像中,即用不同顏色的的點代表又一個分類特征 kind 的值,最終得到這些類別組合下每個記錄中的 pulse 特征值,并以上述圖示表示出來。也可以理解為,x='time', hue='kind' 引入了圖中的兩個特征維度。
語句 ① 中,就沒有特別聲明參數 kind 的值,此時是使用默認值 'strip'。
與 ① 等效的還有另外一個對應函數 sns.stripplot。
輸出結果:
② 與 ① 的效果一樣。
不過,在 sns.catplot 中的兩個參數 row、col,在類似 sns.stripplot 這樣的專有函數中是沒有的。因此,下面的圖,只有用 sns.catplot 才能簡潔直觀。
輸出結果:
不過,如果換一個叫角度來說,類似 sns.stripplot 這樣的專有函數,表達簡單,參數與 sns.catplot 相比,有所精簡,使用起來更方便。
仔細比較,sns.catplot 和 sns.stripplot 兩者還是稍有區別的,雖然在一般情況下兩者是通用的。
因此,不要追求某一個是萬能的,各有各的用途,存在即合理。
不過,下面的聲明請注意: 如果沒有非常的必要,比如繪制分區圖,在本課中后續都演示如何使用專有名稱的函數。
前面已經初步解釋了這個函數,為了格式完整,這里再重復一下,即 sns.catplot 中參數 kind='strip'。
如果非要將此函數翻譯為漢語,可以稱之為“條狀散點圖”。以分類特征為一坐標軸,在另外一個坐標軸上,根據分類特征,將該分類特征數據所在記錄中的連續值沿坐標軸描點。
從語句 ② 的結果圖中可以看到,這些點雖然縱軸的數值有相同的,但是沒有將它們重疊。因此,我們看到的好像是“一束”散點,實際上,所有點的橫坐標都應該是相應特征分類數據,也不要把分類特征的值理解為一個范圍,分散開僅僅是為了圖示的視覺需要。
輸出結果:
④ 相對 ② 的圖示,在于此時同一縱軸值的都重合了——本來它們的橫軸值都是一樣的。實現此效果的參數是 jitter=0,它可以表示點的“振動”,如果默認或者 jitter=True,意味著允許描點在某個范圍振動——語句 ② 的效果;還可設置為某個 0 到 1 的浮點,表示許可振動的幅度。請對比下面的操作。
輸出結果:
語句 ② 中使用 hue='kind' 參數向圖中提供了另外一個分類特征,但是,如果感覺圖有點亂,還可以這樣做:
輸出結果:
dodge=True 的作用就在于將 hue='kind' 所引入的特征數據分開,相對 ② 的效果有很大差異。
并且,在 ⑤ 中還使用了 paletter='Set2' 設置了色彩方案。
sns.stripplot 函數中的其他有關參數,請讀者使用幫助文檔了解。
此函數即 sns.catplot 的參數 kind='swarm'。
輸出結果:
再繪制一張簡單的圖,一遍研究這種圖示的本質。
輸出結果:
此圖只使用了一個特征的數據,簡化表象,才能探究 sns.swarmplot 的本質。它同樣是將該特征中的數據,依據其他特征的連續值在圖中描點,并且所有點在默認情況下不彼此重疊——這方面與 sns.stripplot 一樣。但是,與之不同的是,這些點不是隨機分布的,它們經過調整之后,均勻對稱分布在分類特征數值所在直線的兩側,這樣能很好地表示數據的分布特點。但是,這種方式不適合“大數據”。
sns.swarmplot 的參數似乎也沒有什么太特殊的。下面使用幾個,熟悉一番基本操作。
在分類維度上還可以再引入一個維度,用不同顏色的點表示另外一種類別,即使用 hue 參數來實現。
輸出結果:
這里用 hue = 'smoker' 參數又引入了一個分類特征,在圖中用不同顏色來區分。
如果覺得會 smoker 特征的值都混在一起有點亂,還可以使用下面方式把他們分開——老調重彈。
輸出結果:
生成此效果的參數就是 dodge=True,它的作用就是當 hue 參數設置了特征之后,將 hue 的特征數據進行分類。
sns.catplot 函數的參數 kind 可以有三個值,都是用于繪制分類的分布圖:
下面依次對這三個專有函數進行闡述。
任意波形的生成 (geneartion of arbitrary waveform) 在商業,軍事等領域都有著重要的應用,諸如空間光通信 (free-space optics communication), 高速信號處理 (high-speed signal processing),雷達 (radar) 等。在任意波形生成后, 如何評估生成的任意波形 成為另外一個重要的話題。
假設有一組實驗數據,已知他們之間的函數關系:y=f(x),通過這些信息,需要確定函數中的一些參數項。例如,f 是一個線型函數 f(x)=k*x+b,那么參數 k 和 b 就是需要確定的值。如果這些參數用 p 表示的話,那么就需要找到一組 p 值使得如下公式中的 S 函數最小:
這種算法被稱之為 最小二乘擬合 (least-square fitting)。scipy 中的子函數庫 optimize 已經提供實現最小二乘擬合算法的函數 leastsq 。下面是 leastsq 函數導入的方式:
scipy.optimize.leastsq 使用方法
在 Python科學計算——Numpy.genfromtxt 一文中,使用 numpy.genfromtxt 對數字示波器采集的三角波數據導入進行了介紹,今天,就以 4GHz三角波 波形的擬合為案例介紹任意波形的擬合方法。
在 Python科學計算——如何構建模型? 一文中,討論了如何構建三角波模型。在標準三角波波形的基礎上添加了 橫向,縱向的平移和伸縮特征參數 ,最后添加了 噪聲參數 模擬了三角波幅度參差不齊的隨機性特征。但在波形擬合時,并不是所有的特征參數都要納入考量,例如,噪聲參數應是 波形生成系統 的固有特征,正因為它的存在使得產生的波形存在瑕疵,因此,在進行波形擬合并評估時,不應將噪聲參數納入考量,最終模型如下:
在調用 scipy.optimize.leastsq 函數時,需要構建誤差函數:
有時候,為了使圖片有更好的效果,需要對數據進行一些處理:
leastsq 調用方式如下:
合理的設置 p0 可以減少程序運行時間,因此,可以在運行一次程序后,用擬合后的相應數據對 p0 進行修正。
在對波形進行擬合后,調用 pylab 對擬合前后的數據進行可視化:
均方根誤差 (root mean square error) 是一個很好的評判標準,它是觀測值與真值偏差的平方和觀測次數n比值的平方根,在實際測量中,觀測次數n總是有限的,真值只能用最可信賴(最佳)值來代替.方根誤差對一組測量中的特大或特小誤差反映非常敏感,所以,均方根誤差能夠很好地反映出測量的精密度。
RMSE 用程序實現如下:
擬合效果,模型參數輸出:
leastsq 函數適用于任何波形的擬合,下面就來介紹一些常用的其他波形:
1、Numpy常用方法使用大全(超詳細)
1、Series和DataFrame簡單入門
2、Pandas操作CSV文件的讀寫
3、Pandas處理DataFrame,Series進行作圖
1、Matplotlib繪圖之屬性設置
2、Matplotlib繪制誤差條形圖、餅圖、等高線圖、3D柱形圖
1、層次分析法(AHP)——算數平均值法、幾何平均值法、特征值法(Python實現,超詳細注釋)
2、Python實現TOPSIS分析法(優劣解距離法)
3、Python實現線性插值和三次樣條插值
4、Python實現線性函數的擬合算法
5、Python實現統計描述以及計算皮爾遜相關系數
6、Python實現迪杰斯特拉算法和貝爾曼福特算法求解最短路徑
分享標題:python算特征函數 Python求特征值
當前地址:http://vcdvsql.cn/article36/hhpepg.html
成都網站建設公司_創新互聯,為您提供網站建設、網站排名、小程序開發、網站策劃、云服務器、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯