우리가 화면상에서 보는 이미지색상은 전부 R, G, B의 조합으로 이루어져 있다.
조합이 0 ~ 255까지 총 256개로 모든 색을 표현할 수 있다.
이러한 색상요소 하나하나를 픽셀이라고 하는데 모든 이미지는 픽셀로 이루어진 디지털 신호이다.
이미지 픽셀은 마치 행렬처럼 이루어져 있고 이를 화면상에 숫자로 표현할 수 있다.
이번 글에서는 이미지를 갖고 픽셀이 어떻게 이루어져 있는지, 무슨색깔이 가장 많이 이루어져있는지 간단히 해석하는법을 포스팅하겠다.
이미지 분석할 대상은 바로 우리집 최강 귀염댕이 몰티즈 힝둥이다.
우선 매트랩 프로그램에서 이미지를 불러와야 하는데 이때 사용하는 함수가 imread(' ')이다
I=imread('dog.jpg');
해당 이미지를 불러오니까 정보가 1440x1080x3이라고 나온다.
1440은 세로픽셀, 1080은 가로픽셀, 3은 각각 r g b를 나타낸다.
I를 출력해보니까 수많은 숫자가 나열된다.
이제 총 픽셀중에서 색의 조합이 어떻게 이루어져 있는지 코딩을 통해 해석해 보자.
//main함수
a=imread('dog.jpg'); //이미지를 불러와서 정보를 a라는 변수에 넣기
RGB_hist(a);
function[R_hist,G_hist,B_hist]=RGB_hist(a)
R_hist=BW_hist(a(:,:,1)); //BW_hist()함수를 호출해서 r영역만 사용
G_hist=BW_hist(a(:,:,2));
B_hist=BW_hist(a(:,:,3));
plot(0:255,R_hist,'r')
xlim([0,255]);
hold on;
plot(0:255,G_hist,'g')
plot(0:255,B_hist,'b')
end
이때, a( : , : , 1 )이라는 부분이 나오는데 여기서 사용되는 : 는 해당 영역의 전부를 의미한다.
즉 a( : , : , 1 )라고 작성하면 r영역에 있는 모든 픽셀을 의미한다.
//main함수에서 호출하는 BW_hist함수정의
function output=BW_hist(a)
[lx,ly]=size(a); //lx, ly를 a의 정보만큼 공간을 확보
output=zeros(1,256); //output도 색깔표현갯수만큼 공간확보
for xi=1:lx
for yi=1:ly
output(a(xi,yi)+1)=output(a(xi,yi)+1)+1; //특정 색깔이 인식되면 1개씩 카운트하는 알고리즘
end
end
위의 코드를 입력하면 다음과 같은 그래프가 출력된다.
히스토그램을 해석하는 방법은 특정색깔이 기둥처럼 솟아있으면 해당 색깔이 많이 사용되었다는 뜻이다.
반대로 전체적으로 골고루 퍼져있으면 색깔이 균형있게 사용되었다는 의미이며 우리 눈에 보기 편한 이미지이다.
위의 그래프를 보면 파란색이 0부분에서 튄 것을 제외하면 전체적으로 고루 퍼져있음을 알 수 있다.
파란색이 0에서 튄 이유는 다른색에 비해 상대적으로 덜 쓰인 색이나 눈에 보이기 편하도록 카메라가 보정을 한 것 같다.
따라서 r, g, b전체를 적분하면 아마 전반적으로 비슷한 값이 나올 것이다.
과연 특정색이 많이 사용된 이미지는 진짜 솟아오른 모양인지 다른 이미지를 통해 확인을 해보자.
흔히 이미지 프로세싱에서 많이 사용되는 이미지로 레나의 초상화를 분석해보자.
위의 사진은 전체적으로 붉은 이미지를 보인다. 해당 이미지를 히스토그램분석을 하면 다음과 같다.
붉은색 영역이 다른 색보다 위로 튀어오른 모습을 보아 붉은색이 많이 사용되었고
파란색은 특정 부분에만 튄 것을 보아 특정 영역에서만 파란색 값이 나오며
초록색은 가장 값이 낮으나 고루 퍼져있다.
이를보아 색을 표현하기 위해서는 r, g, b가 고루 섞여있어야 이미지가 보기 편하게 나온다는것을 알 수 있다.
'MATLAB' 카테고리의 다른 글
[MATLAB] 신호의 주파수 해석(Fourier Analysis in Frequency Domain) (0) | 2021.07.10 |
---|---|
[MATLAB] 악보 만들고 연주하기 & 파형분석 (0) | 2021.07.10 |
[MATLAB] 그래프 설정 명령어 (0) | 2021.07.07 |
[MATLAB] 3D그래프 그리기(Gaussian Distribution Graph 2D & 3D) (1) | 2021.07.06 |
[MATLAB] 여러 그래프 띄우기(subplot()) (0) | 2021.07.06 |