1
작은 Matlab 함수를 작성했습니다.이 이미지는 RGB로 이미지를 가져와 here의 변환 공식에 따라 HSV로 변환합니다.Matlab에서 RGB를 수동으로 HSV로 변환 할 때의 이상한 현상
문제는 색 스펙트럼에 적용 할 때 스펙트럼이 잘리지 않고 일부 값이 잘못되었습니다. 이미지를 봅니다. 비교를 쉽게하기 위해 hsv2rgb()
함수를 사용하여 RGB로 다시 변환했습니다. 이 Matlabs 자신의 기능 rgb2hsv()
으로 발생하지 않습니다하지만 난 내가 잘못 한 일을 찾을 수 없습니다.
이 제 기능
function [ I_HSV ] = RGB2HSV(I_RGB)
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
[MAX, ind] = max(I_RGB,[],3);
if max(max(MAX)) > 1
I_r = I_RGB(:,:,1)/255;
I_g = I_RGB(:,:,2)/255;
I_b = I_RGB(:,:,3)/255;
MAX = max(cat(3,I_r, I_g, I_b),[],3);
else
I_r = I_RGB(:,:,1);
I_g = I_RGB(:,:,2);
I_b = I_RGB(:,:,3);
end
MIN = min(cat(3,I_r, I_g, I_b),[],3);
d = MAX - MIN;
I_V = MAX;
I_S = (MAX - MIN) ./ MAX;
I_H = zeros(size(I_V));
a = 1/6*mod(((I_g - I_b) ./ d),1);
b = 1/6*(I_b - I_r) ./ d + 1/3;
c = 1/6*(I_r - I_g) ./ d + 2/3;
H = cat(3, a, b, c);
for m=1:size(H,1);
for n=1:size(H,2);
if d(m,n) == 0
I_H(m,n) = 0;
else
I_H(m,n) = H(m,n,ind(m,n));
end
end
end
I_HSV = cat(3,I_H,I_S,I_V);
end
코드를 제공 한 것이 좋지만 결과 데이터를 복제하려면 입력 데이터가 필요합니다. 즉,'mod (..., 1)'은'a'를 계산할 때 의심스러워 보입니다. – Justin
@Justin, 입력 데이터는 이미지 "Original spectrum"입니다. 원래 수식은 0에서 360까지의 각도로 색조를 정의합니다. matlab의 값 범위가 0에서 1까지이므로 수식을 적용하려고 시도했지만 실수를했습니다. 문제를 지적 해 주셔서 감사합니다. 해결 방법으로 올바른 코드를 추가하겠습니다. – Kajsa