python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...
數字圖像處理與Python實現筆記之基礎知識
摘要
緒論
1 數字圖像處理基礎知識
1.1 數字圖像簡介
1.1.1 數字圖像處理的目的
1.1.2 數字圖像處理的應用
1.1.3 數字圖像處理的特點
1.1.4 常見的數字圖像處理方法
1.2 圖像采集和量化
1.2.1 圖像采樣
1.2.2 圖像量化
1.3 圖像的表示和可視化
1.3.1 圖像的表示
1.3.2 圖像的格式
1.3.3 圖像的基本屬性
1.3.4 圖像可視化模塊
1.4 像素間的關系
1.5 簡單圖像處理
1.5.1 圖像基本屬性的操作
1.5.2 圖像的簡單運算
1.5.3 圖像卷積操作
1.6 小結
摘要
簡要介紹數字圖像處理涉及的一些基本概念、基本運算、基本類型,以及如何通過Python對數字圖像進行讀取和簡單操作。
以彩色圖像為例對數字圖像處理的基本操作進行介紹,熟悉數字圖像處理的基本過程,主要包括顏色空間的基本概念、偽彩色圖像處理操作,彩色圖像處理簡單操作。
瞄準在空間域中對圖像進行增強,介紹空間濾波的機理、基本概念以及使用的基本技術。本章內容包括空間濾波基本概念、基于空間濾波的圖像平滑處理、基于空間濾波的銳化操作以及混合空間增強。
從頻域角度入手對圖像處理及增強方法展開介紹。因為頻域濾波所需的數學知識較多,所以本章采取由淺入深的策略,首先介紹一維傅里葉變換,其次介紹二維傅里葉變換和快速傅里葉變換,最后介紹圖像頻域濾波中出現的各種技術,其大體可分為低通濾波和高通濾波兩大類。
從全局特征提取和局部特征提取兩方面入手,分別介紹顏色特征、紋理特征、形狀特征、邊緣特征、點特征的提取方法。本章內容是目前機器視覺和圖像處理領域的學者關注較多的內容,通過穿插較多的實例,幫助讀者理解圖像特征提取的基本技術。
瞄準如何減少圖像傳輸及存儲數據大小,介紹主要使用的壓縮技術,包括有損壓縮和無損壓縮等,并使用JPEG壓縮技術串講全章知識點。
介紹圖像的小波域表示及多分辨率表示。
緒論
人工智能是引領未來發展的戰略性技術,是新一輪科技革命和產業變革的重要驅動力量,將深刻地改變人類社會生活。
促進人工智能和實體經濟的深度融合,構建數據驅動、人機協同、跨界融合、共創分享的智能經濟形態,更是推動質量變革、效率變革、動力變革的重要途經。
進年來,我國人工智能新技術、新產品、新業態持續涌現,與農業、制造業、服務業等行業的融合步伐明顯加快,在技術創新、應用推廣、產業發展等方面成效初顯。
人工智能技術并不是一個新生事物,它在最近幾年引起全球性關注并得到飛速發展的主要原因,在于它的三個基本要素(算法、數據、算力)的迅猛發展,其中又以數據和算力的發展尤為重要。
物聯網技術的蓬勃發展使得數據累計的難度越來越低,而芯片算力的不斷提升,使得過去只能通過云計算才能完成的人工智能運算,現在可以下沉到最普通的設備上完成。
物聯網技術為機器帶來感知能力,而人工智能則通過計算算力為機器帶來了決策能力,正如感知和大腦對自然生命進化所起到的必然性作用。
1 數字圖像處理基礎知識
本章介紹數字圖像的一些基礎知識和基本概念,包括數字圖像處理基本原理及常見方法、圖像的采樣和量化、圖像的表示和可視化、圖像中像素間的關系、黑白圖像以及灰度圖像。
圖像處理是指對圖像進行一系列操作,旨在優化圖像或從圖像中抽取某種有用信息。
圖像處理是信號處理的一種,其輸入為一幅圖像,輸出是優化后的圖像或抽取出的圖像特征。
按照圖像信號類型的不同,圖像處理可以分為數字圖像處理和模擬圖像處理兩種類型。
模擬圖像處理是指在模擬介質(如膠片)中通過模擬成像器件(如相機鏡頭)對連續模擬信號進行處理。
數字圖像處理是指以離散數字圖像信號為處理對象,通過計算機對圖像進行處理,以便更好的從圖像中獲取信息。
1.1 數字圖像簡介
圖是客觀世界物體反射或投射光的分布,是客觀世界的反映。像是人類視覺系統對圖的響應,是人的大腦對圖的印象或認識,是人的一種感覺。
圖像(image)是圖和像的有機結合,既反映物體的客觀存在,又體現人的感知因素。圖像處理旨在針對特定任務,提升圖像的可理解性。
1.1.1 數字圖像處理的目的
數字圖像處理是指借助計算機強大的運算能力,運用去噪、特征提取、增強等技術,對數字形式存儲的圖像進行加工、處理。
提升圖像的視覺感知質量。抑制圖像中某些成分的表現力,提升圖像中特定成分的表現力,改善圖像視覺感知效果。
提取圖像中感興趣區域或特征。作為圖像分類、分割、語義標注等的依據,為圖像分析提供便利。
方便圖像的存儲和傳輸。為了減少圖像的存儲空間,降低圖像在網絡傳輸中的耗時,可首先使用各類編碼方法對圖像進行編碼,然后使用JPEG、BMP等壓縮標準對圖像進行壓縮。
1.1.2 數字圖像處理的應用
遙感分析技術的廣泛應用圖像。
基于數字圖像識別的身份認證系統。
美圖軟件。通過物體識別、高斯模糊等簡單圖像處理方法實現了快速美化。
光學字符識別。首先利用圖像分割得到單個字符圖像,其次通過特征提取得到單個字符特征,最后經過圖像識別算法提取圖像中的文本內容,形成文本文檔。
1.1.3 數字圖像處理的特點
可再現能力強。數字圖像存儲的基本單元是由離散數值構成的像素,其一旦形成不容易受存儲、傳輸、復制過程干擾。
處理精度高。現代數字圖像獲取技術可以將每個像素基元的灰度級量化到32位甚至更多位數,可以保證數字圖像在顏色細節上滿足真實圖像顏色分辨率的要求。
適用范圍廣。不論尺度大小、來源各異,在進行數字圖像處理時,均會被轉化為由二維數組編碼的圖像形式。
靈活性高。線性運算與非線性運算,點運算與局部區域運算,空間域與頻域轉換。
1.1.4 常見的數字圖像處理方法
數字圖像處理的一般步驟:圖像信息的獲取、存儲、處理、傳輸、展示。
常見數字圖像處理方法:圖像的數字化、編碼、增強、恢復、變換、壓縮、存儲、傳輸、分析、識別、分割、描述、分類。
圖像分割的主要目的是將圖像分解為若干有意義的部分。圖像分割技術可以作為圖像識別、分析、理解的基礎。在圖像分割的基礎上,形成圖像的區域、邊緣特征描述,借助模式識別相關技術,完成圖像的語義分析和理解。
圖像分類(識別)是模式識別領域的重要技術之一,其主要目的是對圖像的類型進行判別或者對圖像中出現的物體進行檢測和識別。圖像分類的一般步驟:進行圖像特征提取和描述、使用模式識別技術進行分類器或檢測器的訓練、對目標圖像進行分類和識別。
1.2 圖像采集和量化
圖像的數字化是將連續的模擬圖像轉換為計算機可處理的離散數字圖像的過程,包括采樣和量化。
采樣是圖像空間坐標的離散化,決定了圖像的空間分辨率,是對原始圖像信號的一種數字化逼近。
量化是圖像響應幅值的離散化,決定了圖像的灰度分辨率。
1.2.1 圖像采樣
圖像采樣是將一幅在空間上連續分布的模擬圖像成M*N的網格,每個網格稱為一個像素,M*N稱為圖像的空間分辨率。
使用求均值方法進行圖像模擬采樣的代碼如下。
# coding=utf-8
# 導入所需要的包
from skimage import data
from matplotlib import pylot as plt
import numpy as np
image = data.coffee() # 載入測試圖像
print(image.shape) # 顯示圖像原始大小
print(type(image)) # 顯示圖像類型
ratio = 20 # 設置采樣比率
# 設置采樣后的圖片大小
image1 = np.zeros((int(image.shape[0] / ratio), int(image.shape[1] / ratio), image.shape[2]), dtype='int32')
# 對圖像進遍歷
for i in range(image1.shape[0]):
for j in range(image1.shape[1]):
for k in range(image1.shape[2]):
delta = image[i * ratio:(i + 1) * ratio, j * ratio:(j + 1) * ratio, k] # 獲取需要采樣的圖像塊
image1[i, j, k] = np.mean(delta) # 計算均值,并存入結果圖像
plt.imshow(image1)
plt.show() # 打印采樣后的圖像
顯示圖像原始大小和圖片類型
使用求均值方法對圖像進行采樣
1.2.2 圖像量化
模擬圖像經過采樣后,在空間上實現了離散化,并形成像素,但采樣所得的像素值(即灰度值)依舊是連續量。
采樣后所得的各像素的灰度值從連續量到離散量的轉換稱為圖像灰度的量化。
圖像的像素值(響應值)I(x,y)的數字化被稱為圖像的量化,即將圖像響應值I(x,y)從Imax到Imin的實數域映射為有限級別的離散值。
圖像量化的部分模擬的Python代碼如下。
# coding=utf-8
from skimage import data
from matplotlib import pyplot as plt
image = data.coffee() # 載入測試圖像
radio = 128 # 設置量化比率
for i in range(image.shape[0]):
for j in range(image.shape[1]):
for k in range(image.shape[2]):
# 對圖像中每個像素進行量化
image[i][j][k] = int(image[i][j][k] / radio) * radio
plt.imshow(image) # 打印采樣后的圖像
plt.show()
圖像的量化比率決定了圖像的顏色精細程度。
將256級灰度的彩色圖像量化到僅有2級的灰度圖像
將256級灰度的彩色圖像量化到僅有4級的灰度圖像
1.3 圖像的表示和可視化
經過采樣和量化之后,圖像已經成為空間位置和響應值均離散的數字圖像。
1.3.1 圖像的表示
通過采樣和量化,原本連續的圖像I=(x,y)轉換為一個二維陣列f(x,y),該陣列具有M行N列,其中(x,y)是離散坐標。
一般地,直接使用二維矩陣A表示量化后的圖像更方便。二維矩陣是表示數字圖像的重要方式,矩陣中每個元素稱為圖像的像素,每個像素都有它自己的空間位置和值,值是這一位置像素的顏色或者強度。
圖像分辨率是指組成一幅圖像的像素密度。對同樣大小的一幅圖,組成該圖的圖像像素數目越多,說明圖像的分辨率越高,看起來越逼真。
圖像分辨率包括空間分辨率和灰度級(響應幅度)分辨率。空間分辨率是圖像中可辯別的最小空間細節,取樣值對少是決定圖像空間分辨率的主要參數。灰度級分辨率是指灰度級別中可分辨的最小變化。灰度級數通常是2的整數次冪。
按照圖像矩陣包含元素的不同,大概可以分為二值圖像、灰度圖像、彩色圖像。
文件內圖像的表示一般分為矢量表示和柵格表示。
矢量表示中,圖像用一系列線段或線段的組合體表示。矢量圖像類似程序文件,里面有一系列命令和數據,執行這些命令可根據數據畫出圖案,常用的工程繪圖軟件有AutoCAD、Visio等。
柵格圖像又稱位圖圖像或像素圖像,使用矩陣或離散的像素點表示圖像,放大后會出現方塊效應。
1.3.2 圖像的格式
圖像數據文件的格式有很多,不同的系統平臺和軟件常使用不同的圖像格式。
常用的圖像數據文件格式有BMP圖像格式、JPEG圖像格式、GIF圖像格式等。
1.3.3 圖像的基本屬性
圖像像素數量。圖像像素數量是指在位圖圖像的水平和垂直方向上包含的像素數量。
圖像分辨率。圖像在單位打印長度上分布的像素數量,主要用以表征數字圖像信息的密度,決定了圖像的清晰程度。在單位大小面積上,圖像的分辨率越高,包含的像素點的數量越多,像素點越密集,數字圖像的清晰度也就越高。
圖像大小。決定存儲圖像文件所需的存儲空間,字節數(單位B)=(位圖高 * 位圖寬 * 圖像深度)/ 8.
圖像顏色。指數字圖像中具有的最多數量的可能顏色種類,通過改變紅、綠、藍三原色的比例,可以非常容易地混合成任意一種顏色。
圖像深度。又稱圖像的位深,是指圖像中每個像素點所占的位數。數據深度越深,所需位數越多,對應的顏色表示也就越豐富。
圖像色調。指各種圖像顏色對應原色的明暗程度。
圖像飽和度。表明了圖像中顏色的純度。一般用純色中混入白光的比例衡量飽和度,純色中混入的白光越多,飽和度越低。
圖像亮度。指數字圖像中包含色彩的明暗程度,是人眼對物體本身明暗程度的感覺。
圖像對比度。圖像中不同顏色的對比或者明暗程度的對比。對比度越大,顏色之間的亮度差異越大或者黑白差異越大。
圖像層次。在計算機設計系統中,為了更加便捷有效的處理圖像素材,通常將他們置于不同的層中,而圖像可看作由若干層圖像疊加而成。
1.3.4 圖像可視化模塊
使用python3.7和skimage工具包對圖像可視化。與OpenCV相比,skimage更容易安裝和使用,對像素的操作和圖像整體的操作更符合科學計算要求。
io 讀取、保存和顯示圖片或視頻
data 提供一些測試圖片和樣本數據
color 顏色空間變換
filters 圖像增強、邊緣檢測、排序濾波器、自動閾值等濾波器操作
draw 操作于numpy數組上的基本圖形繪制,包括線條、矩形、圓和文本等。
transform 幾何變換或其他變換,如旋轉、拉伸等
morphology 形態學操作,如開閉運算、骨架提取等
exposure 圖片強度調整,如亮度調整、直方圖均衡等
feature 特征檢測與提取等模塊
measure 圖形屬性的測量,如相似性或等高線
segmentation 圖像分割
restoration 圖像恢復
util 通用工具函數
1.4 像素間的關系
像素間的關系主要對像素與像素之間的關聯進行描述,基本關系包括像素間的領域關系、連通性、像素之間的距離。
領域關系。用于描述相鄰像素之間的相鄰關系,包括4鄰域和D鄰域。
連通性。描述區域和邊界的重要概念。兩個像素連通的必要條件是:兩個像素的位置滿足相鄰關系且兩個像素的灰度值滿足特定的相似性準則。
像素之間的距離。常用的像素間距離度量包括歐式距離、D4距離(城市距離)及D8距離(棋盤距離)。
1.5 簡單圖像處理
數字圖像的本質是一個多維矩陣。數字圖像處理的本質是對多維矩陣的操作。
按照處理對象的不同,可將數字圖像處理分為黑白圖像處理、灰度圖像處理、彩色圖像處理。
按照處理方法進行劃分,可將數字圖像處理分為空間于處理與頻域處理。
按照處理策略不同,數字圖像處理可分為全局處理和局部處理。
1.5.1 圖像基本屬性的操作
亮度操作。亮度也稱灰度,是顏色的明暗變化范圍,常用0% ~ 100%(由黑到白)表示。通過常見的線性運算即可完成亮度調節,如所有像素點亮度值乘以或者加一個增強系數,使得圖像整體變亮或者變暗。
對比度操作。即圖像暗和亮的落差值,即圖像最大灰度級和最小灰度級之間的差值。a=1時是原圖;a>1時對比度增強,圖像看起來更加清晰。a<1時對比度減弱,圖像看起來變暗。
# 針對彩色圖像進行操作
import numpy as np
# 改變對比度函數
def change_alpha(im, a):
im_changed = np.zeros(shape=im.shape, dtype='uint8')
for i in range(im.shape[0]):
for j in range(im.shape[1]):
for k in range(im.shape[2]):
if im[i, j, k] * a > 255:
im_changed[i, j, k] = 255
elif im[i, j, k] < 0:
im_changed[i, j, k] = 0
else:
im_changed[i, j, k] = im[i, j, k] * a
return im_changed
a=1時是原圖
a>1時對比度增強,圖像看起來更加清晰
a<1時對比度減弱,圖像看起來變暗
顏色通道操作。數字圖像的本質是一個多維矩陣,如彩色圖像是一個三維矩陣,灰度圖像和黑白圖像由二維矩陣表示。彩色圖像一般分為紅、綠、藍3個顏色通道,每個顏色通道對應一個完整的二維矩陣。對圖像3個顏色通道進行分離的代碼如下。
# coding=utf-8
from skimage import data, io
from matplotlib import pyplot as plt
# 讀入圖像
image = data.coffee()
# 分別取出紅、綠、藍三個顏色通道
image_r = image[:, :, 0]
image_g = image[:, :, 1]
image_b = image[:, :, 2]
# 分別顯示3個通道
plt.subplot(2, 2, 1)
io.imshow(image)
plt.subplot(2, 2, 2)
io.imshow(image_r)
plt.subplot(2, 2, 3)
io.imshow(image_g)
plt.subplot(2, 2, 4)
io.imshow(image_b)
plt.show()
1.5.2 圖像的簡單運算
圖像運算是以圖像為單位,對圖像進行的數學操作,是數字圖像信號處理的基礎,運算對象以像素點為基本單位,運算結果為一幅灰度分布與原圖像不同的新圖像。
算術運算和邏輯運算。每次只涉及一個空間像素的位置,所以可以“原地”操作,即從原存放輸入圖像的空間直接得到輸出圖像。兩幅灰度圖像的加減法示例代碼如下。
# coding=utf-8
from matplotlib.font_manager import FontProperties
font_set = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=12)
from skimage import data
from matplotlib import pyplot as plt
moon = data.moon()
camera = data.camera()
image_minus = moon - camera
image_plus = moon + camera
plt.set_cmap(cmap='gray')
plt.subplot(2, 2, 1)
plt.title('月亮圖像', fontproperties=font_set)
plt.imshow(moon)
plt.subplot(2, 2, 2)
plt.title('攝影師圖像', fontproperties=font_set)
plt.imshow(camera)
plt.subplot(2, 2, 3)
plt.title('月亮加攝影師圖像', fontproperties=font_set)
plt.imshow(image_plus)
plt.subplot(2, 2, 4)
plt.title('月亮減攝影師圖像', fontproperties=font_set)
plt.imshow(image_minus)
plt.show()
點運算。點運算只涉及一幅圖像(稱為輸入圖像),運算對象是輸入圖像像素的灰度值,即輸出圖像每個像素的灰度值僅取決于輸入圖像中對應像素的灰度值。
點運算有兩個特點:其一,根據某種預先設置的規則,將輸入圖像各個像素本身的灰度逐一轉換成輸出圖像對應像素的灰度值。其二,點運算不會改變像素的空間位置。因此,點運算也稱為灰度變換。
點運算可以分為線性點運算和非線性點運算。線性點運算的原值和目標值通過線性方程完成轉換,典型的線性點運算如對比度灰度調整、圖像反色等。非線性點運算對應非線性映射函數,典型的映射函數包括平方函數、對數函數、窗口函數(截取)、閾值函數、多值量化函數等。灰度冪次變換、灰度對數變換、閾值化處理、直方圖均衡化是較常見的非線性點運算方法。
skimage的exposure模塊中包含冪次變換的函數adjust_gamma,可以對圖像進行冪次變換。冪次變換為非線性變換,圖像中某些部分可以通過冪次變換凸顯出來。
# coding=utf-8
from skimage import data, io, exposure
from matplotlib import pyplot as plt
# 讀入圖像
image = data.coffee()
# 分別計算gamma=0.2,0.67,25時的圖像
image_1 = exposure.adjust_gamma(image, 0.2)
image_2 = exposure.adjust_gamma(image, 0.67)
image_3 = exposure.adjust_gamma(image, 25)
# 分別展示原圖和結果圖像
plt.subplot(2, 2, 1)
plt.title('gamma=1')
io.imshow(image)
plt.subplot(2, 2, 2)
plt.title('gamma=0.2')
io.imshow(image_1)
plt.subplot(2, 2, 3)
plt.title('gamma=0.67')
io.imshow(image_2)
plt.subplot(2, 2, 4)
plt.title('gamma=25')
io.imshow(image_3)
plt.show()
圖像直方圖。描述了該圖像中關于顏色的數量特征,可以反映顏色的統計分布和基本色調。顏色直方圖可以分為三類:全局直方圖、累加直方圖、主色調直方圖。如下代碼給出了使用skimage的exposure的histogram()函數計算直方圖的方法。
# coding=utf-8
from skimage import data, exposure
# 讀入圖像
image = data.coffee()
# 計算直方圖
hist_r = exposure.histogram(image[:, :, 0], nbins=256)
hist_g = exposure.histogram(image[:, :, 1], nbins=256)
hist_b = exposure.histogram(image[:, :, 2], nbins=256)
直方圖均衡化是通過使用累積函數對灰度值進行調整,以實現對比度增強。直方圖均衡化處理的中心思想是把原始圖像的灰度直方圖從比較集中的某個灰度區間變成在全部灰度范圍內的均勻分布。
直方圖均衡化就是對圖像進行非線性拉伸,重新分配圖像像素值,使一定灰度范圍內的像素數量大致相同。直方圖的主要作用是將灰度間隔小的圖像的灰度間隔擴大,以便觀察圖像。直方圖均衡化的代碼如下。
# coding=utf-8
from skimage import data, exposure
from matplotlib.pyplot as plt
# 讀入圖像
img = data.moon()
plt.figure('hist', figsize=(8, 8))
arr = img.flatten()
plt.subplot(2, 2, 1)
plt.imshow(img, plt.cm.gray) # 原始圖像
plt.subplot(2, 2, 2)
plt.hist(arr, bins=256, normed=1, edgecolor='None', facecolor='red') # 原始圖像直方圖
img1 = exposure.equalize_hist(img)
arr1 = img1.flatten()
plt.subplot(2, 2, 3)
plt.imshow(img1, plt.cm.gray) # 均衡化
plt.subplot(2, 2, 4)
plt.hist(arr1, bins=256, normed=1, edgecolor='None', facecolor='red') # 均衡化直方圖
1.5.3 圖像卷積操作
圖像卷積操作是圖像空間域濾波的基礎運算,也是當前深度特征提取算法的基礎。卷積操作就是循環將圖像和卷積核逐個元素相乘再求和,結果得到卷積后圖像的過程。
卷積操作中,卷積核在原始圖像上做從上到下、從左到右的滑動掃描,每次掃描使用卷積核與其掃描覆蓋區域圖像做一次卷積運算,然后再移動到下一個位置進行下一次掃描。
大部分Python圖像處理相關包均將卷積函數集成到特征提取或者濾波模塊中,并對卷積操作進行了優化
1.6 小結
本章簡要介紹了數字圖像處理的基本概念,介紹了基于Python進行數字圖像處理的簡單語法,對數字圖像處理中遇到的一些基本操作及運算進行了簡單實現。
總結
以上是生活随笔為你收集整理的python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Raywenderlich:寻迹
- 下一篇: echarts人口密度图全解