Escritura de estiramiento de contraste && detección de bordes

@

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):

$$ $ \nabla =(\frac{\partial I}{\partial x},\frac{\partial I}{\partial y})$ $$

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:

$$ $ S_x = \begin{bmatrix} 1 & 0 & -1\\ 2 & 0 & -2 \\ 1 & 0 & -1 \ \end{bmatrix}$ $$
$$ $ S_y = \begin{bmatrix} 1 & 2 & 1\\ 0 & 0 & -0 \\ -1 & -2 & -1 \end{bmatrix}$ $$
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
<

评论 · Comments (0)

需要 MetaMask 等以太坊钱包,签名不花 gas。