本文作者:小嗷
微信公眾號(hào):aoxiaoji
吹比QQ群:736854977
簡(jiǎn)書鏈接:http://www.lxweimin.com/u/45da1fbce7d0
不在意時(shí)光的走,也不在意雨雪的停。如果你是一個(gè)房間中最聰明的人,那你一定是在一個(gè)錯(cuò)誤的房間。
小嗷本來想寫中值濾波、雙邊濾波。
但是,小嗷心中就有個(gè)疑問:濾波濾波,到底我們要濾那些波,有沒有實(shí)際點(diǎn)案例?
為啥子要叫濾波,不能叫濾躁,或者濾什么鬼?
因?yàn)樵?a target="_blank" rel="nofollow">傅里葉那篇(第13篇),小嗷就形成一個(gè)概念:無數(shù)個(gè)大小不一正弦波可以疊出一個(gè)圖像(既然正方形都可以疊出來,那么一個(gè)圖像應(yīng)該也可以)
再者,通過傅里葉變換成頻域,過濾掉不想要的波形(就是根直線),小嗷就是這樣理解:濾波。
那么,什么情況要濾波啊?
但是,喂喂(#`O′),線性濾波,我看來就是個(gè)模糊圖像而已,有個(gè)P用,除了裝逼還是有點(diǎn)用 --- 來自小嗷心中的反問
當(dāng)然,小嗷不是正規(guī)軍出身,文化水平低,沒老師教。如果,某位大佬有更好的解釋,請(qǐng)QQ郵箱或者微信公眾號(hào)里,方便小嗷改正,別寫文章誤導(dǎo)別人。
那么先從制造噪聲開始,明天就利用濾波看看,效果如何?
本文你會(huì)找到以下問題的答案:
圖像噪聲
噪聲來源
常見噪聲介紹(高斯噪聲,泊松噪聲,乘性噪聲,椒鹽噪聲)
一、二階矩
功率譜密度
代碼簡(jiǎn)單實(shí)現(xiàn)模擬噪聲
at()函數(shù)
rand()函數(shù)
2.1 圖像噪聲
噪聲在圖像上常表現(xiàn)為一引起較強(qiáng)視覺效果的孤立像素點(diǎn)或像素塊。一般,噪聲信號(hào)與要研究的對(duì)象不相關(guān),它以無用的信息形式出現(xiàn),擾亂圖像的可觀測(cè)信息。通俗的說就是噪聲讓圖像不清楚。
2.2 噪聲來源
1.圖像獲取過程中
兩種常用類型的圖像傳感器CCD和CMOS采集圖像過程中,由于受傳感器材料屬性、工作環(huán)境、電子元器件和電路結(jié)構(gòu)等影響,會(huì)引入各種噪聲,如電阻引起的熱噪聲、場(chǎng)效應(yīng)管的溝道熱噪聲、光子噪聲、暗電流噪聲、光響應(yīng)非均勻性噪聲。
2.圖像信號(hào)傳輸過程中
由于傳輸介質(zhì)和記錄設(shè)備等的不完善,數(shù)字圖像在其傳輸記錄過程中往往會(huì)受到多種噪聲的污染。另外,在圖像處理的某些環(huán)節(jié)當(dāng)輸入的對(duì)象并不如預(yù)想時(shí)也會(huì)在結(jié)果圖像中引入噪聲。
簡(jiǎn)單來說:工廠環(huán)節(jié) -> 運(yùn)輸?shù)娇蛻敉局小?/p>
2.3 常見噪聲介紹
圖像常見噪聲基本上有以下四種,高斯噪聲,泊松噪聲,乘性噪聲,椒鹽噪聲。
下面五幅圖分別代表了,原圖,以及添加了高斯噪聲,泊松噪聲,乘性噪聲,椒鹽噪聲的圖像。
2.3.1 原圖
2.3.2 高斯噪聲(下圖)
高斯噪聲是指它的概率密度函數(shù)服從高斯分布(即正態(tài)分布)的一類噪聲。如果一個(gè)噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關(guān),一階矩為常數(shù),是指先后信號(hào)在時(shí)間上的相關(guān)性。(什么是二階矩?什么是功率譜密度?)
產(chǎn)生原因:
1)圖像傳感器在拍攝時(shí)市場(chǎng)不夠明亮、亮度不夠均勻;
2)電路各元器件自身噪聲和相互影響;
3)圖像傳感器長(zhǎng)期工作,溫度過高。
2.3.2.1 一、二階矩
數(shù)學(xué)上,“矩”是一組點(diǎn)組成的模型的特定的數(shù)量測(cè)度。 在力學(xué)和統(tǒng)計(jì)學(xué)中都有用到“矩”。
如果這些點(diǎn)代表“質(zhì)量”,那么:
零階矩表示所有點(diǎn)的質(zhì)量; 一階矩表示質(zhì)心;
二階矩表示轉(zhuǎn)動(dòng)慣量。
如果這些點(diǎn)代表“概率密度”,那么:
零階矩表示這些點(diǎn)的 總概率(也就是1);
一階矩表示 期望;
二階(中心)矩表示 方差;
三階(中心)矩表示 偏斜度;
四階(中心)矩表示 峰度;
這個(gè)數(shù)學(xué)上的概念和物理上的“矩”的概念關(guān)系密切。
參考網(wǎng)站:
https://en.wikipedia.org/wiki/Moment_%28mathematics%29
注意:(理解一下,就可以。大概以后處理一些不確定的概率問題,涉及統(tǒng)計(jì)學(xué),需要詳解)
2.3.2.1 功率譜密度
波的功率頻譜???
功率
功率是指物體在單位時(shí)間內(nèi)所做的功的多少,即功率是描述做功快慢的物理量。
功率譜是什么?(功率頻譜大概就是功率譜傅里葉變換之后的玩意,小嗷猜的)
生活中很多東西之間都依靠信號(hào)的傳播,信號(hào)的傳播都是看不見的,但是它以波的形式存在著,這類信號(hào)會(huì)產(chǎn)生功率,單位頻帶的信號(hào)功率就被稱之為功率譜。
(不懂什么是頻帶參考第21篇文章)
打個(gè)比方:這條路,1秒內(nèi)通過的8個(gè)人。1次只能同時(shí)通過4個(gè)人。
那么1秒的功率是8個(gè)人,8/1=8;
再重新看這句話,把這類信號(hào)會(huì)產(chǎn)生功率(1秒內(nèi)通過的8個(gè)人),單位頻帶(1次只能同時(shí)過4個(gè)人)的信號(hào)功率就被稱之為功率譜。
它可以顯示在一定的區(qū)域中信號(hào)功率隨著頻率變化的分布情況。
而頻譜也是相似的一種信號(hào)變化曲線,在科學(xué)的領(lǐng)域里,功率譜和頻譜有著一定的聯(lián)系,但是它們之間還是不一樣的,是有區(qū)別的。
功率譜密度
在頻譜分析中幅度和功率是由緊密聯(lián)系的兩個(gè)不同的物理量:
能量能表述為幅值的平方和,也能表述為功率在時(shí)間上的積分;
功率譜密度,是指用密度的概念表示信號(hào)功率在各頻率點(diǎn)的分布情況,是對(duì)隨機(jī)變量均方值的量度,是單位頻率的平均功率量綱;
也就是說,對(duì)功率譜在頻域上積分就可以得到信號(hào)的平均功率,而不是能量。能量譜密度是單位頻率的幅值平方和量綱,能量譜密度曲線下面的面積才是這個(gè)信號(hào)的總能量。
于是,功率譜、能量譜、幅值譜之間的緊密關(guān)系主要表述為:能量譜是功率譜密度函數(shù)在相位上的卷積,也是幅值譜密度函數(shù)的平方在頻率上的積分;功率譜是信號(hào)自相關(guān)函數(shù)的傅里葉變換,能量譜是信號(hào)本身傅立葉變換幅度的平方。
功率譜相關(guān)釋義:
盡管并非一定要為信號(hào)或者它的變量賦予一定的物理量綱,下面的討論中假設(shè)信號(hào)在時(shí)域內(nèi)變化。上面能量譜密度的定義要求信號(hào)的傅里葉變換必須存在,也就是說信號(hào)平方可積或者平方可加。
一個(gè)經(jīng)常更加有用的替換表示是功率譜密度(PSD),它定義了信號(hào)或者時(shí)間序列的功率如何隨頻率分布。這里功率可能是實(shí)際物理上的功率,或者更經(jīng)常便于表示抽象的信號(hào)被定義為信號(hào)數(shù)值的平方,也就是當(dāng)信號(hào)的負(fù)載為1歐姆(ohm)時(shí)的實(shí)際功率。
此瞬時(shí)功率(平均功率的中間值)可表示為:
由于平均值不為零的信號(hào)不是平方可積的,所以在這種情況下就沒有傅里葉變換。幸運(yùn)的是維納-辛欽定理(Wiener-Khinchin theorem)提供了一個(gè)簡(jiǎn)單的替換方法,如果信號(hào)可以看作是平穩(wěn)隨機(jī)過程,那么功率譜密度就是信號(hào)自相關(guān)函數(shù)的傅里葉變換。
功率譜和頻譜的區(qū)別
1、計(jì)算
功率譜的計(jì)算需要信號(hào)先做自相關(guān),然后再進(jìn)行FFT運(yùn)算。
頻譜的計(jì)算則是將信號(hào)直接進(jìn)行FFT就行了。
2、方式
功率譜是對(duì)信號(hào)研究,不過它是從能量的方面來對(duì)信號(hào)研究的。
而頻譜也是用來形容信號(hào)的,只是的表示方式變了,從時(shí)域轉(zhuǎn)變成了頻域表示,也就是說一種信號(hào)的表示方式不同而已。
功率譜與頻譜和的區(qū)別歸根結(jié)底就是信號(hào)、功率、能量三者之間的關(guān)聯(lián)。
3、定義
功率譜的定義是在有限信號(hào)的情況下,單位頻帶范圍內(nèi)信號(hào)功率的變換狀況,功率隨頻率而變化,從而表現(xiàn)成為功率譜,它是專門對(duì)功率能量的可用有限信號(hào)進(jìn)行分析所表現(xiàn)的能量。它含有頻譜的一些幅度信息,不過相位信息被舍棄掉了。
相比之下,頻譜極為不嚴(yán)格,主要是體現(xiàn)信號(hào)的平均變換,要求的只是一段時(shí)間平均量。
所以經(jīng)常說在頻譜信號(hào)不同的情況下,它的功率譜很可能是一樣的。
4、性質(zhì)
功率譜雖然過程是隨機(jī)的,但由于統(tǒng)計(jì)的是平均概念,就相當(dāng)于平穩(wěn)的隨機(jī)過程,這個(gè)過程的功率譜則是一個(gè)確定性的函數(shù)。
而頻譜的樣本進(jìn)行Fourier變換,盡管過程也是隨機(jī)的,但是對(duì)于這個(gè)隨機(jī)變化過程來說,頻譜形成的是隨機(jī)的頻域序列,函數(shù)不確定。
5、要求
功率譜和頻譜的功率極其幅度的概念也是有差別,并且它們的存在性要求也是不同的。功率譜的存在性要求變化收斂,而頻譜的存在性只要求了是否收斂。
功率譜和頻譜有相同的地方,并且有著聯(lián)系,可這些區(qū)別才是決定它們兩個(gè)用處的重要之處。功率譜和頻譜雖然都是對(duì)信號(hào)的研究,但是研究的方向不同,角度也不相同,并且它們的性質(zhì)存在不同之處,功率譜的隨機(jī)性更差一點(diǎn),比較嚴(yán)謹(jǐn),有確定的函數(shù)支撐;而頻譜的要求更少一些,隨機(jī)性頗強(qiáng),導(dǎo)致了它的信號(hào)變化,不過這也是它的研究?jī)r(jià)值所在。
內(nèi)容來源:土巴兔
注意:(理解一下,就可以。大概以后處理一些不確定的概率問題,涉及統(tǒng)計(jì)學(xué),需要詳解)
2.3.3 泊松噪聲(下圖)
泊松噪聲,就是符合泊松分布的噪聲模型,泊松分布適合于描述單位時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù)的概率分布。
如某一服務(wù)設(shè)施在一定時(shí)間內(nèi)受到的服務(wù)請(qǐng)求的次數(shù),電話交換機(jī)接到呼叫的次數(shù)、汽車站臺(tái)的候客人數(shù)、機(jī)器出現(xiàn)的故障數(shù)、自然災(zāi)害發(fā)生的次數(shù)、DNA序列的變異數(shù)、放射性原子核的衰變數(shù)等等
2.3.4 乘性噪聲(下圖)
乘性噪聲一般由信道不理想引起,它們與信號(hào)的關(guān)系是相乘,信號(hào)在它在,信號(hào)不在他也就不在。
2.3.5 椒鹽噪聲(下圖)
椒鹽噪聲,椒鹽噪聲又稱脈沖噪聲,它隨機(jī)改變一些像素值,是由圖像傳感器,傳輸信道,解碼處理等產(chǎn)生的黑白相間的亮暗點(diǎn)噪聲。
椒鹽噪聲往往由圖像切割引起。
圖像噪聲使圖像在獲取或是傳輸過程中收到隨機(jī)信號(hào)干擾,妨礙人們對(duì)圖像理解及分析處理的信號(hào)。很多時(shí)候?qū)D像噪聲看做多維隨機(jī)過程,因而描述噪聲的方法完全可以借用隨機(jī)過程的描述,也就是使用隨機(jī)過程的描述,也就是用它的高斯分布函數(shù)和概率密度分布函數(shù)。圖像噪聲的產(chǎn)生來自圖像獲取中的環(huán)境條件和傳感元器件自身的質(zhì)量,圖像在傳輸過程中產(chǎn)生圖像噪聲的主要因素是所用的傳輸信道收到了噪聲的污染。
先簡(jiǎn)單介紹一下相關(guān)API函數(shù):
3.1 at()函數(shù)(在Mat)
at類中的at方法對(duì)于獲取圖像矩陣某點(diǎn)的RGB值或者改變某點(diǎn)的值很方便。
對(duì)于單通道的圖像,則可以使用:
如:XXX.at<uchar>(i, j)=255(因?yàn)閱瓮ǖ溃ɑ叶葓D),由黑到白)
(坐標(biāo)(i, j)上,像素點(diǎn)的值為白色)
對(duì)于多通道的圖像(BGR),如
img.at<Vec3b>(14,25) [0]= 25;//B
img.at< Vec3b >(14,25) [1]= 25;//G
img.at< Vec3b >(14,25 [2]= 25;//R
3.2 rand()函數(shù)
rand()函數(shù)是產(chǎn)生隨機(jī)數(shù)的一個(gè)隨機(jī)函數(shù)。
如:rand()%3是什么意思?
rand()是偽隨機(jī)數(shù)生成函數(shù),%是模運(yùn)算,這個(gè)表達(dá)式的作用是隨機(jī)生成012三個(gè)數(shù)字中的一個(gè)。
3.3 下面簡(jiǎn)單寫寫兩種圖像噪聲,即椒鹽噪聲和高斯噪聲。
3.4 椒鹽噪聲是什么?
椒鹽噪聲也稱為脈沖噪聲,是圖像中經(jīng)常見到的一種噪聲,它是一種隨機(jī)出現(xiàn)的白點(diǎn)或者黑點(diǎn),可能是亮的區(qū)域有黑色像素或是在暗的區(qū)域有白色像素(或是兩者皆有)。鹽和胡椒噪聲的成因可能是影像訊號(hào)受到突如其來的強(qiáng)烈干擾而產(chǎn)生、類比數(shù)位轉(zhuǎn)換器或位元傳輸錯(cuò)誤等。例如失效的感應(yīng)器導(dǎo)致像素值為最小值,飽和的感應(yīng)器導(dǎo)致像素值為最大值。
圖像模擬添加椒鹽噪聲是通過隨機(jī)獲取像素點(diǎn)并設(shè)置為高亮度點(diǎn)和低灰度點(diǎn)來實(shí)現(xiàn)的
即:隨機(jī)設(shè)置一些像素點(diǎn)為白色或者黑色。
圖像添加椒鹽噪聲的程序如下:
/
//利用程序給原圖像增加椒鹽噪聲
//圖象模擬添加椒鹽噪聲是通過隨機(jī)獲取像素點(diǎn)斌那個(gè)設(shè)置為高亮度點(diǎn)來實(shí)現(xiàn)的
1#include <cstdlib> 2#include <iostream> 3#include <opencv2\core\core.hpp> 4#include <opencv2\highgui\highgui.hpp> 5#include <opencv2\imgproc\imgproc.hpp> 6using namespace cv; 7using namespace std; 8Mat addSaltNoise(const Mat srcImage, int n); 9int main()10{ 11 Mat srcImage = imread("D://原圖.jpg");12 if (!srcImage.data)13 {14 cout << "讀入圖像有誤!" << endl;15 system("pause");16 return -1;17 }18 imshow("原圖像", srcImage);19 Mat dstImage = addSaltNoise(srcImage, 3000);20 imshow("添加椒鹽噪聲的圖像", dstImage);21 //存儲(chǔ)圖像 22 imwrite("salt_pepper_Image.jpg", dstImage);23 waitKey();24 return 0;25}26Mat addSaltNoise(const Mat srcImage, int n)27{28 //克隆一張一摸一樣的圖29 Mat dstImage = srcImage.clone();30 for (int k = 0; k < n; k++)31 {32 //隨機(jī)取值行33 //rand()是偽隨機(jī)數(shù)生成函數(shù),%是模運(yùn)算,這個(gè)表達(dá)式的作用是隨機(jī)生成012三個(gè)數(shù)字中的一個(gè)。34 int i = rand() % dstImage.rows;35 int j = rand() % dstImage.cols;36 //圖像通道判定 37 if (dstImage.channels() == 1)38 {39 dstImage.at<uchar>(i, j) = 255; //鹽噪聲 40 }41 else42 {43 dstImage.at<Vec3b>(i, j)[0] = 255;44 dstImage.at<Vec3b>(i, j)[1] = 255;45 dstImage.at<Vec3b>(i, j)[2] = 255;46 }47 }48 for (int k = 0; k < n; k++)49 {50 //隨機(jī)取值行列 51 int i = rand() % dstImage.rows;52 int j = rand() % dstImage.cols;53 //圖像通道判定 54 if (dstImage.channels() == 1)55 {56 dstImage.at<uchar>(i, j) = 0; //椒噪聲 57 }58 else59 {60 dstImage.at<Vec3b>(i, j)[0] = 0;61 dstImage.at<Vec3b>(i, j)[1] = 0;62 dstImage.at<Vec3b>(i, j)[2] = 0;63 }64 }65 return dstImage;66}
原圖
椒鹽圖
就是隨機(jī)分布黑白像素點(diǎn)
3.5 高斯噪聲(基于Box–Muller變換的正態(tài)隨機(jī)數(shù)生成方法)
根據(jù)Box-Muller變換原理,建設(shè)隨機(jī)變量U1、U2來自獨(dú)立的處于(0,1)之間的均勻分布,則經(jīng)過下面兩個(gè)式子產(chǎn)生的隨機(jī)變量Z0,Z1服從標(biāo)準(zhǔn)高斯分布。
定理(Box-Muller變換):如果隨機(jī)變量U1和U2是IID的,且U1,U2 ~Uniform[0, 1],則
Z0和Z1獨(dú)立且服從標(biāo)準(zhǔn)正態(tài)分布。
如何來證明這個(gè)定理呢?這需要用到一些微積分中的知識(shí),首先回憶一下二重積分化為極坐標(biāo)下累次積分的方法:
假設(shè)現(xiàn)在有兩個(gè)獨(dú)立的標(biāo)準(zhǔn)正態(tài)分布 X~N(0,1) 和 Y~N(0,1),由于二者相互獨(dú)立,則聯(lián)合概率密度函數(shù)為
做極坐標(biāo)變換,則x=Rcosθ,y=Rsinθ,則有
你可以看到這個(gè)結(jié)果可以看成是兩個(gè)概率分布的密度函數(shù)的乘積,其中一個(gè)可以看成是[0, 2π]上均勻分布,將其轉(zhuǎn)換為標(biāo)準(zhǔn)均勻分布則有θ ~Unif (0, 2π)=2π U2。
另外一個(gè)的密度函數(shù)為
則其累計(jì)分布函數(shù)CDF為
這個(gè)CDF函數(shù)的反函數(shù)可以寫成
根據(jù)逆變換采樣的原理,如果我們有個(gè)PDF為P(R)的分布,那么對(duì)齊CDF的反函數(shù)進(jìn)行均勻采樣所得的樣本分布將符合P(R)的分布,而如果 u 是均勻分布的,那么 U1 = 1-u 也將是均勻分布的,于是用 U1 替換1-u,最后可得
結(jié)論得證。最后我們來總結(jié)一下利用Box-Muller變換生成符合高斯分布的隨機(jī)數(shù)的方法:
圖像添加高斯噪聲的程序如下:
1//給圖像添加高斯噪聲 2#include <cmath> 3#include <limits> 4#include <cstdlib> 5#include <iostream> 6#include <opencv2\core\core.hpp> 7#include <opencv2\highgui\highgui.hpp> 8using namespace cv; 9using namespace std;10double generateGaussianNoise(double m, double sigma);11Mat addGaussianNoise(Mat &srcImag);12int main()13{14 Mat srcImage = imread("D://3.jpg");15 if (!srcImage.data)16 {17 cout << "讀入圖片錯(cuò)誤!" << endl;18 system("pause");19 return -1;20 }21 imshow("原圖像", srcImage);22 Mat dstImage = addGaussianNoise(srcImage);23 imshow("添加高斯噪聲后的圖像", dstImage);24 waitKey();25 return 0;26}27//生成高斯噪聲 28double generateGaussianNoise(double mu, double sigma)29{30 //定義小值 31 const double epsilon = numeric_limits<double>::min();32 static double z0, z1;33 static bool flag = false;34 flag = !flag;35 //flag為假構(gòu)造高斯隨機(jī)變量X 36 if (!flag)37 return z1 * sigma + mu;38 double u1, u2;39 //構(gòu)造隨機(jī)變量 40 do41 {42 u1 = rand() * (1.0 / RAND_MAX);43 u2 = rand() * (1.0 / RAND_MAX);44 } while (u1 <= epsilon);45 //flag為真構(gòu)造高斯隨機(jī)變量 46 z0 = sqrt(-2.0*log(u1))*cos(2 * CV_PI*u2);47 z1 = sqrt(-2.0*log(u1))*sin(2 * CV_PI*u2);48 return z0*sigma + mu;49}50//為圖像添加高斯噪聲 51Mat addGaussianNoise(Mat &srcImag)52{53 Mat dstImage = srcImag.clone();54 int channels = dstImage.channels();55 int rowsNumber = dstImage.rows;56 int colsNumber = dstImage.cols*channels;57 //判斷圖像的連續(xù)性 58 if (dstImage.isContinuous())59 {60 colsNumber *= rowsNumber;61 rowsNumber = 1;62 }63 for (int i = 0; i < rowsNumber; i++)64 {65 for (int j = 0; j < colsNumber; j++)66 {67 //添加高斯噪聲 68 int val = dstImage.ptr<uchar>(i)[j] +69 generateGaussianNoise(2, 0.8) * 32;70 if (val < 0)71 val = 0;72 if (val>255)73 val = 255;74 dstImage.ptr<uchar>(i)[j] = (uchar)val;75 }76 }77 return dstImage;78}
效果圖
本人是抱著玩一玩的心態(tài),學(xué)習(xí)opencv(其實(shí)深度學(xué)習(xí)沒有外界說的這么高深,小嗷是白板,而且有工作在身并且于代碼無關(guān))
大家可以把我的數(shù)學(xué)水平想象成初中水平,畢竟小嗷既不是代碼靠吃飯又不是靠數(shù)學(xué)吃飯,畢業(yè)N年
寫文章主要是為了后人少走點(diǎn)彎路,多交點(diǎn)朋友,一起學(xué)習(xí)
如果有好的圖像識(shí)別群拉我進(jìn)去QQ:631821577
就我一個(gè)白板,最后還是成的,你們別怕,慢慢來把
分享可以無數(shù)次,轉(zhuǎn)載成自己文章QQ郵箱通知一下,未經(jīng)授權(quán)請(qǐng)勿轉(zhuǎn)載。
QQ群:736854977
有什么疑問公眾號(hào)提問,下班或者周六日回答,ths
算算涉及知識(shí):高數(shù)/矩陣分析/線性代數(shù)/統(tǒng)計(jì)學(xué)/OpenCV庫(kù)/C++或者PY
(今天不懂知識(shí)點(diǎn),基本來自統(tǒng)計(jì)學(xué)。上學(xué)到工作,小嗷摸都沒摸統(tǒng)計(jì)學(xué)。)
慫的話,現(xiàn)在可以放棄。(當(dāng)然,小嗷會(huì)每篇補(bǔ)一點(diǎn)相關(guān)的數(shù)學(xué)。)
線性代數(shù)網(wǎng)址(線性代數(shù)看視頻吧,少年):
http://open.163.com/special/opencourse/daishu.html
代碼鏈接:
https://pan.baidu.com/s/1BWts9jJGgY4Jm4xAa4-5XA
密碼:17kb
推薦文章:
無