Escrevendo Alongamento de Contraste && Detecção de Bordas

@

Alongamento de Contraste

O contraste é uma medida da faixa de valores de intensidade em uma imagem e é definido como a diferença entre o valor máximo e o valor mínimo de pixel. O contraste total de uma imagem de 8 bits é $ 255 (max) – 0 (min) = 255$.

Qualquer valor inferior a esse significa que a imagem possui um contraste menor do que o possível. O alongamento de contraste busca melhorar o contraste da imagem expandindo a faixa de valores de intensidade por meio de escala linear.

Assuma que $𝐼$ seja a imagem de entrada original e $𝑂$ seja a imagem de saída. Sejam $𝑎$ e \𝑏 os valores de pixel mínimo e máximo permitidos (para uma imagem de 8 bits, isso significa $𝑎$ = 0 e $𝑏$ = 255) e sejam $𝑐$ e $𝑑 $ os valores de pixel mínimo e máximo encontrados em $𝐼$. Então, a imagem com alongamento de contraste $𝑂$ é dada pela função:

\( 𝑂(𝑥, 𝑦) = (𝐼(𝑥, 𝑦) − 𝑐)( \frac {b-a}{d-c}) +a\)

Detecção de Bordas

As bordas são uma fonte importante de informação semântica em imagens. Elas ocorrem na percepção visual humana nas divisões entre áreas de intensidade, cor ou textura diferentes. Uma imagem em escala de cinza pode ser pensada como uma paisagem 2D com áreas de diferentes intensidades situadas em diferentes alturas. Uma transição entre áreas de intensidades diferentes em uma imagem $𝐼$ significa que deve haver uma inclinação acentuada, a qual formalizamos como o gradiente (vetor):

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

Como a imagem 𝐼 é discreta, precisamos aproximar as derivadas contínuas $\frac{\partial I}{\partial x}$ por diferenças finitas. Exemplos simples de núcleos de convolução que realizam diferenças finitas são os filtros de Sobel, definidos da seguinte forma:

$$ $ 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("Borda Horizontal S_x")
    plt.show()
 
    image_y = convolution2D(image, np.flip(filter.T, axis=0))
 
 
    plt.imshow(image_y, cmap='gray')
    plt.title("Borda Vertical S_y")
    plt.show()
    G_magnitude = np.sqrt(np.square(image_x) + np.square(image_y))
    max_value = get_max_ele(G_magnitude)
    print("o valor máximo é :",max_value,"precisamos normalizá-lo")
    # normalizar o resultado
    G_magnitude = G_magnitude * 255.0 / max_value
 
    plt.imshow(G_magnitude, cmap='gray')
    plt.title("resultado")
    plt.show()
 
    return G_magnitude
<

评论 · Comments (0)

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