看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win 7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Visual Studio 2015 C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) opencv 問題(Question): 假設有兩個陣列 int a[2000]; 元素個數=1234 int b[2000]; 元素個數=1789 想把他們全部放大到有2000個元素,之後兩個陣列內容要比大小 Diff = Diff + abs(a[cnt] - b[cnt]); 陣列數目不同無法比,所以想讓他們正規化 請問有沒有簡單容易實做的方法? 目前只能想到用內插補資料,但整體放大的方法要如何做呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 163.18.57.175 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1481957331.A.E05.html
stupid0319: tiida 12/17 15:37
這跟念大悲咒是一樣的RRRRRRR
ilikekotomi: 最簡單應該是一開始大小就用500 12/17 15:59
謝謝,我突然發現用錯表達方法, 陣列宣告時都用5000,但演算法算完後, 每個陣列的元素個數會不一樣
chuegou: 只能放大嗎 不能縮小? 縮小不用補資料 12/17 16:08
可以,主要目的是讓大家的元素個數一樣 像我題目說B的元素有到1789, 因為A沒有index=1789的值, 會造成演算法錯誤 不知大大能否提點一下如何做呢?
stupid0319: 用link吧,伸縮自如跟海綿寶寶一樣 12/17 16:37
sorryla: 看起來不是陣列的問題 比較像是演算法的問題 12/17 16:48
EdisonX: 演算法問題 +1 12/17 19:58
謝謝,我還是貼個圖好了 http://imgur.com/a/qWwXq 我表達有誤,應該說是,演算法算出來就會是這樣 算出來後等於左邊兩張圖,一個橫軸300多,一個橫軸400初 要經過放大縮小的正規化,會變成右邊,大家的橫軸都是500 不好意思一直沒表達清楚
LPH66: 所以這是演算法問題無誤, 你要的不是補資料是拉伸資料 12/17 21:32
LPH66: 那你就要考慮你的資料必須要怎麼延伸才會有意義 12/17 21:32
LPH66: 一個類似的例子 (但「非常可能和你要的不同」) 是圖片縮放 12/17 21:33
LPH66: 然後另外一個考慮的點: 你的演算法是否要求等長資料? 12/17 21:35
LPH66: 如果「等長」這個點不是重點的話你應該是改演算法去適用 12/17 21:36
LPH66: 注意我指的不是演算法的細節而是這演算法到底在算什麼東西 12/17 21:37
感謝 一直忘記說明,這個是手勢的影像辨識,h是手勢的輪廓 因為每張圖的輪廓長度不一樣,造成現在這個問題 主要是想把左邊橫軸不一樣的資料,轉成右邊那10張橫軸都一樣的 困難點在於,a[100]轉成a[200]很簡單,全部內插1格就好 但是a[57]轉成a[200],或是b[123]轉成b[200],這種scale不一樣的不知道該如何寫 ※ 編輯: hsucheng (36.238.65.200), 12/17/2016 23:11:14
EdisonX: 那你有最原始 2000 個點的資料嗎?如果沒有的話我想直接 12/18 01:41
EdisonX: 先轉到 max(asize,bsize) 維度即可? 12/18 01:41
EdisonX: 若轉到 2000 個點,用最笨的最近補點法的概念下去做應可行 12/18 01:42
LPH66: 可不可行其實要看原 PO 之後要做什麼操作 12/18 02:29
LPH66: 所以才會問他說之後的操作演算法有沒有要求等長資料 12/18 02:30
LPH66: 依操作不同有些資料不能貿然做內插/最近補點/etc 12/18 02:31
EdisonX: 他有要等長啊!上面有個公式有講了 12/18 02:31
EdisonX: Diff = Diff + abs(a[cnt] - b[cnt]); 這個前提應就是 12/18 02:31
EdisonX: 要等長吧 ?? 還是我誤會了 ?? 12/18 02:32
EdisonX: 不過照整個述敘看起來,原 po 想要的,應該是去計算,兩 12/18 02:33
EdisonX: 個波型數值的相似度,最後那明顯是種 MSE 12/18 02:33
EdisonX: 若猜對的話,就用內插法吧。 12/18 02:34
EdisonX: src : http://codepad.org/lLTUU4Ak 12/18 02:36
EdisonX: result : http://imgur.com/a/oCgUW 12/18 02:37
EdisonX: 再補一下好了,我想原 po 要做的是幾個手勢做判斷,而特 12/18 02:45
EdisonX: 徵點的取得個數不同,所以想先展開,但展開要件是波形要 12/18 02:46
EdisonX: 和原本長得像,再去做 MSE 計算。而我 code 裡的內插法 12/18 02:47
EdisonX: 主要是補點加權,假設 mapping 到的是 dst[0]=src[6.7] 12/18 02:47
EdisonX: 則 src[0] = dst[6]*0.3 + dst[7]*0.7 12/18 02:48
EdisonX: 若猜錯的話... 額 .. 就略過我的發言吧 Orz 12/18 02:48
EdisonX: 疑!我看懂 LPH66 敘述了,那請問,若不展開變等長的話, 12/18 02:52
EdisonX: 有什麼方法可以判斷兩個,取樣點數不同之波型是否相似呢? 12/18 02:53
LPH66: 嘛, 我只是單純因為不知道他要做什麼運算才會提醒注意的 12/18 03:37
LPH66: 你這個問題似乎是屬於訊號分析的範圍, 那個我沒什麼在接觸 12/18 03:38
LPH66: 但也因為他這個問題似乎真的有摸到這個邊所以才會想到 12/18 03:38
LPH66: 經過內插/補點/etc之後的訊號失真問題 12/18 03:39
EdisonX: 剛查了一下,波型相似的算法的確不少,像fft,match patt 12/18 14:04
EdisonX: ern等,方向確實很廣。 12/18 14:04
noodleT: 把資料分別做擬合曲線後,比較兩個曲線是否一樣 12/18 17:43
hichcock: 樓上正解~ 12/19 08:46
doom8199: 以原po需求可以用 Dynamic Time Warping 12/20 13:17
longlongint: 抓出features 12/23 22:25