圖像處理的概論
圖像分析一般利用數(shù)學模型并結(jié)合圖像處理的技術來分析底層特征和上層結(jié)構,到從而提取具有一定智能性的信息,其中對圖片內(nèi)容分析,圖片內(nèi)容識別和檢測都離不開圖像的分類。
圖像分類目標:已有固定的分類標簽集合,然后對于輸入的圖像,從分類標簽集合中找出一個分類標簽,最后把分類標簽分配給該輸入圖像。
圖像處理流程
圖像分類
圖像數(shù)據(jù)分析的內(nèi)容是什么?內(nèi)容分析,內(nèi)容識別,檢測都離不開圖像的分類
分類目標:所謂圖像分類問題,就是已有固定的分類標簽集合,然后對于輸入的圖像,從分類標簽集合中找出一個分類標簽,最后把分類標簽分配給該輸入圖像。
圖像分類流程:
1.輸入:輸入是包含N個圖像的集合,每個圖像的標簽是K種分類標簽中的一種。這個集合稱為訓練集。
2學習:這一步的任務是使用訓練集來學習每個類到底長什么樣。一般該步驟叫做訓練分類器或者學習一個模型。
3.評價:讓分類器來預測它未曾見過的圖像的分類標簽,把分類器預測的標簽和圖像真正的分類標簽對比,并以此來評價分類器的質(zhì)量。
計算機通過訓練集{dog(狗),cat(貓),truck(卡車),plane(飛機)}來學習dog,cat,truck,plane到底長什么樣,有什么特征,之后預測這張它未曾見過的圖像的分類標簽,把分類器預測的標簽和圖像真正的分類標簽對比,得出與分類標簽cat匹配率最高。
前面我們學習了機器學習的相關算法,作為底層的機器學習算法,它將會為我們提供一系列的算法支撐,最終幫助我們對圖像數(shù)據(jù)進行訓練,分類。
圖像處理應用場景
圖像相比文字能夠提供更加生動、容易理解及更具藝術感的信息,是人們轉(zhuǎn)遞與交換信息的重要來源。
圖像分類是根據(jù)圖像的語義信息將不同類別圖像區(qū)分開來,是計算機視覺中重要的基本問題,也是圖像檢測、圖像分割、物體跟蹤、行為分析等其他高層視覺任務的基礎。
圖像分類在很多領域有廣泛應用,包括安防領域的人臉識別和智能視頻分析等,交通領域的交通場景識別,互聯(lián)網(wǎng)領域基于內(nèi)容的圖像檢索和相冊自動歸類。
隨著人類活動范圍的不斷擴大,圖像分類的應用領域也將隨之不斷擴大,比如衛(wèi)星影像,醫(yī)學領域的圖像識別等,通過計算機圖像分類技術既節(jié)省人力,又加快了速度,還可以從照片中提取人工所不能發(fā)現(xiàn)的大量有用情報。
考古只是圖像分類在衛(wèi)星領域的一個很小的應用,現(xiàn)在世界各國都在利用陸地衛(wèi)星所獲取的圖像進行資源調(diào)查(如森林調(diào)查、海洋泥沙和漁業(yè)調(diào)查、水資源調(diào)查等),災害檢測(如病蟲害檢測、水火檢測、環(huán)境污染檢測等),資源勘察(如石油勘查、礦產(chǎn)量探測、大型工程地理位置勘探分析等),農(nóng)業(yè)規(guī)劃(如土壤營養(yǎng)、水份和農(nóng)作物生長、產(chǎn)量的估算等),城市規(guī)劃(如地質(zhì)結(jié)構、水源及環(huán)境分析等)。
圖像分類在生物醫(yī)學工程方面的應用十分廣泛,而且很有成效。除了上面介紹的痰液自動分析系統(tǒng)之外,還有一類是對醫(yī)用顯微圖像的處理分析,如紅細胞、白細胞分類,染色體分析,癌細胞識別等。此外,在X光肺部圖像增晰、超聲波圖像處理、心電圖分析、立體定向放射治療,CT技術等醫(yī)學診斷方面都廣泛地應用圖像處理技術。
圖像在計算機內(nèi)的結(jié)構
圖像在計算機中的結(jié)構
在進行圖像分類前我們了解一下圖像在計算機中的結(jié)構
對于計算機來說,圖像是一個由數(shù)字組成的巨大的3維數(shù)組。
圖像是對真實存在的或者人們想象的客觀對象的一種表示方式,這種方式能被人的視覺系統(tǒng)感知。但是對計算機來說,每張圖像都是由一個或者多個相同維度的數(shù)據(jù)通道構成。
以RGB彩色圖像為例,每張圖片都是由三個數(shù)據(jù)通道構成,分別為紅、綠和藍色通道。
而對于灰度圖像,則只有一個通道。
多光譜圖像一般有幾個到幾十個通道。高光譜圖像具有幾十到上百個通道。
我們主要介紹多通道情況下,最常見的紅綠藍(RGB)三通道,第一個維度是高度,第二個維度是寬度,第三個維度是通道數(shù),即對于計算機來說,圖像是一個由數(shù)字組成的巨大的3維數(shù)組。
圖像如何進行分類,計算機是通過數(shù)據(jù)(數(shù)值)進行公式運算和算法迭代的,那么我們應該如何理解圖像呢?圖像是一個圖片,但是它不是數(shù)值,可是為什么我們的機器還可以運算呢?
因為在計算機里面讀取的圖片它是由數(shù)值矩陣構成的
圖示的矩陣里,每個元素都是一個3維數(shù)組,分別代表這個像素上的三個通道的值。
最常見的RGB通道中,第一個元素就是紅色(Red)的值,第二個元素是綠色(Green)的值,第三個元素是藍色(Blue)。
對于RNG通道,其卷積表示為高度×寬度×通道數(shù),即H×W×C的表達方式。
在這個例子中,貓的圖像大小是寬248像素,高400像素,有3個顏色通道,分別是紅、綠和藍(簡稱RGB)。如此,該圖像就包含了248X400X3=297600個數(shù)字,每個數(shù)字都是在范圍0-255之間的整型,其中0表示全黑,255表示全白。
1.在計算機中圖像以三維數(shù)組的形式表達;
2.機器學習就是通過算法,使得機器能從大量歷史數(shù)據(jù)中學習規(guī)律,從而對新的樣本做智能識別或?qū)ξ磥碜鲱A測,機器學習算法的輸入可以是數(shù)組。
3.能否將這些數(shù)組放入機器學習算法中,通過比較數(shù)組的距離進行分類,最終通過機器學習算法實現(xiàn)圖像分類?
圖像與機器學習的關系
要使機器學習實現(xiàn)圖像分類,我們再回憶一下機器學習,即機器學習的一個核心目標是從過往經(jīng)驗數(shù)據(jù)中推導出規(guī)律,并將這種規(guī)律應用于新的數(shù)據(jù)中。
我們把機器從經(jīng)驗數(shù)據(jù)中推導并找到規(guī)律這一過程稱之為“訓練”,把將規(guī)律應用于新數(shù)據(jù)這一過程稱為“預測”,其中的規(guī)律我們稱為“模型”。
那么我們先從training image圖像訓練集合中發(fā)現(xiàn)一些規(guī)律和模型,然后將這些規(guī)律應用于新數(shù)據(jù)test image圖像,進行預測,從分類標簽集合中找出training image一個分類標簽,最后把分類標簽分配給該輸入圖像test image。
圖像分類的簡單實現(xiàn)
我們在進行線性分類前,先了解一下將會使用到的工具OpenCV
OpenCV是一個用于圖像處理、分析、機器視覺方面的開源函數(shù)庫
該庫包含了橫跨工業(yè)產(chǎn)品檢測、醫(yī)學圖像處理、安防、用戶界面、攝像頭標定、三維成像、機器視覺,該庫也包含了比較常用的一些機器學習算法
1.OpenCV的全稱是Open Source Computer Vision Library,是一個基于BSD許可(開源)發(fā)行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS操作系統(tǒng)上。它輕量級而且高效——由一系列 C 函數(shù)和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的接口,是一個用于圖像處理、分析、機器視覺方面的開源函數(shù)庫。
2.該庫不僅夸平臺,跨語言,還包含了橫跨工業(yè)產(chǎn)品檢測、醫(yī)學圖像處理、安防、用戶界面、攝像頭標定、三維成像、機器視覺,同時包含了比較常用的一些機器學習算法。
環(huán)境配置地址:
-
Anaconda:https://www.anaconda.com/download/
-
Python_whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
安裝和配置環(huán)境
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python==3.4.2.16
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python==3.4.2.16
第一個是Python的第三方庫:OpenCV提供的API,用于處理圖像相關的方法;第二個是用于圖像特征轉(zhuǎn)換的第三方庫,這兩個是配套使用的,如果我們在安裝這些第三方庫的時候直接使用:
pip install 庫名
那么它會默認按最新版安裝,但是由于特征提取算法在近些年有很多的算法包被申請了專利,并不是開源的,所以如果我們不指定版本直接按照默認版安裝,后續(xù)可能會出現(xiàn)報錯。
安裝好之后,我們不僅可以在jupyter notebook下使用,也可以在pycharm下使用這個方法,下面就開始進入圖像處理的知識。
cv2.imread(filepath,flags)
# filepath:要讀入圖片的完整路徑
# flags:讀入圖片的標志
# cv2.IMREAD_COLOR:默認參數(shù),讀入一副彩色圖片,忽略alpha通道
# cv2.IMREAD_GRAYSCALE:讀入灰度圖片
# cv2.IMREAD_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道
#python語言中的OpenCV庫的名稱是cv2,可以直接import,即;
import cv2
#使用函數(shù)cv2.imread()讀取圖片。第一個參數(shù)是文件路徑;第二個參數(shù)指定以什么方式讀取:
#cv2.IMREAD_COLOR(1):加載彩色圖片,這個是默認參數(shù)。
#cv2.IMREAD_GRAYSCALE(0):以灰度模式加載圖片。
#cv2.IMREAD_UNCHANGED(-1):包括alpha。
# Load input image -- 'table.jpg'
input_file = 'D:/ml/flower.jpg'
img = cv2.imread(input_file)
使用函數(shù)cv2.imread()讀取圖片,直接返回numpy.ndarray 對象,通道順序為BGR ,注意是BGR,通道值默認范圍0-255。
使用函數(shù)cv2.imshow() 顯示圖像。窗口會自動調(diào)整為圖像大小。第一個參數(shù)是窗口的名字,其次才是我們的圖像。你可以創(chuàng)建多個窗口,只要你喜歡,但是必須給他們不同的名字。
cv2.imshow('image',img1)
#也可以直接比較讀取到的兩張圖片的BGR差異:
print(img2-img))
CV.waitKey方法
# 使用函數(shù)cv2.imshow(wname,img)顯示圖像,第一個參數(shù)是顯示圖像的窗口的名字,第二個參數(shù)是要顯示的圖像(imread讀入的圖像),窗口大小自動調(diào)整為圖片大小
import cv2
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# cv2.waitKey顧名思義等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數(shù)看是否有鍵盤輸入,若在等待時間內(nèi)按下任意鍵則返回按鍵的ASCII碼,程序繼續(xù)運行。若沒有按下任何鍵,超時后返回-1。參數(shù)為0表示無限等待。不調(diào)用waitKey的話,窗口會一閃而逝,看不到顯示的圖片。
cv2.destroyAllWindow()#銷毀所有窗口
cv2.destroyWindow(wname)#銷毀指定窗口
圖像縮放
采用插值的思想!
#圖片縮放
height, width = img.shape[:2]
size = (int(width*0.3), int(height*0.5))
img= cv2.resize(img, size, interpolation=cv2.INTER_AREA)
cv2.imshow('img_shrink', img)
cv2.waitKey(0)
圖像混合
#圖像混合(需要圖片大小以及通道數(shù)一致)
img1 = cv2.imread('lena_small.jpg')
img2 = cv2.imread('opencv-logo-white.png')
res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
#第一個參數(shù)是圖像變量,第二個是該圖像的權重
src1, src2:需要融合相加的兩副大小和通道數(shù)相等的圖像 alpha:src1的權重 beta:src2的權重
gamma:gamma修正系數(shù),不需要修正設置為0
dst:可選參數(shù),輸出結(jié)果保存的變量,默認值為None,如果為非None,輸出圖像保存到dst對應實參中,其大小和通道數(shù)與輸入圖像相同,圖像的深度(即圖像像素的位數(shù))由dtype參數(shù)或輸入圖像確認
dtype:可選參數(shù),輸出圖像數(shù)組的深度,即圖像單個像素值的位數(shù)(如RGB用三個字節(jié)表示,則為24位),選默認值None表示與源圖像保持一致。
返回值:融合相加的結(jié)果圖像
CV.imwrite 保存圖像
使用函數(shù)cv2.imwrite(file,img,num)保存一個圖像
第一個參數(shù)是要保存的文件名,第二個參數(shù)是要保存的圖像??蛇x的第三個參數(shù),它針對特定的格式:對于JPEG,其表示的是圖像的質(zhì)量,用0 - 100的整數(shù)表示,默認95;對于png ,第三個參數(shù)表示的是壓縮級別。默認為3.
cv2.IMWRITE_JPEG_QUALITY類型為 long ,必須轉(zhuǎn)換成 int
cv2.IMWRITE_PNG_COMPRESSION, 從0到9 壓縮級別越高圖像越小文章來源:http://www.zghlxwxcb.cn/news/detail-725866.html
cv2.imwrite('./img/1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
CV2.flip
# 使用函數(shù)cv2.flip(img,flipcode)翻轉(zhuǎn)圖像,flipcode控制翻轉(zhuǎn)效果。
# flipcode = 0:沿x軸翻轉(zhuǎn)
# flipcode > 0:沿y軸翻轉(zhuǎn)
# flipcode < 0:x,y軸同時翻轉(zhuǎn)
import cv2
img = cv2.imread( 'flower.jpg')
imgflip = cv2.flip(img,1)
cv2.imshow(img)
cv2.waitKey(0)
每文一語
開啟新的生活!文章來源地址http://www.zghlxwxcb.cn/news/detail-725866.html
到了這里,關于機器學習之圖像處理——基本概念知識介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!