Функция истории Matlab для данных изображения - PullRequest
3 голосов
/ 13 сентября 2011

Я новичок в 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 ]

3 голосов
/ 21 сентября 2011

Вот моя попытка реализовать функцию 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, чтобы справиться с двумя различными пиками в гистограмме.

0 голосов
/ 13 сентября 2011

Я не уверен, что понимаю вашу цель.Попробуйте заменить

figure,plot(d,c);

на

figure,bar(d,c);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...