資源簡介
基于Matlab的圖像RGB和HIS互換,包含RGB轉為HSI和HSI轉為RGB。
代碼片段和文件信息
function???rgb_hsi(rgb)
%RGB和HIS互相轉換
rgb=im2double(rgb);
%%%%%%RGB轉為HSI
fR=rgb(::1);%獲取R,G,B三個通道
fG=rgb(::2);
fB=rgb(::3);
[mn]=size(fR);
q=zeros(mn);
I=q;
S=I;
H=S;
for??i=1:m
????for?j=1:n
????????A=?(fR(ij)-fG(ij)+fR(ij)-fB(ij))/2;
????????B=((fR(ij)-fG(ij))^2+(fR(ij)-fB(ij))*(fG(ij)-fB(ij)))^(1/2);??????
????????q(ij)=acos(A/(B+eps));%q代表角度θ,色度分量
????????q(ij)=(q(ij)*360/(2*pi))/360;%歸一化
????????I(ij)=(fR(ij)+fG(ij)+fB(ij))/3;%亮度分量I
????????m1=min(fG(ij)fB(ij));
????????m2=min(m1fR(ij));%m2為fG(ij)fB(ij)fR(ij)的最小值
????????S(ij)=1-(3*m2/(fR(ij)+fG(ij)+fB(ij)+eps));%飽和度分量S
????????%計算色度分量
????????if?fG(ij) ?????????????H(ij)=1-q(ij);???????????
????????else????????
?????????????H(ij)=q(ij);
????????end
????end
end
HSI=cat(3HSI);%合成HSI
figuresubplot(234)imshow(rgb)title(‘原RGB圖像‘);
subplot(231)imshow(H)title(‘H波段圖像‘);
subplot(232)imshow(S)title(‘S波段圖像‘);
subplot(233)imshow(I)title(‘I波段圖像‘);
su
評論
共有 條評論