直方图
f=imread('test.tif');
h=imhist(f,b);
其中,b是关键,横坐标是灰度级,纵坐标是像素数
例如:若f图像矩阵元素是uint8类型,即[0,255],
此时若b=2,则将横坐标平均划为两个区间[0.127],[128,255],分别统计两个区间的所有灰度级的像素数,可用h(1),h(2)来获取两区间的像素数
此时若不写b,则默认横坐标就划分为256个,分别统计每个灰度级的像素数。即等价于b=256
示例:
imhist(f)
figure
imhist(f,3)
条形图
bar(x,y)
示例:
f=imread('Fig0304(a)(breast_digital_Xray).tif');
%将数据划分,x,y的划分区域数必须相等
x=linspace(0,255,25);%定义横坐标
y=imhist(f,25);%定义纵坐标
%区分x=0:25:255和linspace(0,255,25)
%前者0以25的步长累加到255
%后者将[0,255]划分为25个等间隔点(包括0和255)
bar(x,y)
%用户自定义刻度,gca表示当前坐标区或图
set(gca,'xtick',0:50:255)%设置x轴刻度
set(gca,'ytick',0:20000:100000)%设置y轴刻度
%设置图的相关信息
title('图片灰度级分布示意图')
xlabel('灰度级','FontSize',10)
ylabel('像素数','FontSize',10)
针状图
stem(x,y)
基本用法同条形图,示例如下:
f=imread('Fig0304(a)(breast_digital_Xray).tif');
%将数据划分,x,y的划分区域数必须相等
x=linspace(0,255,25);%定义横坐标
y=imhist(f,25);%定义纵坐标
stem(x,y,'fill')
%用户自定义刻度
set(gca,'xtick',0:50:255)%设置x轴刻度
set(gca,'ytick',0:20000:100000)%设置y轴刻度
%设置图的相关信息
title('图片灰度级分布示意图')
xlabel('灰度级','FontSize',10)
ylabel('像素数','FontSize',10)
折线图
plot(x,y)
折线图也是类似,示例如下:
f=imread('Fig0304(a)(breast_digital_Xray).tif');
%将数据划分,x,y的划分区域数必须相等
x=linspace(0,255,25);%定义横坐标
y=imhist(f,25);%定义纵坐标
plot(x,y)
%用户自定义刻度
set(gca,'xtick',0:50:255)%设置x轴刻度
set(gca,'ytick',0:20000:100000)%设置y轴刻度
%设置图的相关信息
title('图片灰度级分布示意图')
xlabel('灰度级','FontSize',10)
ylabel('像素数','FontSize',10)
以上图的相关样式的设置可以查询相关文档
画指定的函数
示例:
fh=@tan;
fplot(fh,[-2 2]) %[-2 2]是指定区间
直方图均衡
也是一种可以增强图像视觉效果的方法,在matlab中对应的工具箱函数为:
g=histeq(f,nlev) 一般nlev=图像的最大灰度级,例256
直方图均衡使用的变换函数是归一化直方图(把灰度级映射到范围[0 1]上)的累加求和,
hnorm=imhist(f)./numel(f); %归一化直方图
cdf=cumsum(hnorm);%累加求和
histeq则比变换函数多了分配这一步骤,该变换函数的目的是为了把输入灰度级较小的部分映射到输出图像较大的灰度级上
实际上直方图均衡的方法是一种全局增强的方法,并不是对所有的图像增强效果都好
例:
处理后的图像产生了“褪色”
出现这种问题可能就需要考虑局部增强的方法了
matlab工具箱函数:g=adapthisteq(f,'name',value),
其中‘name’和value为可选参数
直方图匹配
生成特定直方图的图像的方法
这就需要我们自己合理的选择一些低灰度级的部分变换到高灰度级的部分
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删