[討論] griddata建立查找表

看板MATLAB作者 (魯到入味)時間5年前 (2020/01/12 21:34), 5年前編輯推噓0(0020)
留言20則, 2人參與, 5年前最新討論串1/1
大家好,小弟目前手邊有兩張同一景色在不同空氣品質下所拍攝的灰階影像, 其中空氣乾淨者為A,嚴重汙染者為B。 目前已知乾淨灰階為汙染灰階與特定種類汙染濃度的函數DN_clean(DN_dirty,con_tp), 因此可用模式在給定DN_dirty與con_tp範圍的情況下跑出DN_clean並以此建立查找表, 並透過A與B影像找出某類汙染假設下的濃度空間分布C_1~3(三類汙染物): C_n=griddata(DN_dirty(:), DN_clean(:), con_n(:),... B(:), A(:)); 取得各類汙染物濃度空間分布後,理論上可再配合汙染影像B來重建乾淨影像A: A_n=griddata(DN_dirty(:), con_n(:), DN_clean(:),... B(:), C_n(:)); 在不同汙染物假設下重建的A-n之間及與原始A應極為相似, 頂多有些許微小數值上的差異,但我實際跑出來卻相差甚大,三種汙染類型假設下, 僅一種所重建的A與原始A相近,另外兩種為顯著高估及低估灰階。 想請問版上各位,是否我在griddata使用上或是理解上有誤? 同時我也用過scatteredInterpolant進行同樣的操作,但結果與目前一致, 問題出在哪部分?謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.49.250 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1578836082.A.A64.html

01/13 01:54, 5年前 , 1F
是c-n還是c_n?code的部份
01/13 01:54, 1F

01/13 09:25, 5年前 , 2F
不好意思,沒有標示清楚,文中A-n與C-n中間應為底線
01/13 09:25, 2F

01/13 09:25, 5年前 , 3F
,表在第n種污染假設下所重建的影像A或是污染濃度C,
01/13 09:25, 3F

01/13 09:25, 5年前 , 4F
實際code我這部分是採迴圈存在cell array中
01/13 09:25, 4F

01/13 20:18, 5年前 , 5F
程式用法應該沒錯,我傾向是數學上的問題
01/13 20:18, 5F

01/13 20:18, 5年前 , 6F
可能要再檢視一下理論吧?B不會同時有多種污染源嗎?
01/13 20:18, 6F
n大好,其實基於特定汙染物種類下所做出的濃度只是一個等效而非絕對值, 當遇到比現有假設消光程度更大的汙染物,則反映到其等效濃度上會變大,反之亦然。 目前就卡在若不考慮其物理意義,只單純從查找表來講, DN_dirty、con_n、DN_clean三者關係確立,則A、B、C中只要確定兩者則可推斷出剩者, 而先從A、B推得C_n,則若由B與C_n則可得A_n,A_n與A理論上應該是非常相似, 所以我才會認為是否是在函式應用上的問題 ※ 編輯: fxxkjoe1231 (36.224.62.28 臺灣), 01/14/2020 01:17:07

01/14 01:37, 5年前 , 7F
啊,太久沒摸,突然想起來,你應該用ndgrid生成數值再
01/14 01:37, 7F

01/14 01:37, 5年前 , 8F
01/14 01:37, 8F

01/14 01:39, 5年前 , 9F
meshgrid也可以
01/14 01:39, 9F

01/14 01:42, 5年前 , 10F
01/14 01:42, 10F
n大好,不太了解要用到ndgrid的意思,案例中用是想要顯示離散點所構成的平面, 而我只是要找出面上對應點的值,應該是不會用到ndgrid, 而且也只有DN_dirty與con_n(:)可形成網格 ※ 編輯: fxxkjoe1231 (36.226.107.75 臺灣), 01/16/2020 21:36:40

01/16 23:51, 5年前 , 11F
所以你的DN_dirty, DN_clean, con_n本來就是二維的嗎?
01/16 23:51, 11F

01/17 00:12, 5年前 , 12F
如果這三個本來就是二維的表,那你的程式可以不用(:)
01/17 00:12, 12F

01/17 00:12, 5年前 , 13F
也不用ndgrid,不過(:)不影響結果
01/17 00:12, 13F

01/17 00:12, 5年前 , 14F
所以問題應該真的在數學方面了
01/17 00:12, 14F
透過模式計算DN_clean=f(DN_dirty, con_n)可得散佈點建立這三組數據關係, 其中DN_dirty, con_n為網格資料。 只是目前手邊能夠進行查找的資訊在第一步中要先藉B(DN_dirty)、A(DN_clean), 求出對應C_n(con_n),再以B與C_n找出A。感覺概念沒問題, 但查找出來的值就是明顯有誤 ※ 編輯: fxxkjoe1231 (36.226.107.75 臺灣), 01/17/2020 01:27:14

01/17 02:39, 5年前 , 15F
你有用公差夠小的DN_dirty, con_n等差數列,產生出二維
01/17 02:39, 15F

01/17 02:39, 5年前 , 16F
的DN_clean表嗎?
01/17 02:39, 16F

01/17 02:39, 5年前 , 17F
我說的數學上的問題不是指你反推的概念,是這公式有沒
01/17 02:39, 17F

01/17 02:39, 5年前 , 18F
有其他變因、或是數學計算上讓二維內插出現誤差的可能
01/17 02:39, 18F

01/17 02:45, 5年前 , 19F
我也覺得反推應該沒問題,指令用法也沒啥問題,對這應
01/17 02:45, 19F

01/17 02:45, 5年前 , 20F
用不熟,只能猜到這樣而已
01/17 02:45, 20F
文章代碼(AID): #1U6o1ofa (MATLAB)
文章代碼(AID): #1U6o1ofa (MATLAB)