Note that there are some explanatory texts on larger screens.

plurals
  1. POImage manipulation with Matlab - intensity and tif image
    text
    copied!<p>I have to analyse a set of images, and these are the operations I need to perform:</p> <ol> <li>sum another set of images (called open beam in the code), calculate the median and rotate it by 90 degrees;</li> <li>load a set of images, listed in the file "list.txt";</li> <li>the images have been collected in groups of 3. For each group, I want to produce an image whose intensity values are 3 times the image median above a certain threshold and otherwise equal to the sum of the intensity values;</li> <li>for each group of three images, subtract the open beam median (calculated in 1.) from the combined image (calculated in 3.)</li> </ol> <p>Considering one of the tifs produced using the process above, I have that the maximum value is 65211, which is not 3* the median for the three images of the corresponding group (I checked considering the pixel position). Do you have any suggestion on why this happens, and how I could fix it?</p> <p>The code is reported below. Thanks!</p> <pre><code>%Here we calculate the average for the open beam clear; j = 0; for i=1:5 s = sprintf('/Users/Alberto/Desktop/Midi/17_OB_2.75/midi_%04i.fits',i); j = j+1; A(j,:,:) = uint16(fitsread(s)); end OB_median = median(A,1); OB_median = squeeze(OB_median); OB_median_rot=rot90(OB_median); %Here we calculate, for each projection, the average value from the three datasets %Read list of images from text file fid = fopen('/Users/Alberto/Desktop/Midi/list.txt', 'r'); a = textscan(fid, '%s'); fclose(fid); %load images j = 0; for i = 1:1:42 %556 entries; 543 valid values s = sprintf('/Users/Alberto/Desktop/Midi/%s',a{1,1}{i,1}); j = j+1; A(j,:,:) = uint16(fitsread(s)); end threshold = 80 %This is a discretional number. I put it after noticing %that we get the same number of pixels with a value &gt;100 if we use 80 or 50. k = 0; for ii = 1:3:42 N(1,:,:) = A(ii,:,:); N(2,:,:) = A(ii+1,:,:); N(3,:,:) = A(ii+2,:,:); median_N = median(N,1); median_N = squeeze(median_N); B(:,:) = zeros(2160,2592); for i = 1:1:2160 for j = 1:1:2592 RMS(i,j) = sqrt((double(N(1,i,j).^2) + double(N(2,i,j).^2) + double(N(3,i,j).^2))/3); if RMS(i,j) &gt; threshold %B(i,j) = 30; B(i,j) = 3*median_N(i,j); else B(i,j) = A(ii,i,j) + A(ii+1,i,j) + A(ii+2,i,j); %B(i,j) = A(ii,i,j); end end end k = k+1; filename = sprintf('/Users/Alberto/Desktop/Midi/Edited_images/Despeckled_images/despeckled_image_%03i.tif',k); %Now we rotate the matrix B_rot=rot90(B); imwrite(B_rot, filename); %imwrite(uint16(B_rot), filename); %Now we subtract the OB median B_final_rot = double(B_rot) - 3*double(OB_median_rot); filename = sprintf('/Users/Alberto/Desktop/Midi/Edited_images/Final_image/final_image_%03i.tif',k); imwrite(uint16(B_final_rot), filename); end </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload