Алгоритмы повышения количества оттенков (псевдотонирования)
11.3. Алгоритм упорядоченного размытия
Очевидно, что метод, рассмотренный в "Алгоритмы повышения количества оттенков (псевдотонирования)" , требует улучшений. Можно специально добавить в исходное изображение шум1некоторую, часто случайную, величину , а затем применить алгоритм 11.1. Если добавлять произвольный шум, то результаты алгоритма нельзя считать удовлетворительными.
Тем не менее существует искусственный псевдошум, который минимизирует эффект периодичности, т.е. появления на изображении некоторого упорядоченного узора. Данный шум возможно задать с помощью квадратной матрицы специального вида [13]. Такая матрица называется матрицей размытия2(англ.) dither matrix. Сначала исходное изображение разбивается на квадратные области размером NxN, совпадающие с размерностью матрицы размытия, затем к каждому квадрату применяется алгоритм 11.2, где в качестве порога выбирается соответствующее значение из матрицы.
Для случая 2x2 оптимальной является следующая матрица:
![D_2 =
{\left( \begin{array}{cc}
0 & 2 \\
3 & 1
\end{array} \right)}.](/sites/default/files/tex_cache/2cda08fffa5f2f2156ce82dd53568755.png)
Для получения матриц большего размера следует использовать следующие рекурсивные соотношения:
![D_n =
{ \left( \begin{array}{cc}
4D_{n/2} & 4D_{n/2} + 2U_{n/2} \\
4D_{n/2} + 3U_{n/2} & 4D_{n/2} + U_{n/2}
\end{array} \right) },](/sites/default/files/tex_cache/9ed7fa1c7ee20a6f72371f2180dbf06f.png)
где
![U_n =
\left( \begin{array}{ccccc}
1 & 1 & 1 & \ldots & 1 \\
1 & 1 & 1 & \ldots & 1 \\
1 & 1 & 1 & \ldots & 1 \\
\vdots & \vdots & \vdots & \ddots & 1 \\
1 & 1 & 1 & 1 & 1
\end{array} \right)](/sites/default/files/tex_cache/7a847a7439cc4a0ad49c7a8bc09e76a4.png)
- матрица, состоящая из единиц размером nxn. Например, матрица размером 4x4 будет следующая:
![D_4 =
{ \left( \begin{array}{cccc}
0 & 8 & 2 & 10 \\
12 & 4 & 14 & 6 \\
3 & 11 & 1 & 9 \\
15 & 7 & 13 & 5
\end{array} \right) }.](/sites/default/files/tex_cache/8f1b7e1f34f934678bd954da958d5808.png)
Матрица размытия Dn позволяет получить n2 значений атрибутов; при этом пространственное разрешение не изменяется. Ниже приведен псевдокод алгоритма:
foreach( pixel in 8bit_picture ) // для каждого пикселя { // I(pixel) - атрибут пикселя // Dn(i,j) - матрица размытия, n - размер матрицы // X Mod Y - остаток от деления X на Y // i, pixel.Y - координаты строк i = pixel.Y Mod n; // j, pixel.X - координаты столбцов j = pixel.X Mod n; if( I(pixel) > Dn(i,j) ) I(pixel) = Белый; else I(pixel) = Черный; }Листинг 11.2. Алгоритм псевдотонирования - упорядоченное размытие
Как видно из рис. 11.5 результаты работы данного алгоритма намного лучше, чем описанного в разделе "Алгоритмы повышения количества оттенков (псевдотонирования)" , - изображение выглядит более детально.