Step1: 读取图像“pout.tif”,计算并显示图像直方图,利用直接灰度变换法对图像进行灰度变换,实现(1)图像明暗转换(负片图像);(2)将0.3到0.7的灰度级扩展到范围[0 1]。(需要用到的命令为imhist, imadjust); Step2: 读取二进制灰度图像“lab3step2”(图像尺寸是300*400),图像数据类型为“float32”,编码格式为大型机,实现(1)尝试通过线性变换实现灰度范围转换,使其灰度值在[0 255];(2)分别用线性变换,对数变换和指数变换显示图像,并选取合适的参数显示图像(自己认为合适的); Step3:读入并显示彩色图像lena.jpg,实现(1)拆分这幅图像,并分别显示其R,G,B分量;(2)拆分这幅图像,并分别显示其H,S,V分量;(使用RGB2HSV);(3)把该图转化为灰度图显示(rgb2gray); Step4:分别读入二进制文件lab3step4r,lab3step4g, lab3step4b,图像的尺寸是(435*580), 图像数据类型为‘uint8’, 实现(1)合并RGB三个通道显示这幅图;(2)显示这幅图像的R,G,B三分量的直方图,分别进行直方图均衡处理,然后再合并显示图像;(3)将图像转换为H,S,V三分量并分别显示该三分量,然后对V分量进行直方图均衡化,然后重新显示新的图像; Step5:读取图像(“pollen.jpg”),实现图像的均衡化(histeq)和规定化;
时间: 2024-01-24 16:04:57 浏览: 180
Step1:
```
% 读取图像pout.tif
img = imread('pout.tif');
% 计算并显示图像直方图
figure;
imhist(img);
% 图像明暗转换
neg_img = imcomplement(img);
figure;
imshow(neg_img);
% 将0.3到0.7的灰度级扩展到范围[0 1]
adj_img = imadjust(img, [0.3 0.7], [0 1]);
figure;
imshow(adj_img);
```
Step2:
```
% 读取二进制灰度图像lab3step2
fid = fopen('lab3step2', 'r', 'b');
img = fread(fid, [400 300], 'float32');
fclose(fid);
% 尝试通过线性变换实现灰度范围转换,使其灰度值在[0 255]
lin_img = (img - min(img(:))) / (max(img(:)) - min(img(:))) * 255;
figure;
imshow(lin_img, []);
% 线性变换
lin_img = (img - min(img(:))) / (max(img(:)) - min(img(:))) * 255;
figure;
imshow(lin_img, []);
% 对数变换
log_img = log(1 + img) / log(1 + max(img(:)));
figure;
imshow(log_img, []);
% 指数变换
exp_img = 2 .^ (img / max(img(:))) - 1;
figure;
imshow(exp_img, []);
```
Step3:
```
% 读入并显示彩色图像lena.jpg
img = imread('lena.jpg');
figure;
imshow(img);
% 拆分这幅图像,并分别显示其R,G,B分量
r = img(:, :, 1);
g = img(:, :, 2);
b = img(:, :, 3);
figure;
subplot(1, 3, 1);
imshow(r);
title('R');
subplot(1, 3, 2);
imshow(g);
title('G');
subplot(1, 3, 3);
imshow(b);
title('B');
% 拆分这幅图像,并分别显示其H,S,V分量
hsv_img = rgb2hsv(img);
h = hsv_img(:, :, 1);
s = hsv_img(:, :, 2);
v = hsv_img(:, :, 3);
figure;
subplot(1, 3, 1);
imshow(h);
title('H');
subplot(1, 3, 2);
imshow(s);
title('S');
subplot(1, 3, 3);
imshow(v);
title('V');
% 把该图转化为灰度图显示
gray_img = rgb2gray(img);
figure;
imshow(gray_img);
```
Step4:
```
% 分别读入三个二进制文件
r_fid = fopen('lab3step4r', 'r');
r = fread(r_fid, [580 435], 'uint8');
fclose(r_fid);
g_fid = fopen('lab3step4g', 'r');
g = fread(g_fid, [580 435], 'uint8');
fclose(g_fid);
b_fid = fopen('lab3step4b', 'r');
b = fread(b_fid, [580 435], 'uint8');
fclose(b_fid);
% 合并RGB三个通道显示这幅图
rgb_img = cat(3, r', g', b');
figure;
imshow(rgb_img);
% 显示这幅图像的R,G,B三分量的直方图
figure;
subplot(1, 3, 1);
imhist(r);
title('R');
subplot(1, 3, 2);
imhist(g);
title('G');
subplot(1, 3, 3);
imhist(b);
title('B');
% 分别进行直方图均衡处理,然后再合并显示图像
r_eq = histeq(r);
g_eq = histeq(g);
b_eq = histeq(b);
eq_img = cat(3, r_eq', g_eq', b_eq');
figure;
imshow(eq_img);
% 将图像转换为H,S,V三分量并分别显示该三分量
hsv_img = rgb2hsv(rgb_img);
h = hsv_img(:, :, 1);
s = hsv_img(:, :, 2);
v = hsv_img(:, :, 3);
figure;
subplot(1, 3, 1);
imshow(h);
title('H');
subplot(1, 3, 2);
imshow(s);
title('S');
subplot(1, 3, 3);
imshow(v);
title('V');
% 对V分量进行直方图均衡化,然后重新显示新的图像
v_eq = histeq(v);
eq_hsv_img = cat(3, h, s, v_eq);
eq_rgb_img = hsv2rgb(eq_hsv_img);
figure;
imshow(eq_rgb_img);
```
Step5:
```
% 读取图像pollen.jpg
img = imread('pollen.jpg');
% 图像的均衡化
eq_img = histeq(img);
figure;
imshow(eq_img);
% 图像的规定化
ref_img = imread('ref_img.jpg');
ref_img = rgb2gray(ref_img);
eq_img = histeq(img, imhist(ref_img));
figure;
imshow(eq_img);
```
阅读全文