Assignment 4 part 1: Make a fake image

From Course Wiki
Revision as of 19:24, 28 September 2017 by Steven Wasserman (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
20.309: Biological Instrumentation and Measurement

ImageBar 774.jpg


Overview

All software has to be tested. In order to test the code you are developing, you will need images of fluorescent microspheres. One idea is to go to the lab and take a few pictures. This is a find idea, but there is a drawback that you don't know the ground truth of those images. In other words, if you are measuring the positions of microspheres on a microscope slide, how will you know if you got it right. An alternative is to generate synthetic images where you know the exact positions of the microspheres. The drawback of this approach is that synthetic images may differ in some important way from the real images that come out of your microscope. It's a good idea to test your code both ways.

Before you start working on your resolution and particle tracking code, let's get started by generating synthetic images.

A useful function: draw a particle

The function below is a useful building block. It draws a single particle on a dark background. To make an image of multiple particles, you can add up the images of several individual particles. You will get funny results if the particles overlap. The function returns a two-dimensional array of doubles. You can specify the location of the particle, its radius, and its intensity as well as the size of the image.

function OutputImage = DrawOneFluorescentMicrosphere( YCenter, XCenter, Radius, Intensity, ImageSizeY, ImageSizeX )
    
    [ x, y ] = meshgrid( 1:ImageSizeX, 1:ImageSizeY );

    distanceFromParticleCenterPixels = hypot(x - XCenter, y - YCenter);
    distanceFromParticleCenterRadiuses = distanceFromParticleCenterPixels ./ Radius;
    mask = ( distanceFromParticleCenterRadiuses < 1 );

    OutputImage = Intensity .* mask .* cos( distanceFromParticleCenterRadiuses .* pi ./ 2 );

end

Remember that MATLAB functions have to be stored in a file that has the same name as the function, appended with ".m" Give the function a try ... type something like: imshow( DrawOneFluorescentMicrosphere( 100, 100, 30, 1, 200, 200 ) ); . Play around with the arguments a bit. It's fun.


Pencil.png

Write a function that will draw a simulated image of multiple particles. The function should take the following arguments:

  • an Nx2 matrix of centroids
  • an Nx1 matrix of intensities
  • a double for the radius of the microspheres
  • a 1 x 2 vector


Modeling optical resolution




function OutputImage =