Re: [問題] 關於RGB轉灰階的程式碼問題
※ 引述《devilrucifer (devilrucifer)》之銘言:
: ※ 引述《VictorTom (鬼翼&娃娃魚)》之銘言:
: : 理論上, 後面這個比較精確, 常見的做法還會加一個四捨五入的0.5
: : 但是, 在CPU上, 甚至一些embbed system, 前者會算的比較快....
: : 有一個折衷的方案是:
: : gray = (R*299 + G*587 + B*114 + 500) / 1000;
: 不好意思我在請問一下一個問題,
: 請問這一邊加0.5四捨五入的用意是什麼呢?
: 是怕數值超過255嗎?
不是, 就是四捨五入啊....
原本那個公式(#2)gray算出的結果是個浮點數....
如果算出gray = 123.123 這樣的結果....
整數化要在0-255間, gray您要當它是123還是124呢??
又, 如果是123.876勒:)
如果是用#1那個/256的方法, 就不用考慮四捨五入了....
: 小弟是試過有加跟沒加都可以正常執行,
: 也看過有人沒加0.5而是在後面追加
:
: if(gray>255)gray=255;
: if(gray<0)gray=0;
這個才是在做邊界判斷, 比如算noise時有可能會超過....
那就有需要在算完的gray level加上邊界判斷....
有時候術語我們把它稱為 clamp .
: 請問這幾個在執行上有甚麼差異嗎?
: 在此先謝謝各位版友。
以你的RGB轉灰階, 只要input的RGB值確定都會在0-255間....
公式算出來(就算加0.5四捨五入)理論上都不會超過0-255....
所以你的這個case如果不加邊界判斷也無所謂....
覺得不必要, 但是有怕哪天有意外會出錯....
為了方便debug, 可以試試看用 assert(gray >= 255 && gray <= 0);
(請自己找一下assert的用法, 如果您在意這個的話, 不然就別管它吧)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.66.243.96
※ 編輯: VictorTom 來自: 61.66.243.96 (04/09 15:53)
推
04/09 18:18, , 1F
04/09 18:18, 1F
→
04/09 18:39, , 2F
04/09 18:39, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):