A Scanbox user requested to add the ability to display a histogram of image values in real-time.
Here, I use a the general mechanism of memory mapped files in Scanbox to show how easy is to add such “plug-ins” to provide additional functionality to the system.
The Matlab code necessary to add real-time histograms in Scanbox is very concise and commented below:
% Display real-time histogram in Scanbox % Prepare the figure for display close all; h=figure(1); h.MenuBar = 'None'; h.NumberTitle = 'off'; h.Name = 'Scanbox ChA real time histogram'; drawnow; % Open memory-mapped file to have access to image stream mmfile = memmapfile('scanbox.mmap','Writable',true, ... 'Format', { 'int16' [1 16] 'header' } , 'Repeat', 1); % Some parameters for display nframes = 5; % how often we want to display histogram nbins = 128; % how many bins in the histogram margin = 20; % size of the margins to crop around the central ROI % Start processing until Scanbox stops... k = 0; flag = 1; % Necessary to set image format the first time while(true) while(mmfile.Data.header(1)<0) % wait for a new frame to arrive if(mmfile.Data.header(1) == -2) % exit if Scanbox finished acquiring data return; end end if(flag) % First time? Format chA according to lines/columns in header mmfile.Format = {'int16' [1 16] 'header' ; ... 'uint16' double([mmfile.Data.header(2) mmfile.Data.header(3)]) 'chA'}; flag = 0; end if(mod(k,nframes==0)) % update histogram every k frames imhist(intmax('uint16')-mmfile.Data.chA(margin:end-margin,margin:end-margin),nbins); % display histogram drawnow; end mmfile.Data.header(1) = -1; % signal Scanbox that frame has been consumed! k = k+1; end clear(mmfile) % close memory-mapped file
That’s all…
Check the mmap configuration variable is 1 and start Scanbox.
Open a new Matlab process and run the script above.
Start scanning and you should see a real-time histogram being displayed, each of the frames will look like this:
You can add other features to this script, such as displaying the number of pixels saturated, and so on.
Importantly, notice that the memory-mapped mechanism can easily be accessed by plug-ins written in other languages, like Python, so you are not bound to use Matlab.
If you develop useful real-time plug-ins for Scanbox let us know and we will include them as part of the future releases.