Matlab之亮度变换及直方图绘制
程序员文章站
2024-03-12 15:07:38
...
进入正题之前,先了解一些实用的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是一个值在0和1之间的数。若省略horz,则水平轴会从0至1ength(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]);
推荐阅读