数字图像处理--------进阶(编写函数完成需求)

两个需求

1.编写一个程序, 利用对比度拉伸函数, 提取图像的高亮度区域。

代码展示:

image = imread('C:\Users\86158\Desktop\matlab\flower.jpg');
% 将图像转换为灰度图像
gray_image = rgb2gray(image);
% 计算图像的最小和最大灰度值
min_gray = min(gray_image(:));
max_gray = max(gray_image(:));
% 对比度拉伸函数
stretched_image = ((gray_image) - min_gray) ./ (max_gray - min_gray) * 255;
% 显示原始图像和拉伸后的图像
figure;
subplot(1, 2, 1);
imshow(gray_image);
title('原始图像');
subplot(1, 2, 2);
imshow(uint8(stretched_image));
title('拉伸后的图像');

逐行解析代码(我的理解)

1.首先,利用上个博客中提到的imread函数读入图片,并存入到数组image中

image = imread('C:\Users\86158\Desktop\matlab\flower.jpg');

2.然后利用rgb2gray函数将图像转为灰度图像并存储在gray_image中

gray_image = rgb2gray(image);

3.然后调用matlab内置函数min和max函数分别计算出gray_image图像中最小和最大灰度值其中[(:) 是 MATLAB 中的一种运算符,可以将数组或者矩阵展开为一维向量。这样方便计算灰度最小值和最大值。]

min_gray = min(gray_image(:));
max_gray = max(gray_image(:));

4.接着,通过将 gray_image 减去最小灰度值 min_gray,可以将图像的最小灰度值变为0。然后通过除以最大灰度值 max_gray 减去最小灰度值 min_gray,可以将图像的灰度值范围缩放到0-1之间。最后,通过乘以255,可以将图像的灰度值范围映射到0-255之间,就可以实现对比度拉伸。 结果存储在变量 stretched_image 中,表示经过对比度拉伸后的图像。

% 对比度拉伸函数
stretched_image = ((gray_image) - min_gray) ./ (max_gray - min_gray) * 255;

5.然后后面就接着上个博客提到的.int8(stretched_image) 是将经过对比度拉伸后的图像数据转换为 uint8 类型,即无符号8位整数类型。

figure;
subplot(1, 2, 1);
imshow(gray_image);
title('原始图像');
subplot(1, 2, 2);
imshow(uint8(stretched_image));
title('拉伸后的图像');

成果展示:

2.请编写一个程序,绘制图像的归一化直方图。

代码展示:

I=imread('C:\Users\86158\Desktop\matlab\Lenna.jpg');
G=rgb2gray(I);
[h,w]=size(G);
%imhist获取直方图的灰度级及相应的像素数
[counts,x]=imhist(G);
%用每个灰度级分量像素数除以图像像素总数
counts=counts/(h*w);
%绘制归一化直方图
stem(x,counts)

首先,利用imread函数读入图片,并存入到数组I中,然后利用rgb2gray函数将图像转为灰度图像并存储在G中

I=imread('C:\Users\86158\Desktop\matlab\Lenna.jpg');
G=rgb2gray(I);

[h,w] = size(G)将图像G的高度赋值给变量h,将图像G的宽度赋值给变量w . imhist函数返回两个输出参数:counts和x。counts是一个包含每个灰度级的像素数量的向量。x是一个包含每个灰度级的值的向量。

[h,w]=size(G);
%imhist获取直方图的灰度级及相应的像素数
[counts,x]=imhist(G);

counts = counts / (h * w)的作用是将直方图的每个灰度级分量的像素数除以图像的总像素数,从而得到归一化的直方图。

结果展示:

小结:

1.对比度拉伸操作可以增强图像的对比度,使得图像中的细节更加明显。通过将灰度值范围映射到0-255之间,可以使得图像的亮度变化更加明显,便于观察和分析图像中的细节信息。

2.(:) 是 MATLAB 中的一种运算符,可以将数组或者矩阵展开为一维向量

3.uint8函数将图像数据类型转换为8位无符号整数类型(imshow函数只接受8位无符号整数类型的图像数据)

4.使用stem函数绘制直方图的柱状图时,其中x轴表示灰度级,y轴表示归一化的像素比例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值