clc;clear all;
%HSI彩色空间的AGV路径识别;需要是路径的图片,效果才好。
%
I=imread('E:\matlabsucaiji\picture\meinv.jpg');
[y,x,z]=size(I);
myI=double(I);
tic
%%%%RGB TO HSI%%%
H=zeros(y,x);
S=H;
HS_I = H;
for i=1:x
for j=1:y
S(j,i)=1-3*min(myI(j,i,:))/(myI(j,i,1)+myI(j,i,2)+myI(j,i,3));%公式
if ((myI(j,i,1)==myI(j,i,2))&&(myI(j,i,2)==myI(j,i,3)))
Hdegree=0;
else
Hdegree=acos(0.5*(2*myI(j,i,1)-myI(j,i,2)-myI(j,i,3))/((myI(j,i,1)-myI(j,i,2))^2+(myI(j,i,1)-myI(j,i,3))*(myI(j,i,2)-myI(j,i,3)))^0.5);
%acos就是反余弦,即1/cos。
end
if(myI(j,i,2)>=myI(j,i,3))
H(j,i)=Hdegree/(2*pi);
else
H(j,i)=(2*pi-Hdegree)/(2*pi);
end
if (H(j,i)>=0.9)
H(j,i)=0;
end
end
end
t=toc;
%%%%slect the white and black%%%%
H=255*H;
S=255*S;
I0=zeros(y,x);
for i=1:x
for j=1:y
if (((H(j,i)<=35&&(S(j,i)>=80))))
I0(j,i)=1;
else
I0(j,i)=0;
end
end
end
SE=strel('rectangle',[12 8]);
IM=imclose(I0,SE);
figure(1);
imshow(I);
figure(3);
imshow(H);
figure,
imshow(S);
figure,imshow(I0);
figure,imshow(IM);