手撕盐焗鸡对rgb图像中值滤波
img=imread('1.JPG');
img=double(img)/255;
[M,N,c]=size(img);
img1=zeros([M,N]);
figure,subplot 121,imshow(img);
img_noi=imnoi(img1,'salt & pepper',0.05);
subplot 122,imshow(img_noi);
img_noi=img_noi+img;
img_hsi=rgb2hsi(img);
img_noi_hsi=rgb2hsi(img_noi);
subplot 231,imshow(img_hsi(:,:,1));
subplot 232,imshow(img_hsi(:,:,2));
公关处理
subplot 233,imshow(img_hsi(:,:,3));
subplot 234,imshow(img_noi_hsi(:,:,1));
subplot 235,imshow(img_noi_hsi(:,:,2));%hsi
subplot 236,imshow(img_noi_hsi(:,:,3));
figure,
subplot 231,imshow(img(:,:,1));
subplot 232,imshow(img(:,:,2));
subplot 233,imshow(img(:,:,3));
subplot 234,imshow(img_noi(:,:,1));%rgb
subplot 235,imshow(img_noi(:,:,2));
subplot 236,imshow(img_noi(:,:,3));
%matlab⾃带的中值滤波函数
img_noi_i=medfilt2(img_noi_hsi(:,:,3),[3,3]);
img_noi_h=medfilt2(img_noi_hsi(:,:,1),[3,3]);
img_noi_s=medfilt2(img_noi_hsi(:,:,2),[3,3]);
%figure,imshow(img_noi_i)
img_noi_hsi2=cat(3,img_noi_hsi(:,:,1),img_noi_hsi(:,:,2),img_noi_i);
环保的标语img_noi_hsi3=cat(3,img_noi_h,img_noi_s,img_noi_i);
img2=hsi2rgb(img_noi_hsi2);
img3=hsi2rgb(img_noi_hsi3);
figure,imshow(img3)%HSI三通道都滤波
figure,subplot 131,imshow(img);
subplot 132,imshow(img_noi);
subplot 133,imshow(img2),title('HSI滤波')%只对I通道滤波
%%⾃编中值滤波函数
img_noi_im=median_filter(img_noi_hsi(:,:,3),[3,3]);
img_noi_hm=median_filter(img_noi_hsi(:,:,1),[3,3]);
img_noi_sm=median_filter(img_noi_hsi(:,:,2),[3,3]);
%figure,imshow(img_noi_i)
img_noi_hsi2m=cat(3,img_noi_hsi(:,:,1),img_noi_hsi(:,:,2),double(img_noi_im));
肺气肿是怎么回事img_noi_hsi3m=cat(3,img_noi_hm,img_noi_sm,img_noi_im);
img2m=hsi2rgb(img_noi_hsi2m);
img3m=hsi2rgb(double(img_noi_hsi3m));
figure,imshow(img3m)%HSI三通道都滤波
figure,subplot 131,imshow(img);
subplot 132,imshow(img_noi);
subplot 133,imshow(img3m),title('HSI滤波')%只对I通道滤波
%rgb
r=img_noi(:,:,1);
g=img_noi(:,:,2);
b=img_noi(:,:,3);
r_m=medfilt2(r,[3,3]);
g_m=medfilt2(g,[3,3]);
b_m=medfilt2(b,[3,3]);
img_m=cat(3,r_m,g_m,b_m);
%rgb⾃编中值滤波函数滤波
r_mz=median_filter(r,[3,3]);
g_mz=median_filter(g,[3,3]);
b_mz=median_filter(b,[3,3]);
img_mz=cat(3,uint8(r_mz),uint8(g_mz),uint8(b_mz));
figure,subplot 131,imshow(img,[]);
subplot 132,imshow(img_noi,[]);
subplot 133,imshow(img_m,[]),title('rgb滤波')%只对rgb通道滤波
潮流短发发型
function hsi = rgb2hsi(rgb)
% hsi = rgb2hsi(rgb)把⼀幅RGB图像转换为HSI图像,
% 输⼊图像是⼀个彩⾊像素的M×N×3的数组,
% 其中每⼀个彩⾊像素都在特定空间位置的彩⾊图像中对应红、绿、蓝三个分量。% 假如所有的RGB分量是均衡的,那么HSI转换就是未定义的。
% 输⼊图像可能是double(取值范围是[0, 1]),uint8或 uint16。
%
% 输出HSI图像是double,苏炳添记录
% 其中hsi(:, :, 1)是⾊度分量,它的范围是除以2*pi后的[0, 1];
% hsi(:, :, 2)是饱和度分量,范围是[0, 1];
% hsi(:, :, 3)是亮度分量,范围是[0, 1]。
% 抽取图像分量
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);
% 执⾏转换⽅程
% 实现H分量
num = 0.5*((r - g) + (r - b));
den = sqrt((r - g).^2 + (r - b).*(g - b));
% 防⽌除数为0
theta = acos(num./(den + eps));
H = theta;
H(b > g) = 2*pi - H(b > g);
H = H/(2*pi);
% 实现S分量
num = min(min(r, g), b);
den = r + g + b;
% 防⽌除数为0
den(den == 0) = eps;
S = 1 - 3.* num./den;
H(S == 0) = 0;
%实现I分量
I = (r + g + b)/3;
% 将3个分量联合成为⼀个HSI图像
hsi = cat(3, H, S, I);
%hsi = H; %分别返回3个分量
%hsi = S;
%hsi = I;
function rgb = hsi2rgb(HSI)
% 将图像从HSI空间转换到RGB空间
% 输⼊参数为hsi图像,输出变量为rgb
% 分别取出H、S、I分量
H=HSI(:,:,1)*2*pi;
S=HSI(:,:,2);
I=HSI(:,:,3);
% 定义R、G、B三个矩阵⼤⼩
R=zeros(size(H));%size(H)求矩阵H的⾏列数,返回2个向量,第⼀个是⾏数,第⼆是列数G=zeros(size(H));
B=zeros(size(H));
% H在[0,120°)区间
sy=find((0<=H)&(H<2*pi/3));
B(sy)=I(sy).*(1-S(sy));
R(sy)=I(sy).*(1+S(sy).*cos(H(sy))./cos(pi/3-H(sy)));
G(sy)=3*I(sy)-(R(sy)+B(sy));
% H在[120°,240°)区间
sy=find((2*pi/3<=H)&(H<4*pi/3));
R(sy)=I(sy).*(1-S(sy));
G(sy)=I(sy).*(1+S(sy).*cos(H(sy)-2*pi/3)./cos(pi-H(sy)));
B(sy)=3*I(sy)-(R(sy)+G(sy));
% H在[240°,360°)区间
sy=find((4*pi/3<=H)&(H<2*pi));
G(sy)=I(sy).*(1-S(sy));
少林达摩B(sy)=I(sy).*(1+S(sy).*cos(H(sy)-4*pi/3)./cos(5*pi/3-H(sy)));
R(sy)=3*I(sy)-(G(sy)+B(sy));
%级联,获取RGB影像
rgb=cat(3,R,G,B);
end
function [ img ] = median_filter( image, m ) %----------------------------------------------
%中值滤波
%输⼊:
%image:原图
%m:模板的⼤⼩3*3的模板,m=3
%输出:
%img:中值滤波处理后的图像
%----------------------------------------------
n = m;
[ height, width ] = size(image);
x1 = double(image);
x2 = x1;
for i = 1: height-n+1
for j = 1:width-n+1
mb = x1( i:(i+n-1), j:(j+n-1) );
ps圆角mb = mb(:);
mm = median(mb);
x2( i+(n-1)/2, j+(n-1)/2 ) = mm;
end
end
% img=uint8(x2);
img = double(x2);
end