Matlab之亮度变换及直方图绘制

进入正题之前,先了解一些实用的M函数吧!
该博客是对原来这篇博客的补充https://blog.csdn.net/qq_44790423/article/details/104740105


处理可变数量的输入和\或输出

n = nargin %检测到输入到M函数的参数数目
n = nargout %检测到返回到M函数参数的实际数目
msg = nargchk(low, high, number)

%该函数在number小于low时,返回消息Not enough input parameters; 
%在number大于high时,返回消息Too many input parameters。 
%若number介于low与high之间,则函数nargchk返回个空矩阵。
%若输人参量的数目不正确,则频繁使用函数nargchk可通过函数error来终止程序的执行。
%实际输入参量的数目由函数nargin决定。

举例

T = testhv(f,g)
%nargin返回2, nargout返回1

亮度标度的函数

将输出映射到特定范围

g = gscale(f, method, low, high)
%f是将被标度的图像
%method的有效值为'fu118' (默认)'full16'
%前者将输出标度为全范围[0, 255],后者将输出标度为全范围[0.65 535]
%若使用这两个有效值之一 ,则可在两种变换中省略参数low与high

%method的第三个有效值为'minmax',此时,我们必须给出low与high在范围[0, 1]内的值。
%若选用的是'mirnmax',则映射的结果值须在范围[low, high]

直方图绘制

h = imhist(f,b)
%f为输入图像,b为灰度级个数,h为其直方图
p = imhist(f,b)/numel(f)
%numel(f)为数组f中的元素个数,即图像的像素数
%得到归一化的图像

但imhist绘制的都是工具中默认的直方图,而我们实际中会想得到条形图,故可实现

bar(horz,v,width)

%v是一个行向量,它包含将被绘制的点; 
%horz是一个与v有着相同维數的向量,它包含水平标度值的增量;
%width是一个值在01之间的数。若省略horz,则水平轴会从01ength(v)等分为若干个单位。
%当width的值为1时,竖条较明显;
%当width的值为0时,竖条是简单的垂直线,

举例:

I = imread('lena_color_256.tif');
I = rgb2gray(I);
h = imhist(I);
%绘制默认直方图
subplot(221)
imhist(I);

%绘制条形图
subplot(222)
h1 = h(1:10:256);
horz = 1: 10 : 256;
bar(horz, h1);

%用stem绘制
subplot(223)
stem(horz, h1, 'fill');

%用plot绘制
subplot(224)
plot(h);

在这里插入图片描述

补充:
对于坐标轴的设定可以选取特定的函数

ylim('auto','auto');
xlim('auto','auto');

ylim([ymin ymax]);
xlim([xmin xmax]);
发布了96 篇原创文章 · 获赞 224 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44790423/article/details/105475932