新手向——通過街頭圖像評(píng)估紐約市自行車道的質(zhì)量

Measuring the quality of NYC Bike Lanes through street imagery

  • 另一篇文章中,我介紹了如何使用Open Street Cam(OSC)應(yīng)用收集街道圖像,在這片文章中,我將簡(jiǎn)單介紹我們對(duì)街道圖像使用到的圖像處理和計(jì)算機(jī)視覺技術(shù)。
    我們也嘗試過使用 微軟定制視覺 產(chǎn)品,根據(jù)簡(jiǎn)單標(biāo)記的自行車道圖像,快速生成分類結(jié)果。

  • python擁有強(qiáng)大的圖像處理能力,這里用到了廣受歡迎的openCVSciPy庫(kù)。

  • Greg Dobler教授是NYU CUSP的圖像處理專家,我們咨詢了他來幫助我們構(gòu)建這些算法。

  • 我們嘗試結(jié)合四種方式來評(píng)估自行車道質(zhì)量,并借鑒NACTO的“城市街道設(shè)計(jì)指南”

    1. 騎行質(zhì)量,使用前面提到的app記錄的加速度數(shù)據(jù)測(cè)量。
    2. 自行車道的顏色,綠色車道相比沒有涂色的車道質(zhì)量更高,因?yàn)樗鼈兊目梢娦愿谩?/li>
    3. 符號(hào)和路面標(biāo)記,良好標(biāo)記的車道質(zhì)量更好。
    4. 可見道路缺陷,如裂縫和坑洼,越少越好。
  • 以下重點(diǎn)是測(cè)量路面標(biāo)記和可見缺陷。這是一個(gè)幼稚的評(píng)分系統(tǒng),也是程序的第一次迭代(類似于許多計(jì)算機(jī)視覺應(yīng)用)。

檢測(cè)車道標(biāo)記

  • 使用SciPy讀取原始圖像并顯示
import scipy.ndimage as nd
photoName = 'path'
img = nd.imread(photoName)

import matplotlib.pylab as plt
def plti(im, **kwargs):
    """
    畫圖的輔助函數(shù)
    """
    plt.imshow(im, interpolation="none", **kwargs)
    plt.axis('off') # 去掉坐標(biāo)軸
    plt.show() # 彈窗顯示圖像
plti(img)
  • 裁去圖片的上半截(去除非自行車道的特征)和底部10%(去除我的自行車輪胎)(上圖沒有顯示出來這個(gè)特點(diǎn))
#圖片的行數(shù)和列數(shù)
nrow, ncol = img.shape[:2]
#從行數(shù)的一半開始 直到 0.9行數(shù)
img = img[nrow//2:(nrow-nrow//10),:,:]

plti(img)
  • 使用顏色閾值過濾裁剪后的圖像,生成二值圖(黑白圖)
#分離出三層色彩
red, grn, blu = img.transpose(2, 0, 1)
#應(yīng)用閾值處理
thrs = 200
wind = (red > thrs) & (grn > thrs) & (blu > thrs)

plti(wind)
  • 接著使用高斯模糊,帶寬值為40像素
# 使用高斯濾波模糊白色區(qū)塊
gf = nd.filters.gaussian_filter
blurPhoto = gf(1.0 * wind, 40)

plti(blurPhoto)
  • 再次設(shè)定閾值,0、1二值圖像
# 閾值位于黑白之間的灰色區(qū)域
# 像素值大于閾值為1,小于為0
threshold = 0.16
wreg = blurPhoto > threshold

plti(wreg)

于是得到該車道標(biāo)記的最終得分:在最后一張圖中白色區(qū)域(即車道標(biāo)記)的占比(wreg.mean())。這里是13.2%。

檢測(cè)可見道路缺陷

  • 讀取圖片
import scipy.ndimage as nd
photoName = r'path'
img = nd.imread(photoName)

plti(img)
  • 同上面一樣的裁剪
#圖片的行數(shù)和列數(shù)
nrow, ncol = img.shape[:2]
#從行數(shù)的一半開始 直到 0.9行數(shù)
img = img[nrow//2:(nrow-nrow//10),:,:]

plti(img)
md = nd.filters.median_filter
# 模糊圖像
md_blurPhoto = md(img, 5)
plti(md_blurPhoto)
  • 將圖像從RGB轉(zhuǎn)換為HSV,并過濾圖像以僅保留較暗(缺陷)像素
import cv2
lower = np.array([0, 10, 50])
upper = np.array([360, 100, 100])
hls = cv2.cvtColor(md_blurPhoto, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hls, lower, upper)
res = cv2.bitwise_and(hls, hls, mask = mask)
  • 邊緣檢測(cè),使用canny邊緣檢測(cè)。
    我們還在圖像上應(yīng)用了3x3高斯濾波器,然后對(duì)剩余的白色像素進(jìn)行侵蝕/擴(kuò)展操作以消除噪聲。
edges_cv = cv2.Canny(res, 200, 400)
#模糊邊緣
blurred_edges = cv2.GaussianBlur(edges_cv,(3,3),0) 
# 只想保留這樣的裂縫:鄰近其他裂縫或大于某個(gè)最小閾值
bdilation = nd.morphology.binary_dilation
berosion = nd.morphology.binary_erosion
edges_2 = bdilation(berosion(blurred_edges, iterations=2), iterations=2)
defect_score = edges_2.mean()
  • 最終缺陷得分6.95%,是上述處理后圖像中白色像素的百分比。

  • 再次說明,這些技術(shù)只是第一次迭代,并受到光或攝像機(jī)角度變化的限制。不過,它們足夠測(cè)量我們?cè)诩~約市目前所見過的一些自行車道的質(zhì)量。

到現(xiàn)在,團(tuán)隊(duì)騎行超過50英里,收集了4500個(gè)街景
  • 更進(jìn)一步,可以構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)(CNN),并用我們每個(gè)(標(biāo)記的)圖像訓(xùn)練它。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你們是朵朵向陽(yáng)花 汲取多一點(diǎn)光 貯存大能量 終有一天會(huì)美麗綻放 人生路上勇以嘗試?yán)щy 最美的風(fēng)景就在前面 挫折又如...
    謝女女閱讀 103評(píng)論 0 0
  • 包子的身材一直是我們吐槽的槽點(diǎn),但生得是眉清目秀,肉嘟嘟的小圓臉,一雙單尾鳳忽閃忽閃,最喜歡向別人拋媚眼,...
    2月5日閱讀 238評(píng)論 0 1
  • 1363年,在中國(guó)江西鄱陽(yáng)湖,發(fā)生了一場(chǎng)中世紀(jì)世界規(guī)模最大的水戰(zhàn)。此戰(zhàn)的雙方的最高統(tǒng)帥,一個(gè)是后來的明太祖朱元璋,...
    葉藏花W閱讀 414評(píng)論 0 0
  • 我一直相信,人與人之間有一種特有的磁場(chǎng),有些人天生就相吸,而有些人卻很難走在一起。 在一個(gè)辦公...
    轉(zhuǎn)角遇到最好的自己閱讀 224評(píng)論 0 0
  • 分享: 今天有幸聆聽了寶貝組合老師,還有唐宏老師長(zhǎng)沙情商篇的直播分享!信息量較大,好多信息還需慢慢消化!老...
    幽幽白書0閱讀 271評(píng)論 0 1

友情鏈接更多精彩內(nèi)容