欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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是一个值在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);

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

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

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

ylim([ymin ymax]);
xlim([xmin xmax]);
相关标签: Matlab matlab