数字图像处理 第六章课后作业
文档地址:https://download.csdn.net/download/qq_44143405/12549547
如果不能下载请邮件联系(说明来意):[email protected]
第一题
6-7 在彩色 RGB 系统中,每幅 RGB 图像均为12比特图像,共有多少种不同的灰度?
第二题
6-24 怎样才能实现与3.3.2节中匹配(规定)的灰度直方图等效的彩色直方图?
附录含 matlab 实行步骤(含程序)
第三题
6-25 考虑下列 500×500 的 RGB 彩色图像,图像中方框是完全饱和的红色、绿色和蓝色,且每种颜色处在最大亮度[例如,对于红色方框是(1,0,0)]。由该图生成了一幅 HSI 图像。
(a)描述每幅 HSI 分量图像的外观。
(b)用一个 250×250 的平均模板来平滑 HSI 图像的饱和度分量。描述结果的外观(在中,您可通过滤波操作忽略图像的边界效应)。
(c)对色调图像重复(b)
附录含 matlab 实行步骤(含程序)
第二题代码块
程序:
Image1=im2double(imread('lotus.bmp'));
hsi = rgb2hsi(Image1); %将RGB图像转化为HSI空间
h = hsi(:,:,1);
s = hsi(:,:,2);
i = hsi(:,:,3);
NewImage2=histeq(i);
figure,subplot(121),imhist(hsi);title('原图像直方图');
subplot(122),imhist(NewImage2);title('直方图均衡化');
hsi1 = cat(3,h,s,i);
rgb1 = hsi2rgb(hsi1);
hsi2 = cat(3,h,s,NewImage2);
rgb2 = hsi2rgb(hsi2);
figure,subplot(121),imshow(rgb1),title('原图像');
subplot(122),imshow(rgb2),title('均衡化后图像');
第三题代码块
程序:
clear all ;
clc;
%生成红绿蓝格子
rgb_G = zeros(500,500);
rgb_G(1:250,1:250) = 1;
rgb_G(251:500,251:500) = 1;
rgb_R = zeros(500,500);
rgb_R(1:250,251:500) = 1;
rgb_B = zeros(500,500);
rgb_B(251:500,1:250) = 1;
rgb = cat(3,rgb_R,rgb_G,rgb_B);
hsi = rgb2hsi(rgb); %将RGB图像转化为HSI空间
h = hsi(:,:,1);
s = hsi(:,:,2);
i = hsi(:,:,3);
K = fspecial('average',[250 250]); %250*250的平均模板
H = imfilter(h,K,'replicate'); %模糊H分量
hsi1 = cat(3,H,s,i);
rgb1 = hsi2rgb(hsi1);
S = imfilter(s,K,'replicate'); %模糊S分量
hsi2 = cat(3,h,S,i);
rgb2 = hsi2rgb(hsi2);
%显示图像
figure, imshow(rgb), title('RGB彩色图像');
figure; imshow(rgb1,[]),title('H模糊后的图像');
figure; imshow(rgb2,[]),title('S模糊后的图像');
由于matlab 2018b 中没有自带rgb2hsi、hsi2rgb函数,下面附带了这两个函数的源程序。
rgb2hsi函数
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;
hsi2rgb函数
function rgb=hsi2rgb(hsi)
%rgb=hsi2rgb(hsi)把一幅HSI图像转换为RGB图像
%其中HSI是double型
%hsi(:,:,1)是色度分量,它的范围是除以2*pi后在[0,1]内
%hsi(:,:,2)是饱和度分量,它的范围是在[0,1]内
%hsi(:,:,3)是亮度分量,它的范围是在[0,1]内
%输出图像的分量是
%rgb(:,:,1)为红
%rgb(:,:,2)为绿
%rgb(:,:,3)为蓝
%提取HSI的各个分量
hsi=im2double(hsi);%把hsi转化为双精度浮点类型
H=hsi(:,:,1)*2*pi;
S=hsi(:,:,2);
I=hsi(:,:,3);
%执行变换方程
R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));
%RG区(0<=H<2*pi/3)
idx=find((0<=H) & (H<2*pi/3));%寻找0<=H<2*pi/3
B(idx)=I(idx).*(1-S(idx));
R(idx)=I(idx).*(1+S(idx).*cos(H(idx))./cos(pi/3-H(idx)));
G(idx)=3*I(idx)-(R(idx)+B(idx));
%BG区(2*pi/3<=H<4*pi/3)
idx=find((2*pi/3<=H) & (H<4*pi/3));%寻找2*pi/3<=H<4*pi/3
R(idx)=I(idx).*(1-S(idx));
G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx)));
B(idx)=3*I(idx)-(R(idx)+G(idx));
%BR区(4*pi/3<=H<=2*pi)
idx=find((4*pi/3<=H) & (H<=2*pi));%寻找4*pi/3<=H<=2*pi
G(idx)=I(idx).*(1-S(idx));
B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./cos(5*pi/3-H(idx)));
R(idx)=3*I(idx)-(G(idx)+B(idx));
%将3个分量联合成为一个RGB图像
rgb=cat(3,R,G,B);
rgb=max(min(rgb,1),0);