一、投影
水平投影有什么作用呢?
可以起到一個定位的作用,比如說,我們想要定位車牌號。我們把圖像處理之后,用垂直投影,可以很快的對其進行定位以即分割
水平投影的實現步驟
圖像二值化,物體為黑,背景為白。
循環各行,依次判斷每一列的像素是否為黑,統計所有黑像素的個數。設該行共有M個黑像素,則把該行從第一列到第M列設置為黑
垂直投影的實現步驟
圖像二值化,物體為黑,背景為白。
循環各列,依次判斷每一行的像素是否為黑,統計所有黑像素的個數。設該列共有M個黑像素,則把該列從第一行到第M行設置為黑
效果圖如下
水平投影效果如下
二、紋理分析
什么是紋理呢?
紋理就是指在圖像中反復出現的局部模式和他們的排列規則
紋理特征反應了物體本身的屬性,有助于將兩種不同的物理分開來
通過對圖像的紋理分析獲得關于景物紋理特征和結構的定景分析描述和解釋。這就是圖像紋理分析的任務。
紋理是圖像的像素灰度級或者顏色的某種變化,反復出現紋理基元和它的排列規則。而且這種變化是空間排列的
紋理是由紋理級元組測而成的
那什么是紋理分析呢?
紋理分析是指通過圖像處理技術抽取出紋理特征,獲得紋理的定量或者定性描述的處理過程,獲得紋理的定量或者定性描述的處理過程,它首先從像素觸發,檢測出紋理基元,找出紋理基元排列的信息,建立紋理基元的模型,通過紋理分析獲取紋理基元的排列信息及分布信息
紋理分析的基礎方法
統計方法
1. 空間域:基于統計圖像像素灰度級的分布狀況,利用直方圖
2. 頻域:通過傅里葉變換將圖像變換到頻率域然后抽取相應的象征量
結構方法:用于印刷或者版畫樣等一類紋理基元及其排列比較規則的圖像
直方圖統計特征分析法
大體步驟如下
1. 對于一副圖像,選擇合適的領域大小
2. 對每個像素,計算出其領域中的灰度直方圖
3. 比較求出的直方圖與已知的各種紋理基元的直方圖之間的相似性。
4. 若相似,說明存在已知的紋理基元
如何判斷直方圖的相似性呢?
均值方差法
求出兩個圖像直方圖的均值和方差,如果兩幅圖像的均值和方差相差均在閾值之內,則說明兩個直方圖是相似的。
直方圖的均值:所有像素值相加除以像素個數
直方圖的方差:每一個顏色減去均值的平方,再乘以顏色的個數再除以總個數。
該算法實現起來非常簡單
def Texture_1(img1,img2):
def getStatic(img):
static=np.zeros(shape=256,dtype=int)
for y in range(0,len(img)):
for x in range(0,len(img[y])):
c=img[y,x,0]
static[c]=static[c]+1
return static
# 先統計直方圖
static1=getStatic(img1)
static2=getStatic(img2)
s1=0
s2=0
#再計算直方圖的平均灰度
for i in range(0,256):
s1=s1+static1[i]*i
s2=s2=static2[i]*i
avg1=s1/(len(img1)*len(img1[0]))
avg2 = s2 / (len(img2) * len(img2[0]))
#再計算方差
for c in range(0,256):
t1=(c-avg1)*static1[c]
t2=(c-avg2)*static2[c]
t1=t1/(len(img1)*len(img1[0]))
t2=t2/(len(img2)*len(img2[0]))
return np.abs(t1-t2)
Kolmogorov-Smirnov檢測法
對于兩幅圖像,分別求出其累計直方圖,然后取其累計直方圖差值的最大值
H(z)=int_{0}^{Z}h(x)dxH(z)=∫0Zh(x)dx
KS=max|H_1(z)-H_2(Z)|KS=max∣H1(z)?H2(Z)∣
然后再求出直方圖之間差值的的和值,為SD
SD=sum h_1(z)-h_2(z)SD=∑h1(z)?h2(z)
如果|KS-SD|∣KS?SD∣在閾值之內,則相似
Python
def Texture_2(img1,img2):
#下面是用來求一副圖像的直方圖
def getStatic(img):
static=np.zeros(shape=256,dtype=int)
for y in range(0,len(img)):
for x in range(0,len(img[y])):
c=img[y,x,0]
static[c]=static[c]+1
return static
#下面的函數是用來求一副圖像的累計直方圖
def getStatic1(img):
static=np.zeros(shape=256,dtype=int)
for y in range(0,len(img)):
for x in range(0,len(img[y])):
c=img[y,x,0]
static[c]=static[c]+1
if c》0:
static[c]=static[c]+static[c-1]
return static
static1=getStatic(img1)
static2=getStatic(img2)
# 用來參數KS
KS=np.max(static1-static2)
# 用來求參數SD
SD=np.sum((getStatic(img1)-getStatic(img2)),axis=0)
return np.abs(KS-SD)
邊緣方向直方圖分析法
灰度級直方圖不能反應圖像的二維灰度變化,圖像邊緣包含有大量的二維信息,取沿著邊緣走向的像素的領域,分析其直方圖,若在直方圖上的某一個灰度范圍內有尖峰,可以說明在這個范圍內,紋理具有方向性。因此,單純的分析邊緣方向的直方圖可以得到一些紋理信息
圖像自相關函數分析法
P(x,y)=frac{sum_{i=0}sum_{j=0}f(i,j)f(i+x,j+y)}{sum_{i=0}sum_{j=0} f(i,j)} d=(x^2+y^2)^{frac{1}{2}}P(x,y)=∑i=0∑j=0f(i,j)∑i=0∑j=0f(i,j)f(i+x,j+y)d=(x2+y2)21利用p(x,y)隨著x,y大小而變化的規律可以找到描述圖像的紋理特征。
自相關函數隨著x、y大小而變化,與圖像紋理粗細的變化有者對應的關系,如果紋理比較粗,則P(x,y)隨著d增加而下降速度較慢,如果紋理比較細,則隨著d增加而下降速度較快
灰度共生矩陣特征分析法
因為灰度級直方圖分析法無法反應出像素之間灰度級空間相關性的規律。所以是有一定缺陷的,而灰度共生矩陣特征分析法,很好點的解決了這個問題。
相鄰某一間隔的兩個像素,他們之間要么具有相同的灰度級,要么具有不相同的灰度級,如果能找到這樣兩個像素的聯合分布的統計形式,對于圖像的紋理分析很有意義
灰度-梯度共生矩陣分析法
將其灰度進行正規化處理
利用梯度算子,可以得到梯度圖像
經過正規化處理,可以得到兩個正規化矩陣:灰度矩陣、梯度矩陣
正規化處理
每個像素乘以它的灰度值的個數,然后除以最大值
編輯:jq
-
投影
+關注
關注
0文章
142瀏覽量
24693 -
函數
+關注
關注
3文章
4327瀏覽量
62574 -
紋理
+關注
關注
0文章
7瀏覽量
6732
發布評論請先 登錄
相關推薦
評論