이미지에서 필요한 정보만 남기고 노이즈와 같은 불필요한 정보는 걸러내는 작업


cv2.medianBlur()는 가장자리 보존하면서 노이즈 제거가 필요한 경우에 적합합니다.
특히 점처럼 생기는 "소금-후추 노이즈(Salt-and-Pepper Noise)"에 매우 효과적입니다.
cv2.GaussianBlur()보다 경계 보존이 잘되는 특징이 있습니다.


cv2.imread()는 BGR 형식으로 이미지를 읽기 때문에, matplotlib.pyplot.imshow()로 표시할 때 cv2.cvtColor(..., cv2.COLOR_BGR2RGB)로 변환이 필요합니다.
plt.subplot(1, 2, n)은 가로 2개 그림 중 n번째 위치를 뜻합니다.
cv2.GaussianBlur()는 노이즈 제거와 함께 부드러운 흐림 효과를 제공합니다.


Sobel 필터는 미분 연산을 기반으로 이미지의 경계를 검출합니다.
dx=1, dy=0: 수평 방향 (세로 경계)
dx=0, dy=1: 수직 방향 (가로 경계)
cv2.GaussianBlur()는 노이즈를 줄여 Sobel 결과의 품질을 높이는 역할을 합니다.
np.hstack()으로 원본, X 에지, Y 에지를 한 화면에 비교 가능하게 나열합니다.


Laplacian 연산자는 2차 미분을 사용하여 밝기 변화가 급격한 경계(에지)를 검출합니다.
GaussianBlur는 에지 검출 전에 노이즈를 줄이는 사전 처리 역할을 합니다.
결과를 np.concatenate()로 나란히 출력해 비교가 쉽도록 합니다.


cv2.createTrackbar(): 슬라이더를 만들고, 조작할 때마다 지정된 콜백 함수(onChange)가 실행됩니다.
cv2.Canny(): 주어진 최소/최대 임계값으로 엣지를 검출합니다.
minVal: 낮은 임계값 → 약한 에지
maxVal: 높은 임계값 → 강한 에지
이 코드는 실시간으로 임계값을 조정하면서 Canny 결과를 확인할 수 있는 인터랙티브 도구입니다.

