2023年11月25日開發手記

2022-04-01 06:02:37 字數 1585 閱讀 7673

對濾波後的影象做行列投影,通過閾值得到運**像橫縱座標點集。使用水平與豎直投影演算法,投影演算法的時間複雜度為o(x2),哪怕進行優化也最多可變為o(xlogx),時間上無法接受。再次使用傅利葉變換?還是將目標放在輪廓點整合?

使用豎直投影法的話還不如直接遍歷所有點找輪廓,這對後面進行聚類也比較方便。

決定採用豎直投影+遍歷,只進行一次投影,在投影過程中將點逐個遍歷,高亮點的橫縱座標壓入棧,輸出橫縱座標的最大值和最小值。

def

line_trans(img):

l =stack()

h_1=stack()

l.isempty()

h_1.isempty()

#ret, thresh1 = cv2.threshold(img, 25, 255, cv2.thresh_binary) # 將進行二值化(130,255)之間的點均變為255(背景)

(h, w) = img.shape #

返回高和寬

a = [0 for z in

range(0, w)]

#記錄每一列的波峰

for j in range(0, w): #

遍歷一列

q_1=0

for i in range(0, h): #

遍歷一行

#print(1)

#print(img[i, j])

if img[i, j] !=0: #

如果該點為白點

print(1)

if q_1 ==0:

i_1=i

i_2=i

q_1=1a[j] += 1 #

該列的計數器加一計數

if q_1!=0:

l.push(j)

h_1.push(i_1)

h_1.push(i_2)

if len(h_1.stack) != 0 and len(l.stack) !=0:

max=h_1.stack[0]

min=h_1.stack[0]

for i in

range(len(h_1.stack)):

if h_1.stack[i]>max:

max=h_1.stack[i]

if h_1.stack[i]min=h_1.stack[i]

return min,l.stack[0],max,l.stack[len(l.stack)-1]

else

:

return

0,0,0,0

問題:似乎進不去判斷函式,也就是img中所有點都為0,但在除錯中img確有非0點。

問題解決:縮排錯誤

新演算法的效果確實變得更好了,但速度也變得更慢了,為80ms左右。嘗試使用python的切片操作,對二維陣列進行橫向累加,從而達到減少迭代次數的目的。

在濾波函式中加上一句:iimg[index,:][iimg[index, :] > 200] = 0 似乎出現了乙個新特點:運動的物體在運動的反方向一側的邊緣會出現高亮。
換而言之,影象出現了方向性,這對後面的分類與識別應該有些特殊的意義。

2023年11月20日開發手記

兩種運動檢測演算法的介紹 幀差法 二維頻域運動目標檢測 通過對動態影象的行列分解,將三維頻域內的運動檢測問題轉化到兩組二維頻域內進行,從而降低了濾波器設計的難度。給出了一種提取主運動能量的自適應濾波演算法,通過剔除背景和雜訊的頻率成分,有效地檢測出運動目標。複雜度分析 針對幀差法進行分析,複雜度主要...

2023年11月21日開發手記

更改了幾處bug 1 將棧由全域性變數變為區域性變數,修正了起始點不變的問題。2 將低通濾波器改為高通濾波器,修正了壓入棧的資料過多問題。f np.fft.fft2 new gray array rows,cols f.shape f 0 fftadd 0 f rows fftadd rows 0 ...

2023年11月28日開發手記

為了方便後面目標識別的處理,將投影求分類的函式嵌入進fft濾波函式中,共同組成fttmovedetect函式,利用python的切片功能實現投影 arryallw arryallw arryh arryallh arryallh arryl 為在投影中分割多目標區域,引入兩個變數 yindexh 與...