优秀的手机游戏下载!
首页 如何用matlab画直方图

如何用matlab画直方图

发布时间:2024-09-06 10:57:15 编辑:手游哥 浏览:513

matlab中,绘制二维直方图的函数是bar,绘制三维直方图的函数是bar3,以下分别列出其用法:

调用格式:bar(x,y,选项) ,其中,x,y是维数相同的矩阵或者向量,配对的x,y按对应的列元素为横纵坐标绘制,选项是一些绘图控制选项,可选;

例如,绘制y=2exp(-0.5x)的条形图

bar3(x,y)或者bar3(y),前者在x指定的位置上绘制y中元素的条形图,后者y的每一个元素对应于一个条形。

matlab 直方图的运用

不同的数据会显示不同的直方图,以imhist为例,直方图及代码如下。

利用matlab计算图像直方图函数为imhist()

具体用法:

imhist(i)直接显示图像i的灰度直方图;

imhist(i,n)n为指定灰度级显示直方图;

[count,x]=imhist(i)获取直方图信息,count为每一级灰度像素个数,x为灰度级,x也可以在imhist(i,x)中指定,可以通过stem(x,count)画相应直方图;

代码应用:

i=imread(’F:\Myfile\Matlab\Test_picture\0_1.jpg’)

imshow(i)

figure

imhist(i)

figure

imhist(i,32)

figure

[count,x]=imhist(i,32)

stem(x,count)

matlab直方图规定化

最简单的是你在VC下调用matlab引擎,然后在VC下直接写matlab画直方图的代码。你的VC下的是在编辑框里输入数字的话,baidu里可以搜到很多这样的文章。matlab下画直方图的命令应该是bar吧,按你的要求直接输入bar(x,x)就行了,x是你要输入的各个数字,要考虑到你还要把数字拆分的问题………………

如何用Matlab实现直方图规定化

直方图就是统计图片不同值分布得到的柱状图

由于图像采集等因素,有时候图片的直方图分布是很不均匀的

例如照片过分曝光那么直方图分布就偏向于值大的

如果曝光不足,就会使得分布偏向于小的值

无论是偏向于大值和小值,都会使得图像的明暗对比减弱

直方图均衡就是通过不同的阈值划分,使得最终图像像素的灰度分布趋于平均

从而达到增强图像对比的目的

而直方图规定化,并不是简单地让直方图趋于平均分布,而是趋于某种特定函数关系的分布

实际上直方图均很化在某种程度上也是一种直方图规定化,

也就是把新的直方图规定为平均分布的函数

直方图均很化,在通常的图像处理中都能起到一定的图像增强作用

它的使用胜在方便,你不要给更多的参数,根据输入的图片就能够实现正方图均衡化

但是在一些特殊的场合,均匀的直方图不一定是最适合的,我们可能需要符合某种分布的直方图

所以就有了直方图规定化

一个例子是图像匹配

我们可能前后得到了两张有一定区域重叠的照片,我们想使它们匹配并拼接起来

(例如很多卫星图像的拼接)

但是前后两张照片的曝光情况可能相差很远,

那么在图像匹配之前我们就需要做点什么,让两张图像的明暗对比更接近

这个时候就可以用到直方图规定化

我们可以先获得一副图片的直方图,那它的直方图分布我们就知道了

然后在用直方图规定化,将另一张图像的直方图尽量向第一幅图像靠拢

然后再进行图像匹配成功率就更高了。

在matlab里直方图均衡化和规定化都可以通过函数histeq实现

在直方图均衡化时用

histeq(I,n)这里I是输入的图像矩阵,n是输出矩阵的灰度等级个数

而规定化的时候histeq(I,hgram),其中hgram是某个特定的直方图

程序在这边,就不贴实验图片了

clear all

close all

f= imread(’2.jpg’)

I=double(f) [m,n]=size(I)

H=zeros(1,256)

for i=1:m

for j=1:n

H(I(i,j)+1)=H(I(i,j)+1)+1 %求各灰度级的像素数

end

end

s=zeros(1,256)t=zeros(1,256)

for i=1:256

s(i)=H(i)/(m*n) %求各灰度级的频率

% for j=1:i

% t(i)=t(i)+s(j) %求累计频率的和

%end

end

% 原始直方图的累积直方图

histc = cumsum(s)

% 规定直方图的累积直方图

J=imread(’1.jpg’) h=rgb2gray(J) g=imhist(h)

matchhist=g/(m*n)

matchhistc = cumsum(matchhist)

N = length(matchhist)

M = double(intmax(class(f))) + 1

% 映射的实现

tk = zeros(1,M)% 映射关系hist–&gttk

如何用matlab画直方图

%if strcmp(mapl,’SML’) 以下为单映射规则(‘SML’)

tk(1) = 1

linit = 2

kinit = 0

for k = 1:M %删除histc(k)=0的单元

if histc(k) == 0

kinit = kinit + 1

else

break

end

end

% 标记为SML为零的位置

indis0 = zeros(1,N)

for k = kinit:M

mappingL = zeros(size(matchhist))

% 为节省运算量而修改

for l = linit:N % 规定直方图从上一次最小处计算,节省运算时间

if matchhistc(l) == matchhistc(l – 1) %去掉相等为0的单元

continue

end

mappingL(l) = abs(histc(k) – matchhistc(l))

if mappingL(l) == 0

indis0(linit) = 1

end

end

mappingL(N) = abs(histc(k) – matchhistc(N))

indtemp1 = find(mappingL == 0)

indtemp2 = find(indis0 == 1)

mappingL(setdiff(indtemp1,indtemp2)) = inf

[minmap,tk(k)] = min(mappingL(linit:N))

linit = tk(k) + linit – 1

tk(k) = linit

for k = 1:kinit – 1

tk(k) = tk(kinit)

end

end

%规定计算有意义

if N &ltM

for k = N:M

tk(k) = N

end

end

histm = zeros(1,N)

for k = 1:M

histm(tk(k)) = histm(tk(k)) + H(k)

end

tk = tk – 1% 方便灰度值的计算

% 图像的规定化

imagematch = zeros(size(f))

for p = 1:size(f,1)

for q = 1:size(f,2)

ind = f(p,q) + 1

imagematch(p,q) = tk(ind)

end

end

subplot(321)

imshow(f)

title(’原始图像’)

subplot(322)

imshow(imagematch)

title(’直方图规定化后图像’)

subplot(323)

bar(H,’g’)

xlabel(’灰度值’)

ylabel(’统计个数’)

title(’原始直方图’)

subplot(324)

bar(histm,’g’)

xlabel(’灰度值’)

ylabel(’统计个数’)

title([’规定化后直方图’])

subplot(3,2,5),a=rgb2gray(f)g=histeq(a,matchhist)imshow(g)title(’图像的规定化’)

subplot(3,2,6),a=rgb2gray(f)g=histeq(a,matchhist)h=imhist(g)plot(h),title(’图像的规定化直方图’)

以上就是关于如何用matlab画直方图全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

matlab中,绘制二维直方图的函数是bar,绘制三维直方图的函数是bar3,以下分别列出其用法: 调用格式:bar(x,y,选项) ,其中,x,y是维数相同的…
查看详情
matlab中,绘制二维直方图的函数是bar,绘制三维直方图的函数是bar3,以下分别列出其用法: 调用格式:bar(x,y,选项) ,其中,x,y是维数相同的…
查看详情
matlab中,绘制二维直方图的函数是bar,绘制三维直方图的函数是bar3,以下分别列出其用法: 调用格式:bar(x,y,选项) ,其中,x,y是维数相同的…
查看详情
相关资讯
猜你喜欢