第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

循環(huán)遍歷像素圖像以找到該像素與任意值最接近的值

循環(huán)遍歷像素圖像以找到該像素與任意值最接近的值

寶慕林4294392 2023-08-08 16:09:41
問題陳述:在 yolo 中成功獲取對象周圍的邊界框后,我想將背景與對象本身分開。我的解決方案:我有一個 RGB-D 相機,它返回深度圖以及圖像(圖像提供給 yolo obv),使用深度圖,我做了一個簡單的函數(shù)來獲取深度(四舍五入)和多少像素具有相同的值def GetAllDepthsSortedMeters(depth_image_ocv):? ? _depth = depth_image_ocv[np.isfinite(depth_image_ocv)]? ? _depth= -np.sort(-depth_image_ocv)[:int(len(_depth)/2)]? ? _depth=? np.round(_depth,1)? ? unique, counts = np.unique(_depth, return_counts=True)? ? return dict(zip(counts, unique))并繪制它們,我注意到有一些主峰,其余的位于它們周圍,經(jīng)過一些過濾后,我每次都能成功獲得這些峰。? ? #get the values of depths and their number of occurences? ? counts,values = GetKeysAndValues(_depths)? ? #find the peaks of depths in those values? ? peaks = find_peaks_cwt(counts, widths=np.ones(counts.shape)*2)-1使用這些峰值,我能夠通過檢查該值接近哪些峰值來從背景中分割所需的對象,并為每個峰值(及其周圍的像素)制作一個掩模。def GetAcceptedMasks(h,w,depth_map,depths_of_accepted_peaks,accepted_masks):? ? prev=None? ? prev_index=None? ? for pos in product(range(h), range(w)):? ? ? ? pixel = depth_map.item(pos)? ? ? ? if ( (prev is not None) and (round(prev,1) == round(pixel,1)) ):? ? ? ? ? ? ? ? accepted_masks[prev_index][pos[0],pos[1]]= 255? ? ? ? else:? ? ? ? ? ? _temp_array? ? = abs(depths_of_accepted_peaks-pixel)? ? ? ? ? ? _min? ? ? ? ? ?= np.amin(_temp_array)? ? ? ? ? ? _ind? ? ? ? ? ?= np.where( _temp_array == _min )[0][0]? ? ? ? ? ? accepted_masks[_ind][pos[0],pos[1]]= 255? ? ? ? ? ? prev_index = _ind? ? ? ? ? ? prev = pixel? ? return accepted_masks將圖像傳遞給 YOLOv3 并應用過濾和深度分割后,需要 0.8 秒,這遠非最佳,這主要是上述函數(shù)的結(jié)果,任何幫助都會很棒。謝謝
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經(jīng)驗 獲得超8個贊

這是一種方法。

  • 制作一個與圖像具有相同高度和寬度的浮點數(shù)組,并且最終尺寸等于您要識別的唯一深度的數(shù)量

  • 在每個像素位置,計算到三個所需深度中每個深度的距離并存儲在最終尺寸中

  • 用于np.argmin(..., axis=2)選擇三個深度中最接近的深度

我不是在計算機上進行測試,您的圖像不是您的實際圖像,而是帶有窗口裝飾、標題欄和不同值的圖片,但如下所示:

import cv2


# Load the image as greyscale float - so we can store positive and negative distances

im = cv2.imread('depth.png', cv2.IMREAD_GRAYSCALE).astype(np.float)


# Make list of the desired depths

depths = [255, 181, 125]


# Make array with distance to each depth

d2each = np.zeros(((im.shape[0],im.shape[1],len(depths)), dtype=np.float)

for i in range(len(depths)):

? ? d2each[...,i] = np.abs(im - depths[i])


# Now let Numpy choose nearest of three distances

mask = np.argmin(d2each, axis=2)

另一種方法是范圍測試距離。加載圖像如上:


# Make mask of pixels matching first distance?

d0 = np.logical_and(im>100, im<150)


# Make mask of pixels matching second distance?

d1 = np.logical_and(im>180, im<210)


# Make mask of pixels matching third distance?

d2 = im >= 210

這些蒙版將是合乎邏輯的(即 True/False),但如果您想讓它們變成黑白,只需將它們乘以 255 并使用mask0 = d0.astype(np.uint8)

另一種方法可能是使用K 均值聚類。



查看完整回答
反對 回復 2023-08-08
  • 1 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號