用于图像数据的Matlab hist函数

时间:2011-09-13 11:35:33

标签: image matlab function image-processing plot

我是Matlab的新手,我想创建自己的功能,与imhist做同样的工作(显示图像数据的直方图),但我是一个完全新手,我没有任何线索,我怎么样?我要发展这样的功能.. 我开始做一些东西,但它非常不完整。

function [ output_args ] = myhist( x )
%MYHIST Summary of this function goes here
%Detailed explanation goes here

x=imread('flower.jpg');

imshow(x);

[c,d]=hist(x(:),0:1:255);
figure,plot(d,c);
figure,plot(c,d);

%figure,imhist(x);
 end

如果你能给我任何有用的提示,我将非常感激..

2 个答案:

答案 0 :(得分:3)

这是我尝试实现IMHIST功能。它不处理官方函数所做的所有情况,但在大多数情况下它应该产生非常相似的结果:

function myimhist(img)
    img = im2uint8(img);

    [count,bin] = hist(img(:), 0:255);
    stem(bin,count, 'Marker','none')

    hAx = gca;
    set(hAx, 'XLim',[0 255], 'XTickLabel',[], 'Box','on')

    %# create axes, and draw grayscale colorbar
    hAx2 = axes('Position',get(hAx,'Position'), 'HitTest','off');
    image(0:255, [0 1], repmat(linspace(0,1,256),[1 1 3]), 'Parent',hAx2)
    set(hAx2, 'XLim',[0 255], 'YLim',[0 1], 'YTick',[], 'Box','on')

    %# resize the axis to make room for the colorbar
    set(hAx, 'Units','pixels')
    p = get(hAx, 'Position');
    set(hAx, 'Position',[p(1) p(2)+26 p(3) p(4)-26])
    set(hAx, 'Units','normalized')

    %# position colorbar at bottom
    set(hAx2, 'Units','pixels')
    p = get(hAx2, 'Position');
    set(hAx2, 'Position',[p(1:3) 26])
    set(hAx2, 'Units','normalized')

    %# link x-limits of the two axes
    linkaxes([hAx;hAx2], 'x')
    set(gcf, 'CurrentAxes',hAx)
end

让我们用样本图像进行测试:

I = imread('coins.png');
figure(1), myimhist(I), title('myimhist')
figure(2), imhist(I), title('imhist')

myimhist imhist

注意IMHIST显然是如何调整y限制以便处理直方图中的两个不同峰值。

答案 1 :(得分:0)

我不确定我是否理解你的目标。尝试替换

figure,plot(d,c);

figure,bar(d,c);