2014-06-20 7 views
2

RGB 값 배열을 Matlab의 HSV 값 배열로 변환하려고합니다. 다음 코드를 실행하고 있습니다 :Matlab rgb2hsv 변경 이미지

pic = imread('ColoradoMountains.jpg'); 

pic = rgb2hsv(pic); 

imwrite(pic,'pic.jpg') 

그러나 쓰여지는 이미지는 완전히 다른 색상입니다. 나는 컬러 맵을 hsv로 설정하려고 노력해 왔지만, 그것이 의미가 있는지조차 확신 할 수 없다. 인터넷상의 어떤 것도 내 키워드와 함께 나오지 않습니다. 누군가 저를 올바른 방향으로 가르쳐 주시겠습니까?

+0

jpeg는 hsv 또는 rgb를 지원하지 않습니다. jpeg는 항상 YCbCr입니다. – Daniel

답변

2

imwrite가 사용할 것으로 예상되는 색상 맵을 지정할 수 있습니다. 이 시도 :

imwrite(pic,colormap('HSV'),'pic.png'); 

여기 imwrite에 대한 문서입니다 : 매트랩 http://www.mathworks.com/help/matlab/ref/imwrite.html

+0

작동합니까? 문서에 따르면, 나는'pic '이 네이티브 n * m * 3 hsv 이미지가 아닌 HSV-Indexed n * m * 1 이미지라고 기대할 것입니다. 나는 그것을 정확하게 쓰지 못했습니다. – Daniel

+0

이렇게하면 "error : feval : function 'HSV'not found"가 표시됩니다. 아마 rgb에 다시 쓰는 것이 더 쉬울 수도 있습니까? – user3761002

+0

@ 대니얼, 맞아, 나는 그것을 본능적으로 png 파일로 썼다. 조만간 jpg로하는 방법을 살펴 보겠습니다. – svastiKaThluhu

0

당신이 인덱스 이미지와 3 채널 이미지를 구분해야합니다. 인덱싱 된 이미지는 [0,1] 범위의 각 값이 하나의 색과 관련되는 n * m * 1 이미지입니다. 이 연관성을 컬러 맵이라고하며, 예를 들어 HSV 또는 RGB의 단위 원이 될 수 있습니다. 이것은 imwrite을 map 매개 변수와 함께 사용하여 작성할 수 있지만 원하는 것은 아닙니다.

분명히 원하는 것은 HSV 인코딩 이미지입니다. 즉, 3 개의 rgb 채널이 3 개의 HSV 채널로 변환됩니다. 이것은 (내가 아는 한) 불가능합니다. imwrite의 문서를 살펴보면 CMYK로 인코딩 된 이미지가 어떻게 쓰여지는지 알 수 있습니다. 이것은 암시 적으로 n * m * 4 이미지를 전달합니다. HSV를 지원하는 표준 파일 형식이 있습니까? 그렇다면이 형식을 자세히 살펴 보겠습니다.