Re: [問題]計算10bits色溫

看板MATLAB作者 (Eden)時間8年前 (2016/08/05 01:04), 8年前編輯推噓0(0029)
留言29則, 2人參與, 最新討論串3/4 (看更多)
※ 引述《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

08/05 10:51, , 1F
看起來跟從前算MURA很像,所以你是指:
08/05 10:51, 1F

08/05 10:51, , 2F
(0) 調整面板的輸出亮度,固定量測時的輸出亮度值.
08/05 10:51, 2F

08/05 10:53, , 3F
(1) 對 全白 畫面拍照...(所以這是參考白?)
08/05 10:53, 3F

08/05 10:53, , 4F
(2) 加紅光濾鏡, 拍攝同面板同設定時的紅光影像.
08/05 10:53, 4F

08/05 10:54, , 5F
(3) 加綠/藍光濾鏡, 拍攝同面板同設定時的綠/藍光影像.
08/05 10:54, 5F

08/05 10:55, , 6F
是這樣嗎? 總之你的量測器會同時量到同一個畫面的
08/05 10:55, 6F

08/05 10:56, , 7F
白光, 濾鏡後紅光, 濾鏡後綠光, 濾鏡後藍光?
08/05 10:56, 7F

08/05 10:57, , 8F
然後你希望根據這四組的CIEXYZ來做segmentation定色溫
08/05 10:57, 8F

08/05 10:57, , 9F
區域?
08/05 10:57, 9F

08/05 11:13, , 10F
雖然我是用程式控制面板直接顯示WRGB白紅綠藍的畫
08/05 11:13, 10F

08/05 11:13, , 11F
面而不是加濾鏡 但是一樣意思 我先讓畫面顯示白
08/05 11:13, 11F

08/05 11:13, , 12F
進行量測
08/05 11:13, 12F

08/05 11:13, , 13F
再讓畫面顯示紅進行量測
08/05 11:13, 13F

08/05 11:13, , 14F
再顯示綠...藍...這樣
08/05 11:13, 14F

08/05 11:15, , 15F
嗯 要定每一階為同色溫
08/05 11:15, 15F

08/05 15:42, , 16F
那我現在剩下的問題是,你所謂的"讓畫面顯示紅",是否是
08/05 15:42, 16F

08/05 15:43, , 17F
直接把原本的 White=[R, G, B] 改成 [R, 0, 0]來量?
08/05 15:43, 17F

08/05 18:12, , 18F
是的
08/05 18:12, 18F

08/06 00:15, , 19F
收到,我這個周末的空檔會幫你想一下.
08/06 00:15, 19F

08/07 01:50, , 20F
感謝~ 我還想請問一下 怎麼用for 寫一個變數的迴
08/07 01:50, 20F

08/07 01:50, , 21F
08/07 01:50, 21F

08/07 02:00, , 22F
例如 g_=[1 4 9 14 17 25 31 ....1017 1021]有256
08/07 02:00, 22F

08/07 02:00, , 23F
個遞增的亂數
08/07 02:00, 23F

08/07 02:00, , 24F
for i=256:1
08/07 02:00, 24F

08/07 02:00, , 25F
for j=g_(i):g(i-1)
08/07 02:00, 25F

08/07 02:00, , 26F
(裡面的函式會用1021 ~1017,...9~4, 4~1這樣為範圍
08/07 02:00, 26F

08/07 02:00, , 27F
使用)
08/07 02:00, 27F

08/07 02:00, , 28F
end end
08/07 02:00, 28F

08/07 02:00, , 29F
那個g就是我算來限定的範圍
08/07 02:00, 29F
文章代碼(AID): #1NetMuwz (MATLAB)
文章代碼(AID): #1NetMuwz (MATLAB)