MATLAB: How to add a histogram to a live video preview

histogramimage acquisitionImage Acquisition Toolboximage processingmatlab gui

Hi I'm working on a project where I've created a custom GUI and connected the axes (axes1) to an external camera when a button is pushed and on the same button push a live histogram of the preview image should come up in a different axes. I have gotten the preview to appear and the histogram to appear, however, the histogram does not update itself automatically when the preview image is changed. I've tried everything and need a direction to go on with this. Here's my code below for just the button I'm trying to get working:
function pushbutton1_Callback(hObject, eventdata, handles)
handles = guidata(hObject);
imaqmex('feature', '-previewFullBitDepth', true);
axes(handles.axes1)
vid = videoinput('Camera_source_1', 1, 'MONO16_BIN2x2_1024x1024_SlowMode');
src = getselectedsource(vid);
vidres = vid.VideoResolution;
imWidth = vidres(1);
imHeight = vidres(2);
nBands = vid.NumberOfBands;
himage = image(zeros(imHeight,imWidth, nBands), 'Parent', handles.axes1);
figSize = get(handles.axes1, 'Position');
figWidth = figSize(3);
figHeight = figSize(4);
gca.unit = 'pixels';
gca.position = [((figWidth - imWidth)./2)...
((figHeight - imHeight)./2)...
imWidth imHeight];
vid.FramesPerTrigger = Inf;
src.ExposureTime = user_val(1);
im = preview(vid, himage);
ax = im.Parent;
im.CDataMapping = 'scaled';
colormap(ax, gray);
signalRange = [30 2000];
ax.CLim = signalRange;
axes(handles.axes2)
himage.CData = im.CData;
set(himage, 'CData', im.CData);
imhist(himage.CData, 128)
grid on
grid minor
drawnow
preview(vid, himage)
guidata(hObject, handles);

Best Answer

I think you're going to have to get a snapshot with getsnapshot() and then histogram that.