RGB和HSI相互转换 matlab实现 色调域均值滤波
RGB和HSI相互转换 matlab实现 色调域均值滤波。
·
RGB转HSI
function hsi=rgb2hsi(rgb)
% rgb转hsi
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);
theta=acos(0.5*((r-g)+(r-b))./(((r-g).^2+(r-b).*(g-b)).^0.5+eps));
hsi(:,:,1)=(theta.*(b<g+(b==g))+(2*pi-theta).*(b>g))/(2*pi);
hsi(:,:,2)=1-3*(min(min(r,g),b))./(r+g+b+eps);
hsi(:,:,3)=(r+g+b)/3;
HSI转RGB
function rgb=hsi2rgb(hsi)
% hsi转rgb
h=hsi(:,:,1);
s=hsi(:,:,2);
i=hsi(:,:,3);
[m,n,~]=size(hsi);
r=zeros(m,n);
g=zeros(m,n);
b=zeros(m,n);
h=h*2*pi;
hr=(((h>0)+(h==0)).*(h<(2*pi/3)))>0;
hg=(((h>(2*pi/3))+(h==(2*pi/3))).*(h<(4*pi/3)))>0;
hb=(((h>(4*pi/3))+(h==(4*pi/3))).*(h<(2*pi)))>0;
h(hg)=h(hg)-(2*pi/3);
h(hb)=h(hb)-(4*pi/3);
b(hr)=i(hr).*(1-s(hr));
r(hr)=i(hr).*(1+(s(hr).*cos(h(hr))./(cos(pi/3-h(hr))+eps)));
g(hr)=3*i(hr)-(r(hr)+b(hr));
r(hg)=i(hg).*(1-s(hg));
g(hg)=i(hg).*(1+(s(hg).*cos(h(hg))./(cos(pi/3-h(hg))+eps)));
b(hg)=3*i(hg)-(r(hg)+g(hg));
g(hb)=i(hb).*(1-s(hb));
b(hb)=i(hb).*(1+(s(hb).*cos(h(hb))./(cos(pi/3-h(hb))+eps)));
r(hb)=3*i(hb)-(g(hb)+b(hb));
rgb=cat(3,r,g,b);
rgb=uint8(rgb*255);
均值滤波
% 均值滤波
function out=meanfilter(ksize,in)
% 参数分别指定kernel size和原始图像
[h,w,d]=size(in);
if d==1
im=in;
padim=padarray(im,[floor(ksize/2),floor(ksize/2)],'symmetric','both');
for i=1:h
for j=1:w
temp=double(padim(i:i+ksize-1,j:j+ksize-1));
out(i,j)=mean(mean(temp));
end
end
else
for k=1:d
im=in(:,:,k);
padim=padarray(im,[floor(ksize/2),floor(ksize/2)],0,'both');
for i=1:h
for j=1:w
temp=double(padim(i:i+ksize-1,j:j+ksize-1));
out(i,j,k)=mean(mean(temp));
end
end
end
end
end
效果演示
原图
转HSI
在H域做均值滤波
转回RGB

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)