看板 MATLAB 關於我們 聯絡資訊
※ 引述《YoursEver (銀英傳出webgame!?)》之銘言: : ※ 引述《immortal1314 (Eden)》之銘言: : : 標題: [問題]計算10bits色溫 : : 時間: Thu Aug 4 01:25:38 2016 : 先說重點: : 你的描述方式,我看不懂你的input signal的格式. : 先釐清你的輸入信號吧. : ***** : 請問你的input資料有哪些資訊? : 有 R G B 嗎? : 我不懂你所說的"我所擁有的資料是, 紅光R的x y, 綠光G的x y, 藍光B的x y" : 你是否是指以下兩者之一的狀況? : (1) 先打紅光,拍紅光照射下的反射信號,此時會得到一組 x_r, y_r : 再打綠光, 綠 x_g, y_g : 最後藍光, 藍 x_b, y_b : 最後這三張圖,當成input signal. : 或 : (2) 所謂的紅光R的x y是依據以下的X_r, Y_r, Z_r所計算出的值: : [ X_r ] [ ] [ R ] : [ Y_r ] = [ A ] [ 0 ] : [ Z_r ] [ ]3-by-3 [ 0 ], : 而所用的輸入信號,則是這個方式下所得到的x_r, y_r, x_b, y_b, x_g, y_g. : **** 恩 好的 首先是這樣 我對一個顯示面板進行量測 得到0~255gray level的 白光 W_Y W_x W_y Ex:某一階的 W_Y=400 W_x=0.3342 W_y=0.3153 紅光 R_x R_y Ex: R_x=0.6341 R_y=0.3412 綠光 G_x G_y Ex: G_x=0.3310 G_y=... 藍光 B_x B_y Ex: ..... 此為input (x X y Y 大寫小寫代表的不同) 然後 從結果往回看 為了計算CCT 需要CIE色座標的x,y 為了算CIE色座標的x,y 需要XYZ 為了得到XYZ 需要算出R_Y G_Y B_Y 於是乎目前流程是這樣的 輸入W的xyY 與 RGB的xy ,先算出RGB各自的Y , 將RGB的xyY 轉換成各自對應的XYZ(XYZ才能做混色) 混色後的 x=RX/(RX+GX+BX) y=RY/(RY+GY+BY) (x,y各有1021*1021*1021個組和)(省略了將0~255內插成0~1020的說明) 再將x,y帶入CCT的公式得到色溫(K) ******************************* 簡單流程如下: WxyY RGBxy-----------------> R_Y G_Y B_Y----------------> XYZ------------------------> CIE座標上的xy--------------> ----->CCT(color temperature) ******************************* 我要找出所有答案皆為某色溫(ex:5000K)的RGB各自的xyY 也就是最一開始輸入的RGB_xyY 是哪些組合得到目標色溫的 (目標色溫每一階0~255階 找最接近那個 這部分我還沒寫到code裡) 遇到的問題: 1.for 迴圈 寫了3層 雖然寫出了所有結果 but執行起來太慢 2.計算結果太大 必須用實驗室的電腦才跑得起來 光是xy就會吃掉14G的記憶體 急--> 3.即使計算完 我也想不出 怎麼往回找出是哪組R_x R_y R_Y得到我要的色溫 G_x G_y G_Y B_x B_y B_Y 解決辦法: 1.不用for 迴圈寫 但又要能計算出所有結果 2.增加限制條件 使它不用 跑完所有的計算結果 (1) 利用gamma2.2限制亮度 (R_Y+B_Y+G_Y,就是限制每一階的總亮度) (2) 利用下一階不會超過上一階亮度的限制 (例如: G_Y 180階<G181階) (3) 利用各階亮度的差不會太大 限制搜索範圍 例如:不可能出現 R_Y的200階 + G_Y的10階 +B_Y 相差太大的結果是不可能的 因為會導致下一階出現沒有值可用的情況 ..................以上方法 我都不會寫 所以目前是用 最簡單的暴力解 全部展開 再取出所有目標與對應的RGBxyY 卻發現不知道如何找出目標色溫 對應的所有RGB_xyY 非常感謝回復我的大神 QQ...我想很久還是百思不得解 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.82.231 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1470330296.A.EBD.html ※ 編輯: immortal1314 (122.146.82.231), 08/05/2016 01:39:30 ※ 編輯: immortal1314 (122.146.82.231), 08/05/2016 01:44:58 ※ 編輯: immortal1314 (122.146.82.231), 08/05/2016 01:46:53 ※ 編輯: immortal1314 (122.146.82.231), 08/05/2016 01:47:28
YoursEver: 看起來跟從前算MURA很像,所以你是指: 08/05 10:51
YoursEver: (0) 調整面板的輸出亮度,固定量測時的輸出亮度值. 08/05 10:51
YoursEver: (1) 對 全白 畫面拍照...(所以這是參考白?) 08/05 10:53
YoursEver: (2) 加紅光濾鏡, 拍攝同面板同設定時的紅光影像. 08/05 10:53
YoursEver: (3) 加綠/藍光濾鏡, 拍攝同面板同設定時的綠/藍光影像. 08/05 10:54
YoursEver: 是這樣嗎? 總之你的量測器會同時量到同一個畫面的 08/05 10:55
YoursEver: 白光, 濾鏡後紅光, 濾鏡後綠光, 濾鏡後藍光? 08/05 10:56
YoursEver: 然後你希望根據這四組的CIEXYZ來做segmentation定色溫 08/05 10:57
YoursEver: 區域? 08/05 10:57
immortal1314: 雖然我是用程式控制面板直接顯示WRGB白紅綠藍的畫 08/05 11:13
immortal1314: 面而不是加濾鏡 但是一樣意思 我先讓畫面顯示白 08/05 11:13
immortal1314: 進行量測 08/05 11:13
immortal1314: 再讓畫面顯示紅進行量測 08/05 11:13
immortal1314: 再顯示綠...藍...這樣 08/05 11:13
immortal1314: 嗯 要定每一階為同色溫 08/05 11:15
YoursEver: 那我現在剩下的問題是,你所謂的"讓畫面顯示紅",是否是 08/05 15:42
YoursEver: 直接把原本的 White=[R, G, B] 改成 [R, 0, 0]來量? 08/05 15:43
immortal1314: 是的 08/05 18:12
YoursEver: 收到,我這個周末的空檔會幫你想一下. 08/06 00:15
immortal1314: 感謝~ 我還想請問一下 怎麼用for 寫一個變數的迴 08/07 01:50
immortal1314: 圈 08/07 01:50
immortal1314: 例如 g_=[1 4 9 14 17 25 31 ....1017 1021]有256 08/07 02:00
immortal1314: 個遞增的亂數 08/07 02:00
immortal1314: for i=256:1 08/07 02:00
immortal1314: for j=g_(i):g(i-1) 08/07 02:00
immortal1314: (裡面的函式會用1021 ~1017,...9~4, 4~1這樣為範圍 08/07 02:00
immortal1314: 使用) 08/07 02:00
immortal1314: end end 08/07 02:00
immortal1314: 那個g就是我算來限定的範圍 08/07 02:00