图像处理与分析 计算机视觉 医学图像
第一部分是圖像處理與分析,第一部分部分是計算機視覺,第三部分是醫(yī)學(xué)圖像.
文章目錄
- ?《第一部分》
- 一、第一次課
- 1.1 讀取bmp圖片
- 二、 第二次課
- 2. 1 dpi(dot per inch)計算
- 2.2 灰度直方圖(histogram)
- 2.2.1 定義
- 2.2.2 編程實現(xiàn)灰度直方圖
- 2.3 灰度變換(均衡化)
- 2.4 二值化
- 三、 第三次課
- 3.1 點運算
- 3.2 代數(shù)運算
- 3.2.1 加法運算
- 3.2.2 減法運算
- 3.3 幾何運算
- 3.3.1 實現(xiàn)幾何運算有兩種方法
- 3.3.2 仿射變換
- 3.3.3 透視變換(Perspective Transformation)
- 3.4 鄰域運算
- 四、圖像平滑
- 4.1 圖像噪聲
- 4.2 圖像平滑
- 五、邊緣檢測
- 六、圖像分割
- 七、物體測量與特征抽取
- 1.測量周長、面積
- 2.外接矩形
- 3.特征提取
- 八、圖像的頻域變換
- ?《第二部分》計算機視覺
- 計算機視覺課程內(nèi)容
- 10-25 梁棟老師代課內(nèi)容
- ?《第三部分》醫(yī)學(xué)圖像
- 醫(yī)學(xué)圖像來源
?《第一部分》
一、第一次課
1.1 讀取bmp圖片
參考
簡單bmp圖片處理工具——python實現(xiàn)
https://www.cnblogs.com/zyp4614/p/6917943.html
Python Struct讀取bmp圖片信息
https://blog.csdn.net/zoujin6649/article/details/81357696
Python中struct.pack()和struct.unpack()用法詳細說明
https://blog.csdn.net/weiwangchao_/article/details/80395941
Python版
from struct import unpackwith open('./bmp_19201080.bmp','rb') as f:s = f.read(30)print(unpack('<ccIIIIIIHH', s)) ''' (b'B', b'M', 6220854, 0, 54, 40, 1920, 1080, 1, 24) b'B、b'M說明是Windows位圖 一個4字節(jié)整數(shù):位圖大小 一個4字節(jié)整數(shù):保留位,始終為0 一個4字節(jié)整數(shù):實際圖像的偏移量 一個4字節(jié)整數(shù):Header的字節(jié)數(shù) 一個4字節(jié)整數(shù):圖像寬度 一個4字節(jié)整數(shù):圖像高度 一個2字節(jié)整數(shù):始終為1 一個2字節(jié)整數(shù):顏色數(shù) '''def bmp_info():unpackbuf = unpack('<ccIIIIIIHH',s)if (unpackbuf[0]!=b'B' or unpackbuf[1]!=b'M'):return Noneelse:return {'width':unpackbuf[6],'height':unpackbuf[7],'color':unpackbuf[9]} bi = bmp_info()print(bi['width'],'*',bi['height'],bi['color'])C版
#include "stdafx.h" #include "ImgAlg.h" #include <math.h> #include <stdio.h>//printf for linux #include <stdlib.h>//abs for linux #include <string.h>//memset for linux#define PI 3.141592653589 int Load8bitBmp(const char* FileName,BYTE* img,int& width,int& height) {FILE* fp=fopen(FileName,"rb");if(fp==NULL){Message("open file error"); return 0;}BITMAPFILEHEADER FileHeader;if( fread(&FileHeader,sizeof(BITMAPFILEHEADER),1,fp)!=1 ){Message("read file error"); return 0;}if( FileHeader.bfType != 0x4d42 ){Message("no bmp file format"); return 0;}BITMAPINFOHEADER InfoHeader;if( fread(&InfoHeader,sizeof(BITMAPINFOHEADER),1,fp)!=1 ){Message("read file error"); return 0;}if(InfoHeader.biBitCount != 8){Message("no 8 bit bmp file"); return 0;}if(InfoHeader.biCompression != 0){Message("compression mode"); return 0;}width = InfoHeader.biWidth ;height= InfoHeader.biHeight ;fseek(fp,FileHeader.bfOffBits ,SEEK_SET);for(int i=height-1;i>=0 ;i--){if( fread(img+i*width,width,1,fp)!= 1 ){Message("read file error"); return 0;} if(width%4!=0)fseek(fp,4-width%4,SEEK_CUR);}fclose(fp);return 1; }二、 第二次課
2. 1 dpi(dot per inch)計算
(1) dpi(dot per inch)計算
(2×\times× 1200 + 4 ×\times× 1200)×\times× 3
解釋:1200dpi意思是每英寸可采集1200個像素點,現(xiàn)在照片橫向2英寸,縱向4英寸,所以總共是(2×\times× 1200 + 4 ×\times× 1200), 然后24位彩色,1像素 = 3 bytes.
(2) 掃描完后 如果用600dpi打印出來,問打印出來的照片尺寸?(不縮放)
2400 / 600 = 4
4800 / 600 = 8
2.2 灰度直方圖(histogram)
2.2.1 定義
灰度直方圖(histogram)是灰度級的函數(shù),是圖象的最基本的統(tǒng)計特征。它表示圖象中有每種灰度級的象素的個數(shù),反映圖象中每種灰度出現(xiàn)的頻率。如下圖所示,
橫坐標:灰度-r , 縱坐標:為某一灰度值ri的像素個數(shù)ni,或是灰度出現(xiàn)的概率P( r)
從概率的觀點來理解,灰度出現(xiàn)的頻率可看作其出現(xiàn)的概率,這樣直方圖就對應(yīng)于概率密度函數(shù)pdf(probability density function),而概率分布函數(shù)就是直方圖的累積和,即概率密度函數(shù)的積分,如下圖所示:
2.2.2 編程實現(xiàn)灰度直方圖
方法一:逐個點掃描
unsigned long hist[256]; unsigned char *pCur; for(int i=0;i<256;i++) hist[i]=0;for(i=0;i<height;i++) for(j=0;j<width;j++)hist[pImg + i*width + j]++;方法二:效率高 (考試)
unsigned long hist[256]; unsigned char *pCur; for(int i=0;i<256;i++) hist[i]=0; int ImgSize=width*height; for(i=0,pCur=pImg;i<ImgSize;i++) hist[*(pCur++)]++;拓展參考
十一.灰度直方圖概念及OpenCV繪制直方圖
https://blog.csdn.net/eastmount/article/details/83758402
2.3 灰度變換(均衡化)
2.4 二值化
OpenCV—圖像二值化
https://www.cnblogs.com/ssyfj/p/9272615.html#%E4%B8%89opencv%E4%B8%AD%E7%9A%84%E4%BA%8C%E5%80%BC%E5%8C%96%E6%96%B9%E6%B3%95
python實現(xiàn)直方圖均衡化(HE)
https://blog.csdn.net/qq_30967115/article/details/85210870
三、 第三次課
3.1 點運算
由于點運算在處理與顯示中的重要性,圖象處理系統(tǒng)都有專門的處理硬件與之對應(yīng),以便能夠以視頻速率實時完成操作,這樣的部件稱為查找表LUT(LookUpTable)。通常圖象處理系統(tǒng)都有成組的查找表供編程使用
在通用的計算機上,沒有查找表可以直接利用,通過軟件逐點處理來實現(xiàn),這時查找表僅表現(xiàn)為一種數(shù)據(jù)結(jié)構(gòu)。因為在數(shù)字圖像處理中,自變量g的值域是有限的,比如通常的灰度圖像中,0<=g<=255,最多只有256種取值,因此,對于實現(xiàn)任意的G=F(g)而言,都可以使用查表的方法實現(xiàn)
方法一: 慢
要計算ImgSize次,當(dāng)圖像為512x512時,F要被計算262144次
方法二: 快 (考試)
BYTE LUT[256]; BYTE *pCur, for(g = 0;g < 256;g++) LUT[g ] = F(g);*pEnd = pImg + ImgSize; for(pCur = pImg; pCur < pEnd;pCur++) *(pCur++) = LUT[*pCur];在使用LUT時,F函數(shù)僅被計算256次。
3.2 代數(shù)運算
3.2.1 加法運算
圖象相加一般用于對同一場景的多幅圖象求平均,以便有效地降低加性(additive)隨機噪聲。通常圖象采集系統(tǒng)中采集圖象時有這樣的參數(shù)可供選擇。通常直接采集的圖象品質(zhì)較好,不需要這樣的處理,但是對于經(jīng)過長距離模擬通訊方式傳送的圖象(如太空航天器傳回的星際圖象)這種處理是不可缺少的。利用求平均的方法降低噪聲信號提高信噪比的做法,只有當(dāng)噪聲可以用同一個獨立分布的隨機模型描述時才會有效
3.2.2 減法運算
圖象相減是常用的圖象處理方法,用于檢測變化及運動物體。在可控制的條件下,如工業(yè)視覺環(huán)境下,這種稱之為差分方法的簡單處理與閾值化處理一道往往是建立機器視覺系統(tǒng)最有效的方法之一。在相對穩(wěn)定的環(huán)境下,可以假設(shè)背景變化緩慢,且符合一定的分布規(guī)律,通過建立背景模型,實施差分方法來檢測運動物體,可以獲得很好的效果。因此,差分方法可以分為控制環(huán)境下的簡單差分方法和基于背景模型的差分方法。
在控制環(huán)境下,或者在很短的時間間隔內(nèi),可以認為背景是固定不變的,可以直接使用差分方法檢測變化或直接分割出作為前景的物體。其流程圖如下:
作業(yè)
1.編制將兩個灰度圖象相減的程序,注意合理處理數(shù)值區(qū)間,以便顯示差圖象,例如取絕對值或適當(dāng)平移等(輸入輸出圖象格式bmp)。
2.編制將一灰度圖象與將其少許平移后得到的圖象相減的程序,觀察其效果。
3.3 幾何運算
幾何運算與點運算不同,它可改變圖象中物體(象素)之間的空間關(guān)系。這種運算可以看成將各象素在圖象內(nèi)移動的過程。其定義為:g(x,y)=f(x’,y’)=f[a(x,y),b(x,y)] ,其中,f(x,y)表示輸入圖象,g(x,y)表示輸出圖象,a(x,y)和b(x,y)表示空間變換,若它們是連續(xù)的,則將保持圖象中的連通關(guān)系。
3.3.1 實現(xiàn)幾何運算有兩種方法
- 其一為前向映射法,即:將輸入象素的灰度一個個地轉(zhuǎn)移到輸出圖象中,如果一個輸入象素被映射到四個輸出象素之間的位置,則其灰度值就按插值法在四個輸出象素之間進行分配;
- 其二為后向映射法(象素填充法),這時將輸出象素逐個地映射回輸入圖象中,若輸出象素被映射到四個輸入象素之間的位置,則其灰度由它們的插值來確定。在實際中,通常采用后向映射法。
圖像旋轉(zhuǎn)后,會出現(xiàn)許多空洞點,我們需要對這些空洞點必須進行填充處理,否則圖像旋轉(zhuǎn)后的效果不好,一般也稱這種操作為插值處理,最簡單的插值方法是最近鄰插值,即選擇離它所映射到的位置最近的輸入象素的灰度值為插值結(jié)果。復(fù)雜一點的方法是雙線性插值,如下圖所示:
3.3.2 仿射變換
其中 A 是變形矩陣,b是平移矢量。在2維空間,A可以按如下的四個步驟分解:尺度、伸縮、扭曲、旋轉(zhuǎn)
將一個點順時針旋轉(zhuǎn)a角,r為該點到原點的距離,在旋轉(zhuǎn)過程中,r保持不變;b為r與x軸之間的夾角。
旋轉(zhuǎn)前:x0=rcosb;y0=rsinb
旋轉(zhuǎn)a角度后:
x1 = rcos(b-a) = rcosbcosa + rsinbsina = x0cosa + y0sina;
y1 = rsin(b-a) = rsinbcosa - rcosbsina = -x0sina + y0cosa;
3.3.3 透視變換(Perspective Transformation)
透視變換是中心投影的射影變換,在用非齊次射影坐標表達時是平面的分式線性變換,具有如下的形式:
透視變換常用于圖象的校正,例如在移動機器人視覺導(dǎo)航研究中,由于攝象機與地面之間有一傾斜角,而不是直接垂直朝下(正投影),有時希望將圖象校正成正投影的形式,就需要利用透視變換。
下面看一個案例
在地面上取定一個矩形(不一定是正方形),要求它的邊平行或垂直于車體軸線,這樣的矩形在原始圖象中顯示為一個等腰梯形,如圖所示。
設(shè)A點的坐標為(x1,y1),C點坐標為(x2,y2),則B、D的坐標分別是(φ-x1,y1)和(φ-x2,y2)。經(jīng)過投影,ABCD四個點依此與規(guī)范化坐標系中的(0,0),(1,0),(0,1),(1,1)四個點相對應(yīng)。把此對應(yīng)關(guān)系代入上式,得
略
作業(yè)
1 完成圖像的雙線性差值旋轉(zhuǎn)的程序。
2 編制實現(xiàn)透視及仿射變換的程序,通過交互 輸入?yún)?shù)觀察效果。
3.4 鄰域運算
模板:模板就是一個矩陣(其實就是下面說的卷積核),也就是處理圖像這個過程對應(yīng)的函數(shù),對應(yīng)卷積運算。
卷積運算:可以看做加權(quán)求和的過程,為了圖像增強和減少噪聲,用該像素點的鄰域像素點進行加權(quán),得到處理完之后這個點的像素點(會把噪聲減弱,當(dāng)然也會有別的問題)。
卷積核:上面不是說了卷積運算了嘛,這個點的鄰域和哪個矩陣進行加權(quán)啊?換句話說,這個點的鄰域那么多像素點,這些像素點所占的權(quán)重是多少啊?這些權(quán)重構(gòu)成一個矩陣,這個矩陣就叫卷積核,卷積核的行數(shù)和列數(shù)都是奇數(shù)。
————————————————
版權(quán)聲明:本文為CSDN博主「lixin051435」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tsfx051435adsl/article/details/78305643
四、圖像平滑
4.1 圖像噪聲
圖像噪聲產(chǎn)生的原因很復(fù)雜,有的可能是數(shù)字信號在傳輸過程中發(fā)生了丟失或者受到干擾,有的是成像設(shè)備或者環(huán)境本身導(dǎo)致成像質(zhì)量不穩(wěn)定,反應(yīng)到圖像上就是圖像的亮度與顏色呈現(xiàn)某種程度的不一致性。
從噪聲的類型上,常見的圖像噪聲分為以下幾種:
- 高斯噪聲/符合高斯分布
一般會在數(shù)碼相機的圖像采集(acquisition)階段發(fā)生,這時它的物理、電、光等各種信號都可能導(dǎo)致產(chǎn)生高斯分布噪聲。 - 均勻分布噪聲(實際不常見,模擬常用)
均勻/規(guī)則噪聲一般都是因為某些規(guī)律性的錯誤導(dǎo)致的。 - 椒鹽噪聲(脈沖噪聲) 黑白的點
是一種隨機在圖像中出現(xiàn)的稀疏分布的黑白像素點, 對椒鹽噪聲一種有效的去噪手段就是圖像中值濾波。
————————————————
版權(quán)聲明:本文為CSDN博主「kingkee」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/kingkee/article/details/93617051
4.2 圖像平滑
圖像平滑從信號處理的角度看就是去除其中的高頻信息,保留低頻信息。因此我們可以對圖像實施低通濾波。低通濾波可以去除圖像中的噪音,模糊圖像(噪音是圖像中變化比較大的區(qū)域,也就是高頻信息)。而高通濾波能夠提取圖像的邊緣(邊緣也是高頻信息集中的區(qū)域)。
根據(jù)濾波器的不同又可以分為均值濾波,高斯加權(quán)濾波,中值濾波, 雙邊濾波。
( 參考 【數(shù)字圖像處理】 圖像平滑 )
▲ 圖像處理的幾種濾波(含核的解釋)
五、邊緣檢測
邊緣是指其周圍象素的灰度有階躍變化(step edge)或屋頂狀變化(roof edge)的象素、常存在于目標與背景之間、目標與目標之間、目標與其影子之間。
分析手段:因為灰度的變化,可以反映為導(dǎo)數(shù);因此,根據(jù)邊緣的形狀,可以通過求導(dǎo)的方法來尋求邊緣。邊緣的參數(shù)包括:邊緣強度(edge intensity)和邊緣方向(edge direction)。
下面具體展開:
- Roberts算子
定義為:G(i ,j)=|f(i,j)-f(i+1,j+1)|+|f(i+1,j)-f(i,j+1)|
- Prewitt算子
- Sobel算子
(濾波和邊緣檢測可以結(jié)合起來)
然后去讀這篇博客:
▲ 徹底理解數(shù)字圖像處理中的卷積-以Sobel算子為例
▲ 卷積計算動圖
六、圖像分割
圖象分割是將圖象劃分為若干互不相交的小區(qū)域的過程。小區(qū)域是某種意義下具有共同屬性的象素的連通集合,如物體所占的圖象區(qū)域、天空區(qū)域、草地等。
圖像分割的目的:
- 圖像分割使得畫面場景被分為“目標物”及“非目標物”兩類,即將圖像的像素變換為黑、白兩種。
- 因為結(jié)果圖像為二值圖像,所以通常又稱圖像分割為圖像的二值化處理。
閾值是在分割時作為區(qū)分物體與背景象素的門限,大于或等于閾值的象素屬于物體,而其它屬于背景。這種方法對于在物體與背景之間存在明顯差別(對比)的景物分割十分有效。實際上,在任何實際應(yīng)用的圖象處理系統(tǒng)中,都要用到閾值化技術(shù)。為了有效地分割物體與背景,人們發(fā)展了各種各樣的閾值處理技術(shù),包括全局閾值、自適應(yīng)閾值、最佳閾值等等。
-
p率閾值化
一般用于灰度圖像,使用條件是已知目標在政府圖像中所占的面積比為P%(需要先驗知識),先得到圖像的灰度直方圖,然后從小到大累加,直到為P%,記錄當(dāng)前灰度,以它為閾值來分割圖像。條件很苛刻,大部分情況下都用不上。 -
基于類間方差的閾值分割法
-
基于熵的閾值選取(Entropy)
-
循環(huán)迭代策略得到閾值
七、物體測量與特征抽取
1.測量周長、面積
在物體從圖象中分割出來后,進一步就可以對它的幾何特征進行測量和分析,在此基礎(chǔ)上可以識別物體,也可以對物體分類,或?qū)ξ矬w是否符合標準進行判別,實現(xiàn)質(zhì)量監(jiān)控。與圖象分割一道,物體測量與形狀分析在工業(yè)生產(chǎn)中有重要的應(yīng)用,它們是機器視覺的主要內(nèi)容之一。例如,能將馬鈴薯或蘋果等農(nóng)產(chǎn)品按品質(zhì)自動分類的機器視覺系統(tǒng),自動計算不規(guī)則形狀所包含面積的測量系統(tǒng),將傳送帶上不同工件自動分類的視覺系統(tǒng),等等。
- 周長
其中,nθn_{\theta}nθ? 是鏈中具有奇數(shù)值的鏈碼的個數(shù),n0n_{0}n0?是鏈中具有偶數(shù)值的鏈碼的個數(shù)。 - 面積
A=x2y1-1/2x1y2-1/2x2y2-1/2(x2-x1)(y2-y1)=1/2(x1y2-x2y1)
2.外接矩形
當(dāng)物體從圖象中分割出來以后,形狀描述特征與尺寸測量結(jié)合起來可以作為區(qū)分不同物體的依據(jù),在機器視覺系統(tǒng)中起著十分重要的作用。
①長度和寬度
在已知物體的邊界時,用其外接矩形的尺寸來刻畫它的基本形狀是最簡單的方法。如果僅計算其在坐標系方向上的外接矩形是很簡單的,只需計算物體邊界點的最大和最小坐標值,就可得到物體的水平和垂直跨度。但通常需要計算反映物體形狀特征的主軸方向上的長度和與之垂直方向上的寬度,這樣的外接矩形是物體最小的外接矩形(MER-Minimum Enclosing Rectangle)。
計算MER的一種方法是將物體在90度范圍內(nèi)等間隔地旋轉(zhuǎn),每次記錄其坐標系方向上的外接矩形參數(shù),取其面積為最小的矩形的參數(shù)為主軸意義下的長度和寬度。通常主軸可以通過矩(moments)的計算得到,也可以用求物體的最佳擬合直線的方法求出。
② 矩形度
矩形度用物體的面積與其最小外界矩形的面積之比來刻畫,反映物體對其外接矩形的充滿程度:
此外,另一個與形狀有關(guān)的特征是長寬比 它可以將細長的物體與方形或圓形的物體區(qū)別開來。
③ 圓形度
圓形度用來刻畫物體邊界的復(fù)雜程度,它們在圓形邊界時取最小值。最常用的圓形度是周長的平方與面積的比
④ 不變矩
矩的定義:對于二元有界函數(shù)f(x,y),它的(j+k)階矩是:
3.特征提取
如何尋找右圖中玩具車的位置
這就需要用到 <尺度不變特征變換匹配算法 Scale Invariant Feature Transform>
90年代British Columbia大學(xué)大衛(wèi).勞伊(David G.Lowe)教授總結(jié)了現(xiàn)有的基于不變量技術(shù)的特征檢測方法,并正式提出了一種基于尺度空間的、對圖像縮放、旋轉(zhuǎn)甚至仿射變換保持不變性的圖像局部特征描述算子-SIFT(尺度不變特征變換),這種算法在2004年被加以完善。
SIFT算法可以解決的問題
目標的自身狀態(tài)、場景所處的環(huán)境和成像器材的成像特性等因素影響圖像配準/目標識別跟蹤的性能。而SIFT算法在一定程度上可解決:
- 目標的旋轉(zhuǎn)、縮放、平移(RST)
- 圖像仿射/投影變換(視點viewpoint)
- 光照影響(illumination)
- 目標遮擋(occlusion)
- 雜物場景(clutter)
- 噪聲
SIFT算法的實質(zhì)可以歸為在不同尺度空間上查找特征點(關(guān)鍵點)的問題。
SIFT算法實現(xiàn)物體識別主要有三大工序,1、提取關(guān)鍵點;2、對關(guān)鍵點附加詳細的信息(局部特征)也就是所謂的描述器;3、通過兩方特征點(附帶上特征向量的關(guān)鍵點)的兩兩比較找出相互匹配的若干對特征點
另參考 https://www.bilibili.com/video/av42629442
八、圖像的頻域變換
傅里葉變換, 看中國大學(xué)MOOC
https://www.icourse163.org/learn/WHUT-1003535158
?《第二部分》計算機視覺
2019-10-14 開始上計算機視覺
孫涵老師主頁 http://www.sunnyimgtech.com/
計算機視覺課程內(nèi)容
計算機視覺發(fā)展史,MarT視覺理論
人眼成像原理
紋理、顏色和光源
攝像機參數(shù)與模型,攝像機標定
雙目視覺與立體觀測
運動目標檢測與跟蹤
計算機視覺典型應(yīng)用
10-25 梁棟老師代課內(nèi)容
1.華為P30拍月亮是如何實現(xiàn)的
2.手機單鏡頭人臉識別是如何實現(xiàn)的?為何照片無法欺騙鏡頭
擴展:單鏡頭、多鏡頭的功能
3.合成孔徑
4.景深
了解景深 這一篇就夠了
https://zhuanlan.zhihu.com/p/55740729
光圈越大,景深越淺
光圈越小,景深越大
?《第三部分》醫(yī)學(xué)圖像
醫(yī)學(xué)圖像來源
X光
CT
Pet-CT
核磁共振 MRI
超聲波(B超)
總結(jié)
以上是生活随笔為你收集整理的图像处理与分析 计算机视觉 医学图像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10 安装 Pytorch
- 下一篇: Java二手车交易系统