Обработка изображений - Сглаживание - PullRequest
5 голосов
/ 28 июля 2011

Я просто хочу спросить, есть ли ресурсы, которые вы рекомендуете описать просто Image smoothing.

Спасибо.

Ответы [ 2 ]

10 голосов
/ 28 июля 2011

Как и некоторые из упомянутых комментаторов, сглаживание изображения может многое значить.В основном, хотя, когда кто-то использует термин, он означает размывание или фильтрацию нижних частот .Они обычно используются как синонимы.Идея размытия интуитивно понятна нам как визуальным существам, но что это на самом деле означает?

Когда объектив камеры не в фокусе, это означает, что лучи света, отраженные от объектов, смешиваются в нашем видении.Это изображение, представляющее сфокусированное зрение:

enter image description here

Вот аналогичная диаграмма, представляющая размытый или несфокусированный vision: enter image description here

Чтобы воспроизвести этот эффект в цифровом виде, давайте возьмем каждый пиксель изображения и заменим его средним значением для себя и соседних восьми пикселей: enter image description here

Выше изображение одного белого пикселя внутри черного квадрата 7x7.Обратите внимание, что это один белый пиксель, а не целый квадрат пикселей, просто очень взорван.В стандартном 8-битном представлении изображения это представляется следующим образом:

 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 
 0   0   0  255  0   0   0 
 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 

Когда мы выполняем усреднение, это заменяет каждый пиксель средним значением всех пикселей в квадрате 3x3 вокруг него (который включает в себяИсходный пиксель также, мы получаем

 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 
 0   0  28  28  28   0   0 
 0   0  28  28  28   0   0 
 0   0  28  28  28   0   0 
 0   0   0   0   0   0   0 
 0   0   0   0   0   0   0 

Выше числа являются целыми числами, потому что до сих пор мы делали только целочисленные операции, так что давайте будем последовательными.

Это может выглядеть не оченьсглаживание пока, но давайте посмотрим на другой пример. Ниже приведено изображение шахматной доски с изменением значений пикселей 0 и 255.

enter image description here

Давайте теперь заменим каждый пиксель в среднем на 4x4квадрат, в котором исходный пиксель расположен так:

 . . . . 
 . X . . 
 . . . . 
 . . . . 

Вы видите, что из-за шахматного узора среднее значение каждого такого квадрата будет 255/2 = 127 (снова целочисленное деление).пиксельные изменения очень резкие от пикселя к пикселю. Переходя от любого пикселя к его соседу, мы переходим от максимально возможного значения пикселя к низкомуЭто возможно.Это известно как высокочастотный контент .При усреднении мы удаляем этот высокочастотный компонент, и, следовательно, в процессе обработки сигналов мы выполняем фильтрацию высоких частот или, синонимно, фильтрацию низких частот .Не беспокойтесь о странных артефактах по краям.Они есть, потому что при фильтрации по краю изображения мы пропускаем пиксели для усреднения, поэтому мы предполагаем, что все, что находится за пределами изображения, просто черное.

Давайте выполним такое же усреднение для обычной серой шкалыобраз.Ниже приводится знаменитое изображение Lenna .Рядом с ним - его усредненная версия, в которой используется усредненная маска 7x7 mask .Вы можете видеть, что сглажено или размыто .

enter image description here

Это был очень упрощенный пример сглаживания изображения с помощью усреднения.Усреднение является лишь одним частным случаем фильтрации нижних частот.В общем, мы выполняем взвешенное усреднение для достижения желаемых эффектов фильтра низких частот.Для дальнейшего чтения я предлагаю поискать теорию фильтров и свертку.

Надеюсь, это поможет.

2 голосов
/ 28 июля 2011

Image Smoothing обычно является синонимом Low Pass Filtering или getting rid of the high frequencies.


Фон - что фильтрует:

Большинство людей понимают, что такое фильтрация интуитивно. Вы берете что-то, пропускаете через фильтр и удаляете что-то, и на выходе нет того вещества, которое вы отфильтровали. В изображениях / 2d и 1d сигналы вы можете фильтровать.

Способ применения фильтрации для 2-мерного или 1-мерного изображения заключается в свертке входных данных x и фильтра h для создания выходных данных y.

Вот пример свертки в 1d, который я написал за 5 минут и не проверял на ошибки:

void conv(float *x, int x_len, float * h, int h_len, float * y, int y_len)
{
 int i;
 register double accum;
 for(i = 0; i < x_len-h_len-1; i++) {
  accum = 0;
  for(j = 0; j < h_len; j++) {
   accum += x[i+j] * h[j];
  }
  y[i] = accum;
 }
}

int main {
 float x[] = {...};
 int x_len = sizeof(x)/sizeof(x[0]);
 float h[] = {...};
 int h_len = sizeof(h)/sizeof(h[0]);
 float y[x_len-h_len-1] = {0};
 int y_len = x_len-h_len-1;

 conv(x,x_len,h,h_len,y,y_len);
}

Обратите внимание, как входной сигнал x фильтруется по h. Затем вывод сохраняется в y. Для получения дополнительной информации ищите свертку на Google.


Низкочастотная фильтрация:

Теперь, когда вы знаете, как фильтровать 1d сигнал. Вы можете сделать фильтр низких частот. Для создания фильтра низких частот вы создаете фильтр h, который пропускает только низкие частоты. Самый простой фильтр нижних частот - это прямоугольный фильтр h = ones(1,N); h = h ./ N; (код matlab). Более сложный фильтр - это фильтр Гаусса (он очень часто используется при обработке изображений. См. Photoshop / Gimp и ищите «размытие по Гауссу»). Существует бесконечно много способов создать фильтр низких частот.

Чтобы создать пользовательский фильтр низких частот, используйте Parks-McClellan_filter_design_algorithm , чтобы создать произвольный специальный фильтр низких частот. Для получения дополнительной информации поищите в Google «создание фильтра нижних частот».


Наконец, чтобы ответить на ваш вопрос - Сглаживание изображения:

Чтобы сделать сглаживание изображения, вы делаете то же самое в 1d, но каждый раз, когда вы видите один цикл for, у вас есть двойной цикл for (потому что вы делаете 2d сигнал).

Создание фильтра также аналогично, но вместо фильтра 1d-массива h ваш фильтр h теперь двумерный.

...