Estiramiento de contraste
El contraste es una medida del rango de valores de intensidad en una imagen y se define como la diferencia entre el valor máximo del píxel y el valor mínimo del píxel. El contraste completo de una imagen de 8 bits es $ 255 (max) – 0 (min) = 255$.
Cualquier valor menor que eso significa que la imagen tiene un contraste más bajo de lo posible. El estiramiento de contraste intenta mejorar el contraste de la imagen ampliando el rango de valores de intensidad mediante un escalado lineal.
Supongamos que $𝐼$ es la imagen de entrada original y $𝑂$ es la imagen de salida. Sean $𝑎$ y \𝑏 los valores de píxel mínimo y máximo permitidos (para una imagen de 8 bits, esto significa $𝑎$ = 0 y $𝑏$ = 255) y sean $𝑐$ y $𝑑 $ los valores de píxel mínimo y máximo encontrados en $𝐼$. Entonces, la imagen con estiramiento de contraste $𝑂$ viene dada por la función:
\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)
Detección de bordes
Los bordes son una fuente importante de información semántica en las imágenes. Se producen en la percepción visual humana en las divisiones entre zonas de diferente intensidad, color o textura. Una imagen en escala de grises se puede concebir como un paisaje 2D con áreas de diferente intensidad ubicadas a diferentes alturas. Una transición entre áreas de diferente intensidad en una imagen $𝐼$ significa que debe haber una pendiente pronunciada, la cual formalizamos como el gradiente (vector):
Dado que la imagen 𝐼 es discreta, necesitamos aproximar las derivadas continuas $\frac{\partial I}{\partial x}$ mediante diferencias finitas. Ejemplos sencillos de núcleos de convolución que realizan diferencias finitas son los filtros de Sobel definidos de la siguiente manera:
- 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") # normalize the result G_magnitude = G_magnitude * 255.0 / max_value plt.imshow(G_magnitude, cmap='gray') plt.title("result") plt.show() return G_magnitude