Matlab을 이용한 영상처리 - 8. 샤프닝과 ROI 처리

Programming/Image Processing 2010. 8. 30. 19:49
저번 글에서 고주파와 저주파 필터에 대해 살펴보았다 .
이번 포스팅은 좀더 실용적인 부분에 주안점을 두게 될것인데 ,

1. sharen
첫번째로 살펴 볼 내용은 edge sharpen이다 . 이 필터를 사용하게 되면 뚜렷하게 이미지를 볼 수가 있다.
알고리즘은 이러하다 .

원 영상에서 평균 필터링으로 얻은 영상을 빼주면 뚜렷한 부분만 남게 된다 . 

 

10 번 , 11번 라인에서 평균 필터링 이미지를 만들고 12번라인에서 원 영상에서 이 값을 빼어주고 있다.
결과를 보자.


2 번 글의 이미지와 비교해보기 바란다. 산부분에서 좀더 뚜렷한 이미지가 보인다.

 샤프닝
1. 원영상 - average로 흐릿해진 영상
2. 정의된 필터 (unsharp)사용



2. ROI

지금까지 필터링을 영상 전체에 걸쳐 적용시켰다면, ROI(Region of interest)는 영역을 지정하고 그 영역내에서만 필터링등을 적용한다.

roipoly 함수를 이용하여 해당 영역을 지정할 수 있는데, 그 좌표값은 [열][행] 순이며, 적은 순서대로 선을 이어 영역을 만드는 형태이므로 순서를 제대로 지키지 않으면 영역이 맞꼭지각을 이루는 리본모양이 될 수도 있으니 주의!

영역을 설정하고 나면 roifilt2를 이용하여 해당 영역에만 만들어놓은 필터를 적용가능하니 이용해보자.


roi 변수에 영역을 지정하고, average 와 unsharp를 이용해보았다.




아래쪽의 팔목에만 각각 unsharp, average 필터를 적용하였다.
그 차이는 일목요연하다.

 roi
roipoly(image, [열],[행]);  -  영역 지정
roifilt2(filter,image,region);  -  지정 영역에 필터 적용

호주식 투표법(Australian Voting)

Programming/Algorithm 2010. 8. 27. 22:02
호주식 투표 제도에서는 투표권자가 모든 후보에 대해 선호도 순으로 순위를 매긴다.
처음에는 1순위로 선택한것만 집계, 한 후보가 50 % 이상 득표시 바로 선출된다. 하지만 50% 이상 득표한 후보가 없으면 가장 적은표를 받은 후보(둘 이상 될 수도)가 우선 탈락된다. 그리고 이렇게 탈락된 후보를 1순위로 찍었던 표를 다시 집계, 아직 탈락되지 않은 후보가운데 가장 높은 선호도를 얻는후보가 그 표를 얻는다. 이런 식으로 가장 약한 후보들을 탈락시키면서 다음 순위의 탈락하지 않은 후보에게 표를 주는 과정을 50% 이상을 얻는 후보가 나오거나 탈락되지 않은 모든 후보가 동률이 될 때까지 반복한다.

입력

입력 케이스의 개수를 나타내는 양의 정수 한 개가 들어있는 행으로 시작되며 그 줄에는 그 숫자밖에 입력되지 않는다.
그 뒤에는 빈줄이 하나 들어가고 서로 다른 입력 케이스 사이에는 두개의 빈줄이 입력된다.
각 케이스의 첫번째 줄에는 후보 수를 나타내는 20 이하의 정수 n이 입력된다. 그 밑으로 n개의 줄에 걸쳐서 후보의 이름이 순서대로 입력되며 각 후보의 이름은 80글자 이하로, 출력가능한 문자로 구성된다.
그 뒤에는 최대 1,000줄이 입력될 수 있는데, 각 줄에는 투표 내역이 입력된다. 각 투표 내역에는 어떤 순서로 1부터 n까지의 수가 입력된다. 첫번째 숫자는 1순위로 찍은 후보의 번호, 두번째 숫자는 2순위로 찍은 후보의 번호, 이런식으로 숫자가 입력된다.

출력

각 테스트 케이스에 대해 당선된 후보의 이름 한줄, 또는 동률을 이룬 후보들의 이름이 들어있는 여러 줄을 출력한다.
두 개 이상의 테스트 케이스가 있는 경우 각 결과는 한 개의 빈 줄로 구분한다


입력 예                                            출력 예

1                                                  John Doe
3
John Doe
Jane Smith
Sirhan Sirhan
1 2 3
2 1 3
2 3 1
1 2 3
3 1 2

주의해야 할 점
말이 조금 어렵게 나와있다. 입력케이스는 현재 개표(?)중인 선거를 나타낸다는 것과 1,000줄 입력중에 중지하는 키워드는 "두개의 빈줄"임을 확인하자. 두 개의 빈줄은 개인적으로 아주 조잡하게.. gets함수를 이용하였다.
또한 같이 푼 동료가 대단히 헷갈려한 부분인데, 위의 입력예에서 첫번째 사람이 가장 선호하는 후보자가 1번 후보자(john)이며, 그다음이 2번째, 3번째 임을 기억하자. john이 1점을 받고 jane이 2점을 받는다는 식이 아님을 기억하자!





 


'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2009년도 기출 _ Candy War  (0) 2010.10.01
암호 깨기 (Crypt Kicker)  (0) 2010.09.30
동맹 휴업 (Hartal)  (0) 2010.09.03
포커 패(Poker Hands)  (0) 2010.09.01
유쾌한 점퍼(Jolly Jumpers)  (0) 2010.08.31

Matlab을 이용한 영상처리 - 7. 고주파 필터, 저주파 필터

Programming/Image Processing 2010. 8. 27. 17:28

영상처리에서 작은 영역에서 픽셀의 변화가 클때 고주파라고 지칭하고, 픽셀의 변화가 작을때  저주파라고 지칭한다.
고주파 필터는 고주파만을 살리고 저주파들을 감소시키거나 없애는 필터이며,
저주파 필터는 저주파만을 살리고 고주파들을 감소시키거나 없앤다.

고주파필터의 예로 laplacian, 저주파필터의 예로 gaussian이 있다.

이번 포스팅에서는 상기 두개의 필터링을 사용해보자.

먼저 고주파 필터부터 생각해보자.
이미지에서 어떤 부분들이 고주파가 될 수 있을까? 에지(edge) 부분이 고주파가 될 가능성이 크다.

때문에 고주파 필터를 사용하면 대체로 이미지가 분명해 진다.

고주파 필터의 마스크는 다음과 같은 형태이다.

              1    -2    1
Mask  =  -2    -4   -2
              1    -2    1

Mask의 큰 특징은, 바로 배열 내부의 값들의 합이 0이라는 것이다.

filterring을 할때, 마스크들의 각 인덱스와 이미지의 픽셀들을 곱해 총 합을 구하여 그 중앙의 픽셀을 결정한다는 것을 잊지말자.
만약 저주파라면 주변픽셀들의 값들이 비슷하기 때문에 더했을때 대체로 0에 가까울 수 밖에없으며,
반대로 고주파일때는 큰값을 가지게 된다.

소스를 살펴보자.


11번라인에서 laplacian 필터를 선택하고 있다. laplacian은 실제로는

           0.1667    0.6667     0.1667
Mask = 0.6667   -3.3333    0.6667
           0.1667    0.6667     0.1667

와 같은 값을 가지고 있다. 이 마스크 값의 합도 0에 가깝다 .

12번라인에서 필터를 이미지 g에 적용하고 13번에서 출력하고 있다.
결과를 보자.


이처럼 경계들이 강조된 이미지가 출력된다.



반대로 저주파 필터링인 Gaussian은 표준함수를 이용하는데 , σ 가 커지면 표준함수가 퍼지고 , 작아지면 표준함수가 집중되는 양상을 보인다.



11~12라인까지 필터 사이즈 11 x 11 , σ = 0.5 인 가우시안 필터를 만들어 적용,
13라인에서 3차원 그래프 ( 해당 필터 )

16~17라인까지 필터 사이즈 11 x 11, σ = 2 인 가우시안 필터 적용,
18에서 그래프를 출력하고 있다.


결과는 다음과 같다 .


첫번째 filter - f 의 결과는 원본과 별 차이가없어 이미지 첨부를 생각하였다.
두번째 필터와 그 그래프를 보면 대체적으로 average 필터와 비슷한 결과를 출력함을 확인할 수 있다.