MATLAB 이미지 저역 통과 필터

Ammar Ali 2022년7월12일
MATLAB 이미지 저역 통과 필터

이 튜토리얼에서는 MATLAB의 fspecial() 함수를 사용하여 이미지에 대한 2D 저역 통과 필터를 만드는 방법에 대해 설명합니다.

MATLAB에서 저역 통과 필터를 사용하여 이미지 평활화

이미지에는 두 가지 주파수 레벨이 있습니다. 이미지의 가장자리와 노이즈는 고주파 성분을 나타내고 부드러운 영역은 저주파 성분을 나타냅니다.

고주파 성분은 강도가 높거나 콘트라스트가 높으며, 저주파 성분은 강도가 낮거나 콘트라스트가 낮습니다.

이미지에 날카로운 모서리나 노이즈가 있고 이를 매끄럽게 만들고 싶다고 가정합니다. 이 경우 저주파 성분 또는 픽셀이 고주파 성분 또는 픽셀을 통과시키고 정지시켜 이미지에서 픽셀의 강도 수준을 낮추는 저역 통과 필터를 만들어야 합니다.

이미지에 매끄럽거나 대비가 낮은 영역이 있고 이를 선명하게 하고 싶다고 가정합니다. 이 경우 고주파수 구성 요소 또는 픽셀이 저주파수 구성 요소 또는 픽셀을 통과하고 중지하여 이미지의 픽셀 강도 수준을 높이는 고역 통과 필터를 만들어야 합니다.

저역 또는 고역 통과 필터를 만드는 데 사용할 수 있는 다양한 종류의 필터가 있습니다.

MATLAB의 fspecial() 함수를 사용하여 2D 저역 또는 고역 통과 필터를 만들 수 있습니다. 필터를 생성한 후 imfilter() 또는 filter2() 함수를 사용하여 주어진 이미지에 필터를 적용할 수 있습니다.

fspecial() 함수는 다양한 필터에 따라 구문이 다릅니다. 사용 가능한 fspecial() 필터와 해당 구문은 아래와 같습니다.

Filter_object = fspecial(type)
Filter_object = fspecial('average',hsize)
Filter_object = fspecial('disk',radius)
Filter_object = fspecial('gaussian',hsize,sigma)
Filter_object = fspecial('laplacian',alpha)
Filter_object = fspecial('log',hsize,sigma)
Filter_object = fspecial('motion',len,theta)
Filter_object = fspecial('prewitt')
Filter_object = fspecial('sobel')

첫 번째 구문은 fspecial() 함수의 기본 구문이고 첫 번째 구문 이후의 6개 필터는 이미지를 매끄럽게 하는 데 사용되는 저역 통과 필터이고 마지막 두 개의 필터는 에 존재하는 가장자리를 선명하게 하는 데 사용되는 고역 통과 필터입니다. 주어진 이미지. 특정 유형의 필터를 만들려면 필터 유형 또는 필터 이름을 전달해야 합니다.

일부 필터에는 선택적 인수도 있지만 필터 이름만 전달하면 함수는 선택적 인수에 기본값을 사용합니다. 첫 번째 구문 다음에 표시되는 특정 구문을 사용하여 필터의 선택적 인수를 설정할 수도 있습니다.

예를 들어 평균 필터의 경우 위에 나열된 두 번째 구문을 사용하여 양의 정수 또는 두 요소의 벡터가 될 수 있는 필터 크기를 설정할 수 있습니다.

hsize를 양의 정수 또는 스케일러로 설정하면 필터는 정방 행렬이 됩니다. hsize를 두 요소의 벡터로 설정하면 첫 번째 요소는 행 수를 나타내고 두 번째 요소는 필터 행렬의 열 수를 나타냅니다.

세 번째 구문은 양의 정수가 될 수 있는 지정된 반경에 따라 순환 평균 필터 또는 디스크 필터를 만드는 데 사용되며 기본적으로 값은 5로 설정됩니다. 네 번째 구문은 다음을 사용하여 가우스 필터를 만드는 데 사용됩니다. 크기 hsizesigma는 표준 편차를 나타내며 기본적으로 그 값은 0.5로 설정됩니다.

MATLAB에서 imgaussfilt()imgaussfilt3() 함수를 사용하여 주어진 이미지에 가우스 필터를 생성하고 적용할 수도 있습니다. 다섯 번째 구문은 Laplacian의 모양을 설정하는 alpha에 따라 laplacian 필터를 만드는 데 사용되며 기본값은 0.2입니다.

여섯 번째 구문은 표준 편차를 나타내는 hsizesigma 필터 크기에 따라 가우스 파일러의 라플라시안 필터를 생성하는 데 사용됩니다.

일곱 번째 구문은 len으로 지정된 모션의 길이에 따라 카메라의 선형 모션이 포함된 이미지를 매끄럽게 만드는 모션 필터를 만드는 데 사용되며, 기본값은 9이고 모션 각도는 도 단위입니다. theta로 지정됩니다. 각도는 시계 반대 방향이며 기본값은 0입니다.

여덟 번째 구문은 수직 기울기를 사용하여 수평 가장자리의 강도 수준을 향상시키는 고역 통과 필터를 만듭니다. 수직 에지를 향상시키기 위해 필터를 생성하려면 출력 필터 행렬의 전치를 취할 수 있습니다.

마지막 구문은 두 번째 마지막 구문과 동일합니다. 유일한 차이점은 마지막 구문이 평활화 효과를 사용하여 필터를 만드는 데 사용된다는 것입니다. 예를 들어 fspecial() 함수를 사용하여 이미지에 있는 소금과 후추 노이즈를 제거하는 평균 필터를 생성해 보겠습니다.

아래 코드를 참조하십시오.

clc
clear

Input_image = imread('eight.tif');
Noisy_image = imnoise(Input_image,'salt & pepper',0.03);
h = fspecial('average');
Smoothed_image = filter2(h, Input_image);
imshowpair(Noisy_image,Smoothed_image,'montage')

출력:

평균 필터

위의 코드에서는 imnoise() 함수를 사용하여 주어진 이미지에 소금과 후추 노이즈를 넣고 filter2() 함수를 사용하여 노이즈가 있는 이미지에 평균 필터를 적용했습니다. 비교를 위해 노이즈가 있고 부드러운 이미지를 표시하기 위해 imshowpair() 함수를 사용합니다.

위의 출력에서 ​​오른쪽 이미지가 평균화 필터를 사용하여 매끄럽게 된 것을 볼 수 있습니다. 결과를 확인하기 위해 이미지에 다른 필터를 적용할 수 있습니다.

imfilter() 함수를 사용하여 주어진 이미지에 필터를 적용할 수도 있습니다. filter2()imfilter()의 차이점은 주어진 이미지에 필터를 적용하는 알고리즘입니다.

imfilter()는 배정밀도와 부동 소수점 산술을 사용하여 출력 이미지의 픽셀 값을 계산하고 filter2()는 주어진 이미지와 180도 회전할 필터 행렬의 2D 컨볼루션을 사용합니다. 출력 픽셀 값을 찾습니다. 이 두 기능을 모두 시도하고 결과를 비교할 수 있습니다.

입력 배열에 대한 패딩 옵션, 출력 행렬의 크기, 컨볼루션 옵션과 같은 imfilter() 함수의 일부 옵션을 설정할 수도 있습니다. 기본적으로 same으로 설정되어 있는 filter2() 함수의 경우 출력 필터링된 데이터의 모양을 설정할 수도 있지만 전체 2D 필터링된 데이터의 경우 full로 설정할 수도 있고 valid 0으로 채워진 가장자리를 사용하지 않고 계산된 데이터의 경우.

filter2() 함수에 대한 자세한 내용은 이 링크를 확인하십시오. imfilter() 함수에 대한 자세한 내용은 이 링크를 확인하십시오.

작가: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

관련 문장 - MATLAB Image