Écriture de l'étirement du contraste && détection de contours

@

Étirement du contraste

Le contraste est une mesure de la plage des valeurs d'intensité dans une image et est défini comme la différence entre la valeur maximale et la valeur minimale d'un pixel. Le contraste maximal d'une image 8 bits est de $ 255 (max) – 0 (min) = 255$.

Toute valeur inférieure à cela signifie que l'image présente un contraste plus faible que possible. L'étirement du contraste tente d'améliorer le contraste de l'image en étirant la plage des valeurs d'intensité à l'aide d'une mise à l'échelle linéaire.

Supposons que $𝐼$ soit l'image d'entrée d'origine et que $𝑂$ soit l'image de sortie. Soient $𝑎$ et \𝑏 les valeurs minimale et maximale de pixels autorisées (pour une image 8 bits, cela signifie $𝑎$ = 0 et $𝑏$ = 255) et soient $𝑐$ et $𝑑 $ les valeurs minimale et maximale de pixels trouvées dans $𝐼$. L'image à contraste étiré $𝑂$ est alors donnée par la fonction :

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

Détection de contours

Les contours constituent une source importante d'informations sémantiques dans les images. Ils apparaissent dans la perception visuelle humaine au niveau des transitions entre des zones d'intensité, de couleur ou de texture différentes. Une image en niveaux de gris peut être vue comme un paysage en 2D où des zones d'intensité différente se trouvent à différentes altitudes. Une transition entre des zones d'intensité différente dans une image $𝐼$ signifie qu'il doit y avoir une pente raide, que nous formalisons sous la forme du gradient (vecteur) :

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

Comme l'image 𝐼 est discrète, nous devons approximer les dérivées continues $\frac{\partial I}{\partial x}$ par des différences finies. Des exemples simples de noyaux de convolution effectuant des différences finies sont les filtres de Sobel définis comme suit :

$$ $ 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。