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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值