2009-08-11 87 views
11

什麼是製作半色調圖像的好算法(如this)?一個快速的谷歌搜索帶來了一堆關於這個問題的論文,但很難判斷哪些是好的,高效的等等。有沒有最好的選擇來做這種事情?製作半色調圖像的算法?

+0

是否有你的問題更多的東西,你想回答?更多細節? – NoMoreZealots 2009-08-12 00:26:57

回答

16
  • 篩選到你想要的分辨率 分隔的「點」。
  • 獲取該區域的像素組的 的平均強度。
  • 繪製點,使得點的面積 等於從白色到黑色的 平均強度的 百分比。

將像素組視爲六邊形網格。使用圓函數來決定哪些像素進入組。您可以調整圓圈的重疊以調整輸出的黑色/飽和度。這實際上是爲打印等高分辨率輸出而設計的。如果您要這樣做以在屏幕上顯示視覺效果,請確保使用消除鋸齒的圓形繪圖程序來補償顯示器的低分辨率。 (與打印相比,即使HD不是那麼高)。

如果你這樣做是因爲你喜歡這個效果,那很酷。但是,如果您只是想要使用「Floyd-Steinberg」抖動進行黑白映射,請使用「Floyd-Steinberg」抖動。它提供高質量的結果並在整個圖像中分配錯誤。 http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

+0

http://en.wikipedia.org/wiki/Dither – kenny 2009-08-20 00:42:35

+0

他們有一個很好的例子「floyd-stienberg」。這給了我過去最好的結果。 – NoMoreZealots 2009-08-20 01:26:53

+0

這裏列出的「繪製點」算法確實在引用的示例網頁上實現了「黑點」效果。但構建屏幕和調整「黑點」效果的點形狀在運行時會更快。 – 2009-08-25 16:43:05

0

要做到這一點最簡單的方法,是像素去像素,並使用隨機: 對於每個像素,着色回來=黑暗的原始色彩的概率。

這可以給你一個雙線抖動算法。它不會像弗洛伊德 - 斯坦伯格那樣好看(因爲那個人會跟蹤錯誤),或者像「瓷磚然後把磁盤放在每個瓷磚中,使得黑色部分=原始瓷磚中的平均黑度」那樣具有藝術性,但在實踐中效果很好。

+0

這確實會導致輸出密度appoximates輸入灰度級,但它不會實現引用的特定示例的聚類點外觀。 – 2009-08-25 16:41:05

+0

半色調的意思(引用維基百科)「半色調是通過使用點來模擬連續色調圖像的複印技術,大小或間距都不相同。」他顯示的樣本大小不一,我的間距不同。兩種都是半色調,儘管我肯定不會假裝我看起來和示例一樣好:如上所述,這個答案的價值在於它的實現非常簡單。 – redtuna 2009-08-25 16:56:13

+0

兔子 - >是(哎呀,對錯誤抱歉!我希望我可以編輯我的意見) – redtuna 2009-08-25 16:57:24

4

半色調效率非常高。

單級半色調: 輸入:圖像中的像素;預先構建的包含閾值的「屏幕」。 在運行時間:對於每個顏色通道,對於每個像素,選擇一個閾值(以陣列尺寸爲模的閾值數組索引)。像素與閾值之間的比較決定輸出值是打開還是關閉。

它推廣到多級輸出,以及通過使用多個屏幕。

有趣的部分是屏幕(閾值陣列)的構建。有許多變化 - 聚點(AM),隨機(FM),許多變化和混合,包括藍噪聲和綠噪聲(AM/FM)。而且您通常需要爲每個顏色通道選擇不同的屏幕。傳統的成簇網點在矩形網格中出現點,可以用它們的頻率(低頻=大點)和角度來描述(青色通常爲15°,品紅色爲75°,黃色爲90°,黑色爲45°) 。

如果您想要進行實驗,帶有半色調屏幕方法的Photoshop位圖(請參閱此tutorial)具有內部屏幕生成器,並將像您的示例一樣將灰度圖像屏幕顯示到位圖中。

其他人提出的抖動方法涉及更多的每像素計算,並且輸出不像您的聚類網點篩選半色調示例。

+1

動畫示例:http://www.openprocessing.org/visuals/?visualID=911 – biziclop 2011-12-27 23:41:15