Растяжение контрастности
Контрастность — это мера диапазона значений интенсивности на изображении, определяемая как разность между максимальным и минимальным значениями пикселей. Полная контрастность 8-битного изображения составляет $ 255 (max) – 0 (min) = 255$.
Любое меньшее значение означает, что изображение имеет более низкую контрастность, чем возможно. Растяжение контрастности направлено на улучшение контраста изображения путем растяжения диапазона значений интенсивности с помощью линейного масштабирования.
Предположим, что $𝐼$ — исходное входное изображение, а $𝑂$ — выходное изображение. Пусть $𝑎$ и \𝑏 — минимальное и максимальное допустимые значения пикселей (для 8-битного изображения это означает $𝑎$ = 0 и $𝑏$ = 255), а $𝑐$ и $𝑑 $ — минимальное и максимальное значения пикселей, найденные в $𝐼$. Тогда изображение с растянутой контрастностью $𝑂$ задается функцией:
\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)
Обнаружение границ
Границы являются важным источником семантической информации на изображениях. В зрительном восприятии человека они возникают на стыках между областями с разной интенсивностью, цветом или текстурой. Полутоновое изображение можно представить как двумерный рельеф, где области с разной интенсивностью находятся на разной высоте. Переход между областями с разной интенсивностью на изображении $𝐼$ означает наличие крутого склона, который мы формализуем как вектор градиента:
Поскольку изображение 𝐼 дискретно, нам необходимо аппроксимировать непрерывные производные $\frac{\partial I}{\partial x}$ конечными разностями. Простыми примерами ядер свертки, выполняющих вычисление конечных разностей, являются фильтры Собеля, определяемые следующим образом:
- heading
- code
-
def edge_detection(image, filter): image_x = convolution2D(image, filter) plt.imshow(image_x, cmap='gray') plt.title("Horizontal Edge S_x") plt.show() image_y = convolution2D(image, np.flip(filter.T, axis=0)) plt.imshow(image_y, cmap='gray') plt.title("Vertical Edge S_y") plt.show() G_magnitude = np.sqrt(np.square(image_x) + np.square(image_y)) max_value = get_max_ele(G_magnitude) print("max value is :",max_value,"we need normalize it") # нормализация результата G_magnitude = G_magnitude * 255.0 / max_value plt.imshow(G_magnitude, cmap='gray') plt.title("result") plt.show() return G_magnitude