我是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
如果你能给我任何有用的提示,我将非常感激..
答案 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')
注意IMHIST显然是如何调整y限制以便处理直方图中的两个不同峰值。
答案 1 :(得分:0)
我不确定我是否理解你的目标。尝试替换
figure,plot(d,c);
与
figure,bar(d,c);