【matlab图像处理】图像直方图操作和matlab画图

中国史之【平王东迁】:
公元前771年,因镐京曾遭地震,残破不堪,又接近戎、狄等外患威胁,周平王遂在郑、秦、晋等诸侯的护卫下,将国都东迁至洛邑,东周历史由此开始。
——来源:全历史APP

【路漫漫其修远兮,吾将上下而求索】

今天介绍图像的直方图操作以及用matlab画条形图、杆图和折线图。本内容参考自《实用MATLAB图像和视频处理》第9章。

1、图像直方图显示

在matlab中,显示一幅图像的直方图,可以使用函数imhist。废话少说,直接看代码:

% 显示直方图
I = imread('circuit.tif');
figure, subplot(2,2,1), imshow(I), title('原图')
% 划分为256个灰度级
subplot(2,2,2), imhist(I,256), axis tight, title('直方图')
上面256个灰度级是默认的参数,就是绘制256个直方条的直方图。我们看一下绘制为64和32的效果:
% 划分为64个灰度级
subplot(2,2,3), imhist(I,64), axis tight, title('直方图64级') 

% 划分为256个灰度级
subplot(2,2,4), imhist(I,32), axis tight, title('直方图32级')

可以看到,整体变稀疏了,但是分布整体还是在的。值得注意的是,使用了axis tight这个参数,表示y轴的范围来自数据的范围。

可以看到,划分为256级的时候,y轴最大为2000。划为32级的时候,y轴最大为8000。因为总的像素数不变,划分级数更少,表明每个级数所包含的像素个数增多了。

2、条形图归一化y轴

我们可以探索一下这个问题,对y轴范围进行归一化。

% 归一化
c = imhist(I, 32);
% numel(I)表示该图像的像素数,这里是280x272=76160
c_norm = c / numel(I);
figure, subplot(1,2,1);
% 定制条形图
bar_1 = bar(c);
set(gca, 'XLim', [0 32], 'YLim', [0 max(c)]); % gca是当前轴,设置轴范围
set(gca, 'XTick', [0:8:32], 'YTick', [linspace(0,7000,8) max(c)]); % 设置轴显示数据范围
set(bar_1, 'FaceColor', 'r'), title('条形图'); % 设置颜色和标题

% 显示归一化的图
subplot(1,2,2);
bar_2 = bar(c_norm);
set(gca, 'XTick', [0:8:32], 'YTick', [linspace(0,0.09,10) max(c_norm)])
xlim([0 32]), ylim([0 max(c_norm)])
title('归一化条形图')
set(bar_2, 'FaceColor', 'g')

其中, numel(I)表示该图片的像素总数,280x272=76160。归一化y轴的图片如下:

3、杆图或折线图归一化y轴

另外,我们也可以换一种显示风格,如显示杆图。

% 显示杆图
figure,
subplot(1,2,1), stem(c, 'fill', 'MarkerFaceColor', 'red'), axis tight, title('杆图')
subplot(1,2,2), stem(c_norm, 'fill', 'MarkerFaceColor', 'blue'), axis tight, title('归一化杆图')

显示折线图:

% 显示折线图
figure,
subplot(1,2,1), plot(c), axis auto, title('折线图')
subplot(1,2,2), plot(c_norm), axis auto, title('归一化折线图')

以上是本期内容,建议自己动手来实践一下。如果需要图片和代码,可以关注公众号,回复关键字【matlab代码】即可获得。我会上传到云盘。

【声明】:学习笔记基于互联网上各种学习资源的个人整理。

以上是本期内容,下期介绍图像处理的直方图均衡化操作。

我叫小保,一名计算机视觉爱好者、学习者、追随者,欢迎关注我【CV之道】一起学习。

  • 18
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MATLAB中可以使用`histogram`函数绘制直方图,也可以使用`hist`函数进行绘制。下面分别介绍这两个函数的用法。 1. 使用`histogram`函数绘制直方图 `histogram`函数可以直接将数据绘制成直方图,并可以对直方图的颜色、边界等进行设置。函数的基本语法如下: ``` histogram(X) ``` 其中,X为需要绘制直方图的数据。除此之外,还有许多其他的参数可以进行设置,如设置直方图的边界、颜色、透明度等。更详细的用法可以参考MATLAB的官方文档。 例如,下面的代码可以绘制一个由随机数生成的1000个数据点的直方图: ``` X = randn(1000,1); % 生成1000个随机数 histogram(X) % 绘制直方图 ``` 2. 使用`hist`函数绘制直方图 `hist`函数可以将数据划分成若干个区间,并统计每个区间内的数据点个数,最终绘制出直方图。函数的基本语法如下: ``` hist(X,edges) ``` 其中,X为需要绘制直方图的数据,edges为区间的边界。如果不输入edges,则函数会自动根据数据的范围进行区间的划分。除此之外,还有许多其他的参数可以进行设置,如设置直方图的颜色、透明度等。更详细的用法可以参考MATLAB的官方文档。 例如,下面的代码可以绘制一个由随机数生成的1000个数据点的直方图: ``` X = randn(1000,1); % 生成1000个随机数 edges = -4:0.5:4; % 设置区间边界 hist(X,edges) % 绘制直方图 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackkoLing

感谢你的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值