Matlab 输出是否在中值和均值滤波器中产生相同的图像
我有两个问题 首先,如果我将图像从RGB模型转换为HSI模型,图像的颜色看起来是否不同Matlab 输出是否在中值和均值滤波器中产生相同的图像,matlab,image-processing,Matlab,Image Processing,我有两个问题 首先,如果我将图像从RGB模型转换为HSI模型,图像的颜色看起来是否不同 其次,我在matlab中使用pepper.png图像,我的目标是首先将RGB图像转换为HSI模型。然后我必须在RGB模型和HSI模型中对同一图像使用中值和均值滤波。在做了所有这些之后,我发现在RGB模型上使用均值滤波时的输出图像并不等于在同一图像上使用均值滤波时的输出图像,而是在HSI模型中。。。这是正确的输出吗?当在RGB模型中的图像上使用mean filter时,与在HSI模型中的相同图像上使用mean
其次,我在matlab中使用pepper.png图像,我的目标是首先将RGB图像转换为HSI模型。然后我必须在RGB模型和HSI模型中对同一图像使用中值和均值滤波。在做了所有这些之后,我发现在RGB模型上使用均值滤波时的输出图像并不等于在同一图像上使用均值滤波时的输出图像,而是在HSI模型中。。。这是正确的输出吗?当在RGB模型中的图像上使用mean filter时,与在HSI模型中的相同图像上使用mean filter时,是否会产生不同的图像?回答第一个问题:
模型是不同的颜色空间-对于(大约)相同的颜色有不同的数学表示。
要在计算机显示器上显示图像,必须将其转换为彩色模式(也支持其他模式),但不能在HSI颜色空间中显示图像。
备注:不必担心RGB和sRGB的差异。Matlab假设图像在sRGB颜色空间中(RGB和sRGB相等) 检查以下代码:
RGB = imread('peppers.png');
RGB = double(RGB)/255; %Convert pixels range [0, 255] to range [0, 1].
HSI = rgb2hsi(RGB); %Convert RGB to HSI
RGB2 = hsi2rgb(HSI); %Convert HSI back to RGB
max(abs(RGB(:) - RGB2(:))) %Calculate maximum absolute difference.
RGB = imread('peppers.png');
RGB = double(RGB)/255;
HSI = rgb2hsi(RGB);
h = 1/9*ones(3);
%Filter RGB and HSI images (convolution of each color plane with h).
filtRGB = imfilter(RGB, h);
filtHSI = imfilter(HSI, h);
%Convert filtered HSI to RGB format.
filtRGB2 = hsi2rgb(filtHSI);
max(abs(filtRGB(:) - filtRGB2(:)))
差异是8.8818e-16
结论:将RGB转换为HSI并返回,不会改变颜色
要执行代码,请下载:
对第二个问题的回答:
“不等于”是正确的,因为RGB到HSI的转换是不正确的。
过滤R、G和B与过滤H、S和I以及转换回RGB(操作顺序很重要)不同 “均值过滤”的定义不明确。
我想你的意思是在每个颜色通道上分别应用简单的3x3平均过滤器。
见:h 检查以下代码:
RGB = imread('peppers.png');
RGB = double(RGB)/255; %Convert pixels range [0, 255] to range [0, 1].
HSI = rgb2hsi(RGB); %Convert RGB to HSI
RGB2 = hsi2rgb(HSI); %Convert HSI back to RGB
max(abs(RGB(:) - RGB2(:))) %Calculate maximum absolute difference.
RGB = imread('peppers.png');
RGB = double(RGB)/255;
HSI = rgb2hsi(RGB);
h = 1/9*ones(3);
%Filter RGB and HSI images (convolution of each color plane with h).
filtRGB = imfilter(RGB, h);
filtHSI = imfilter(HSI, h);
%Convert filtered HSI to RGB format.
filtRGB2 = hsi2rgb(filtHSI);
max(abs(filtRGB(:) - filtRGB2(:)))
差异为0.7774
结论:滤除RGB颜色空间和HSI颜色空间不相等
区别在哪里
%Convert filtered RGB to HSI
filtHSI2 = rgb2hsi(filtRGB);
diffH = abs(filtHSI2(:,:,1) - filtHSI(:,:,1));
diffS = abs(filtHSI2(:,:,2) - filtHSI(:,:,2));
diffI = abs(filtHSI2(:,:,3) - filtHSI(:,:,3));
figure;imshow(diffH);title('diffH');impixelinfo
figure;imshow(diffS);title('diffS');impixelinfo
figure;imshow(diffI);title('diffI');impixelinfo
差异:差异:
差异:
结论:
H的差异很大,S的差异很小,I的差异不大 I没有差异的原因是因为
I=(R+G+B)/3
I
转换是线性变换(卷积是olso线性变换)
示例:假设3x3像素
r00 r01 r02 g00 g01 g02 b00 b01 b02
r10 r11 r12 g10 g11 g12 b00 b01 b02
r20 r21 r22 g21 g21 g22 b00 b01 b02
先筛选:过滤器=(r00+r01+r02+r10+r11+r12+r20+r21+r22)/9
过滤=(g00+g01+g02+g10+g11+g12+g20+g21+g22)/9
过滤器B=(b00+b01+b02+b10+b11+b12+b20+b21+b22)/9
转换为强度:
filtI2=(filter+filtG+filtB)/3
==>filtI2=((r00+r01+r02+r10+r11+r12+r20+r21+r22)/9+(g00+g01+g02+g10+g11+g12+g20+g21+g22)/9+(b00+b01+b02+b10+b11+b12+b20+b21+b22)/9)/3
==>filtI2=((r00+r01+r02+r10+r11+r12+r20+r21+r22)+(g00+g01+g02+g10+g11+g12+g20+g21+g22)+(b00+b01+b02+b10+b11+b12+b20+b22))/27 先转换为强度:
i00=(r00+g00+b00)/3,i01=(r01+g01+b01)/3,i02=(r02+g02+b02)/3。。。i22=(r22+g22+b22)/3 过滤器I:
过滤器=(i00+i01+i02+…+i22)/9
==>filtI=((r00+g00+b00)/3+(r01+g01+b01)/3+…+(r22+g22+b22)/3)/9
==>filtI=((r00+r01+r02+r10+r11+r12+r20+r21+r22)+(g00+g01+g02+g10+g11+g12+g20+g21+g21+g22)+(b00+b02+b10+b11+b12+b20+b22))/27 正如您所看到的filtI Equals filtI2(顺序无关紧要) 对H(色调)尝试相同的颜色:
参见
rgb2hsi.m
中的H公式:H(nz)=atan2(b(nz),a(nz))*(180/pi)代码>
H(H对第一个问题的回答:
模型是不同的颜色空间-对于(大约)相同的颜色有不同的数学表示。
要在计算机显示器上显示图像,必须将其转换为彩色模式(也支持其他模式),但不能在HSI颜色空间中显示图像。
备注:不要担心RGB和sRGB的差异。Matlab假设图像在sRGB颜色空间中(RGB和sRGB相等)
检查以下代码:
RGB = imread('peppers.png');
RGB = double(RGB)/255; %Convert pixels range [0, 255] to range [0, 1].
HSI = rgb2hsi(RGB); %Convert RGB to HSI
RGB2 = hsi2rgb(HSI); %Convert HSI back to RGB
max(abs(RGB(:) - RGB2(:))) %Calculate maximum absolute difference.
RGB = imread('peppers.png');
RGB = double(RGB)/255;
HSI = rgb2hsi(RGB);
h = 1/9*ones(3);
%Filter RGB and HSI images (convolution of each color plane with h).
filtRGB = imfilter(RGB, h);
filtHSI = imfilter(HSI, h);
%Convert filtered HSI to RGB format.
filtRGB2 = hsi2rgb(filtHSI);
max(abs(filtRGB(:) - filtRGB2(:)))
差异是8.8818e-16
结论:将RGB转换为HSI并返回,不会改变颜色
要执行代码,请下载:
对第二个问题的回答:
“不等于”是正确的,因为RGB到HSI的转换是不正确的。
过滤R、G和B与过滤H、S和I以及转换回RGB(操作顺序很重要)不同
“均值过滤”的定义不明确。
我想你的意思是在每个颜色通道上分别应用简单的3x3平均过滤器。
见:h
检查以下代码:
RGB = imread('peppers.png');
RGB = double(RGB)/255; %Convert pixels range [0, 255] to range [0, 1].
HSI = rgb2hsi(RGB); %Convert RGB to HSI
RGB2 = hsi2rgb(HSI); %Convert HSI back to RGB
max(abs(RGB(:) - RGB2(:))) %Calculate maximum absolute difference.
RGB = imread('peppers.png');
RGB = double(RGB)/255;
HSI = rgb2hsi(RGB);
h = 1/9*ones(3);
%Filter RGB and HSI images (convolution of each color plane with h).
filtRGB = imfilter(RGB, h);
filtHSI = imfilter(HSI, h);
%Convert filtered HSI to RGB format.
filtRGB2 = hsi2rgb(filtHSI);
max(abs(filtRGB(:) - filtRGB2(:)))
差异为0.7774
结论:滤除RGB颜色空间和HSI颜色空间不相等
区别在哪里
%Convert filtered RGB to HSI
filtHSI2 = rgb2hsi(filtRGB);
diffH = abs(filtHSI2(:,:,1) - filtHSI(:,:,1));
diffS = abs(filtHSI2(:,:,2) - filtHSI(:,:,2));
diffI = abs(filtHSI2(:,:,3) - filtHSI(:,:,3));
figure;imshow(diffH);title('diffH');impixelinfo
figure;imshow(diffS);title('diffS');impixelinfo
figure;imshow(diffI);title('diffI');impixelinfo
差异:
差异:
差异:
结论:
H的差异很大,S的差异很小,I的差异不大
I没有差异的原因是因为I=(R+G+B)/3
I
转换是线性变换(卷积是olso线性变换)
示例:
假设3x3像素
r00 r01 r02 g00 g01 g02 b00 b01 b02
r10 r11 r12 g10 g11 g12 b00 b01 b02
r20 r21 r22 g21 g21 g22 b00 b01 b02
先筛选:
过滤器=(r00+r01+r02+r10+r11+r12+r20+r21+r22)/9
过滤=(g00+g01+g02+g10+g11+g12+g20+g21+g22)/9
过滤器B=(b00+b01+b02+b10+b11+b12+b20+b21+b22)/9
转换为强度:
filtI2=(filter+filtG+filtB)/3
==>filtI2=((r00+r01+r02+r10+r11+r12+r20+r21+r22)/9+(g00+g01+g02+g10+g11+g12+g20+g21+g22)/9+(b00+b01+b02+b10+b11+b12+b20+b21+b22)/9)/3
==>filtI2=((r00+r01+r02+r10+r11+r12+r20+r21+r22)+(g00+g01+g02+g10+g11+g12+g20+g21+g22)+(b00+b01+b02+b10+b11)+