대비 스트레칭 및 에지 검출 작성

@

대비 스트레칭

대비(Contrast)는 이미지 내 명도 값 범위의 척도이며, 최대 픽셀 값과 최소 픽셀 값의 차이로 정의됩니다. 8비트 이미지의 전체 대비는 $ 255 (max) – 0 (min) = 255$입니다.

이보다 작은 값은 이미지가 가능한 대비보다 더 낮은 대비를 가지고 있음을 의미합니다. 대비 스트레칭은 선형 스케일링을 사용하여 명도 값의 범위를 확장함으로써 이미지의 대비를 향상시키고자 합니다.

$𝐼$를 원본 입력 이미지, $𝑂$를 출력 이미지라고 가정합니다. $𝑎$와 \𝑏를 허용되는 최소 및 최대 픽셀 값(8비트 이미지의 경우 $𝑎$ = 0 및 $𝑏$ = 255를 의미)이라 하고, $𝑐$와 $𝑑 $를 $𝐼$에서 발견되는 최소 및 최대 픽셀 값이라고 합니다. 그러면 대비가 스트레칭된 이미지 $𝑂$는 다음 함수로 주어집니다:

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

에지 검출

에지(Edge)는 이미지에서 중요한 의미론적 정보의 원천입니다. 에지는 인간의 시각적 인지에서 서로 다른 명도, 색상 또는 텍스처를 가진 영역 간의 경계에서 나타납니다. 그레이스케일 이미지는 서로 다른 명도를 가진 영역들이 서로 다른 높이에 존재하는 2차원 지형으로 생각할 수 있습니다. 이미지 $𝐼$에서 서로 다른 명도 영역 간의 전환은 급격한 경사가 있음을 의미하며, 이를 그래디언트(벡터)로 공식화합니다:

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

이미지 𝐼는 이산적이므로 유한 차분을 사용하여 연속 도함수 $\frac{\partial I}{\partial x}$를 근사화해야 합니다. 유한 차분을 수행하는 합성곱 커널의 간단한 예로는 다음과 같이 정의되는 소벨 필터가 있습니다:

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