寫在前面
HIT大三上學期視聽覺信號處理課程中視覺部分的實驗一,經過和學長們實驗的對比發現每一級實驗要求都不一樣,因此這里標明了是2019年秋季學期的視覺實驗一。
由於時間緊張,代碼沒有進行任何優化,實驗算法僅供參考。
實驗要求
- 實現給圖像添加高斯噪聲和椒鹽噪聲 ,要求顯示添加噪聲之后的結果圖。
- 實現圖像的空域濾波:中值濾波和均值濾波算法,並選取適合的方法對1中的圖像進行平滑處理,要求顯示處理之后的結果。
- 實現圖像的邊緣檢測:Roberts算子和Sobel算子。
- 選做:實現對BMP文件頭的讀取,並解析BMP圖像文件。 PS:圖像單通道形式讀取
實驗代碼
代碼首先貼在這里,僅供參考
知識總結
這一部分總結實驗過程中查詢的博客,介紹完成本實驗所需的知識,並對其記錄以便之后復習。
首先需要實現一個對bmp文件讀取的程序,這里首先需要了解bmp圖像的格式
BMP文件格式詳解(BMP file format)
這里我使用的文件讀取方式是pack
和unpack
python中struct.pack()函數和struct.unpack()函數
Python使用struct處理二進制(pack和unpack用法)
bmp文件讀取程序中,如何保存讀出的圖像數據自己決定,但最好使用numpy庫將其保存為數組,方便后續進行各種處理。(這里我選擇將其按像素點儲存為一維數組,理解上較為簡單,但后續算法實現需要算一下下標,導致程序不是很簡潔。)
接下來進行的各種操作都是在灰度圖上進行的,因此首先需要將bmp圖像數據轉化成灰度圖像數據
圖像處理:圖像灰度化
之后是實現高斯噪聲和椒鹽噪聲
高斯噪聲和椒鹽噪聲的python程序實現
均值濾波和中值濾波
圖像處理:中值濾波&均值濾波
Roberts算子和Sobel算子
灰度圖像--圖像增強 Robert算子、Sobel算子
實驗總結
很簡單的一個實驗,總時間加起來大致6個小時左右(后面幾個算法程序結構都是完全一樣的,看懂算法原理直接替換核心代碼就可以了。