DevKim

[영상처리] MATLAB 비선형 필터 & ROI 처리 본문

영상처리

[영상처리] MATLAB 비선형 필터 & ROI 처리

on_doing 2020. 10. 7. 21:54
728x90

0. 비선형 필터

: 마스크 내의 밝기 값에 비선형 함수를 적용

 

<-> 선형 필터 : 필터와 원본 영상을 곱해서 더함

 


1. Rank-order filter

: 마스크 내의 값들을 정렬하고 특정한 값을 출력하는 필터!!

 

-> 만약 값들이 오름차순으로 정렬되어있으면

최소값 필터는 펏 번째 값을 출력하는 rank-order 필터이고,

최대값은 마지막 값을 출력하는 rank-order 필터이다.

 

*nfilter :미리 정의된 함수를 사용하여 필터링. 원하는 함수 만들어서 사용할 수 있음

(lambda 같은건가..???)

 

<case 1>

 

1) 마스크 내의 가장 큰 값 출력 (최대 값 필터)

-> 영상을 밝게 함

cmax=nlfilter(c,[3,3],'max(x(:))');

2) 마스크 내의 가장 작은 값 출력 (최소 값 필터)

-> 영상을 어둡게 함

 cmin=nlfilter(c,[3,3],'min(x(:))');

 

<case 2>

 

ordfilt2 함수

-> 함수 사용이 용이함

 

c=imread('cameraman.tif');
cmax=ordfilt2(c, 9, ones(3,3));
# 입력영상, 몇번째 픽셀을 선택할 것인지,
# 3X3 필터를 사용할거야= 3X3 영역에서 오름차순으로 정렬해서 그중에 9번째 값을 선택할거야

cmin=ordfilt2(c, 1, ones(3,3)); #최소값 필터
cmed=ordfilt2(c, 5, ones(3,3)); #median filter -> 잡음 제거에 많이 사용됨
imshow([c cmax cmin cmed]);

* 단점이 있다면 , rank-order 필터는 매우 느림

(정렬 연산 때문)

 

꼭 필요한 경우가 아니라면 선형필터를 사용하는 것이 좋음 !

 


2. ROI (Region of Interesting) 처리

* 영상 전체가 아닌 영상의 일부분만을 처리하기 원하는 경우에 사용

 

1. 원하는 부분 선택하기

roipoly

 

 

 

 

ig=imread('iguana.tif');
roi=roipoly(ig,[406 600 600 406],[58 58 231 231]); # x좌표,y좌표

figure,imshow(roi);

 

<영상에서 직접 ROI 설정 가능>

roi=roipoly(ig);
figure,imshow(roi);


2. 원하는 부분에 필터 적용하기

roipoly , roifilt2

= roi 부분만 필터링 해주는 함수

 

ig=imread('iguana.tif');
roi=roipoly(ig,[406 600 600 406],[58 58 231 231]);

a=fspecial('average',[15,15]);
iga=roifilt2(a,ig,roi); #roi 부분만 필터링 해주는 함수

u=fspecial('unsharp');
igu=roifilt2(u,ig,roi);

l=fspecial('log');
igl=roifilt2(l,ig,roi);

imshow([iga igu igl]);

728x90
Comments