Differences

This shows you the differences between two versions of the page.

Link to this comparison view

matlab [2013/07/04 08:45] (current)
Line 1: Line 1:
 +====== MATLAB-Stuff ======
 +  * [[code:​matlab:​main.m|my rudimentary file skeleton]]
  
 +===== Code and other snippets =====
 +==== Write a multipage TIFF ====
 +<code MATLAB>
 +for i=1:100
 +    a(:,:,​i)=rand(256);​
 +    imwrite(a(:,:,​i),'​file.tif',​ '​writemode',​ '​append'​)
 +end
 +size(a)
 +</​code>​
 +Adapted from [[http://​www.mathworks.com/​support/​solutions/​en/​data/​1-6EWKKN/​index.html?​product=ML&​solution=1-6EWKKN|this MATLAB support question]]. Generates a random 256x256 pixel large image, saves it in the i<​sup>​th</​sup>​ slice of a while looping through i. In the same loop MATLAB writes the slice to a tif-File with the '​append'​ write mode, resulting in a random tif-File with a size of 256x256x100 pixels. ​
 +
 +==== start matlab headless with some file ====
 +  cd filepath
 +  matlab -r file (WITHOUT .m extension!)
 +==== turn off warning about big images ====
 +<code MATLAB>​warning off Images:​initSize:​adjustingMag</​code>​
 +==== Overlay Image over another one ====
 +<code MATLAB>
 +Img = imnoise(phantom(64)); ​  % Load 64 pixel wide Phantom and make it noisy
 +Threshold = graythresh(Img); ​ % calculate Otsu-Threshold
 +BW = im2bw(Img,​Threshold );   % binarize with above Threshold
 + 
 +Color = [155 188 221] % define overlay colour RGB (this is the unibe-presentation color)
 + 
 +Img = im2uint8(mat2gray(Img));​ % separate image into 3 channels
 +red = Img;
 +green = Img;
 +blue = Img;
 + 
 +red(BW) = Color(1); ​   % populate channels with thresholded image
 +green(BW) = Color(2);
 +blue(BW) = Color(3);
 + 
 +Overlay = cat(3, red, green, blue); % make RGB-image
 + 
 +figure % display everything
 +    subplot(131)
 +        imshow(Img,​[])
 +        title('​Original'​)
 +    subplot(132)
 +        imshow(BW,​[])
 +        title(['​Thresholded with: ' num2str(intmax(class(Img))*Threshold) ]); % see http://​www.ana.unibe.ch/​~haberthuer/​matlab#​threshold_image ​
 +    subplot(133) ​   ​
 +        imshow(Overlay,​[])
 +        title('​Overlay'​)
 +</​code>​
 +adapted from [[http://​www.mathworks.com/​matlabcentral/​fileexchange/​15818-upslope-area-functions|upslope area functions]]
 +
 +==== Threshold Image ====
 +And return Human-readable Threshold
 +<code MATLAB>
 +Img = imread('​rice.png'​); ​      % read Image
 +Threshold = graythresh(Img); ​   % calculate Otsu Threshold of Image   
 +BW = im2bw(Img,​Threshold); ​     % Threshold Image
 +Bitdepth = intmax(class(Img)); ​ % Get Bitdepth of Image
 +disp(['​Image has been thresholded with ' num2str(Threshold) ' (grayvalue: ' num2str(Bitdepth*Threshold) '​)'​ ]);
 +figure
 +    subplot(121)
 +        imshow(Img)
 +        title('​Original'​)
 +    subplot(122)
 +        imshow(BW)
 +        title(['​Thresholded with: ' num2str(Bitdepth*Threshold) ])
 +</​code>​
 +
 +==== Select Components in a (thresholded) Image ====
 +<code MATLAB>
 +BW = imread('​rice.png'​); ​       % Load Image
 +BW = im2bw(BW,​graythresh(BW)); ​ % Threshold Image with Otsu
 + 
 +% inform user
 +wait=helpdlg('​Select rice corns in the picture. Stop with right mouse button','​Corn Selection'​);​
 +uiwait(wait)
 +
 +% open figure (bwselect outputs figure to screen, so we put it in a subplot
 +% to start with. when right mouse button is pressed, right figure is updated
 +figure;
 +    subplot(121)
 +        BW2 = bwselect(BW);​
 +    subplot(122)
 +        imshow(BW2)
 +</​code>​