DIP第六章习题解答

数字图像处理 第六章课后作业

文档地址: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);

你可能感兴趣的:(数字图像处理(DIP))