背景
因此,我目前正在開展一個專案,該專案是編碼列車傅立葉變換系列的擴展。非常感謝他激發了這個專案!
在觀看了他關于編碼列車徽標的傅立葉變換的視頻后,我認為嘗試將其應用于任何影像會很有趣。我的目標是能夠將任何影像中主體的輪廓作為 DFT 演算法的連續路徑提供,以便我可以可視化所述路徑的傅立葉變換。
編碼訓練視頻鏈接:https : //www.youtube.com/watch?v=MY4luNgGfms
我的進步
到目前為止,在 python 中使用 opencv,我已經實作了一種演算法來從任何影像中檢測主題的輪廓并顯示相同的內容。我附上了一個示例輸出。
處理前 處理前的 影像
處理后 處理后的 影像
我的問題和預期結果
現在我已經完成了邊緣,我希望能夠將此邊緣提取為由 (x,y) 坐標表示的連續路徑。我需要它作為連續路徑的原因是我將在這條路徑上執行 DFT,如果它不連續,我的 DFT 可視化就會失敗。
我不知道如何對點進行排序,以便它們不會從左到右或從上到下跳躍,而是遵循從左到右的平滑連續路徑,反之亦然。
我是計算機視覺的初學者,我真的希望有人能幫助我!如果我在某處搞砸了,或者我是否可以改進我的代碼,請隨時告訴我。我真的很想學習。
代碼
到目前為止,這是我的代碼
img = cv2.imread("Images/selfietest.jpeg")
# convert image to gray scale
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
height, width = gray_img.shape
# white_padding = np.zeros((50, width, 3))
# white_padding[:, :] = [255, 255, 255]
# rgb_img = np.row_stack((white_padding, imgOut))
gray_img = 255 - gray_img
gray_img[gray_img > 100] = 255
gray_img[gray_img <= 100] = 0
# black_padding = np.zeros((50, width))
# gray_img = np.row_stack((black_padding, gray_img))
kernel = np.ones((30, 30), np.uint8)
# fill inside of image
filledImage = cv2.morphologyEx(gray_img, cv2.MORPH_CLOSE, kernel)
filledImageNormalized = np.uint8(filledImage)
#Canny edge detection
edges = cv2.Canny(filledImageNormalized, 100, 200)
title = ['edges']
images = [edges]
for i in range(1):
plt.subplot(1, 1, i 1), plt.imshow(images[i], 'gray')
plt.title(title[i])
plt.xticks([])
plt.yticks([])
plt.show()```
uj5u.com熱心網友回復:
讓我做一個假設:您只能使用提供的影像。假設起點是最后一行的白色像素。那么方法是:
- 從起點開始,按順時針順序看一個8鄰域,從南鄰開始
- 檢查鄰居是否是白人。
- 如果是,則存盤它,并將其設定為新的起點,然后重新啟動該程序
- 如果不是,看看下一個鄰居
- 繼續,直到您到達一個沒有更多白色像素鄰居的像素。
話雖如此,也許您不僅僅使用此影像。在這種情況下,您必須調整查找起始像素以匹配所有可能性的方式。
但是有了這個,您將在大綱上獲得一條連續的路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/330878.html
