Creating an image filter

I'm currently trying to write a program that will read 80 images, all of the same size, and run each image through a filter/threshold before compiling them all into one single image.
The filter: The images are CT scans and in .jpg format. I am trying to create a high-pass filter or threshold that would assign all values below it(66) a 0 and anything above it 255.
I don't know where to start. I have some idea in my head but very limited knowledge on how to execute. Your help would be very much appreciated.

1 Comment

Thank you Wayne. Your code works perfectly for single image files.
However, how would I write a loop for this program?
I know that using the: dir(*'jpg') command selects? the images you want to work with.
I changed the names of the images using matlab:
images=dir('*jpg');
names={images.name};
for File=1:numel(names)
newname=sprintf('04%d.jpg',File);
movefile(names{File},newname);
end
If I were to put the following code:
I = imread('cameraman.tif');
I(I<66) = 0;
I(I>66) = 255;
What would I replace the cameraman.tif with in order to have this run in a loop?
Also how would I be able to save these new images because I would like to add these images together once all of the images are filtered?

Sign in to comment.

 Accepted Answer

Hi, if you just want to do that you can use logical indexing.
I = imread('cameraman.tif');
I(I<66) = 0;
I(I>66) = 255;

More Answers (1)

Hi Daniel, If you have
images = dir('*jpg');
names = {images.name};
Then you should be able to loop through on the cell array
for ii = 1:numel(names)
I = imread(names{ii});
I(I<66) = 0;
I(I>66) = 255;
...

5 Comments

Wouldn't this output an image of only the last image in the directory?
Does this code automatically compile all the images into a single image? Because it seems like the image of I is the same as the image of the last image, after being run through the filter.
Well Daniel, you haven't defined exactly what you mean by "compile". So how are we supposed to answer you? Wayne gave you the "filter" part of your code but no one can help you anymore until you define "compile." Does it mean average together? Does it mean stack into a 3D image? Is it a maximum intensity projection? What the heck is it?
Thank you for your input.
When I say compile, I meant adding each image to the previous image. I would like to take the 80 files and "add" them together into one single image. I know I can filter 80 images separately and assign separate variables to save them, then use imadd to put them together; however, I would like to write a single loop that can do this.
So can't you just do sumImage = sumImage + I ???
You wouldn't want to use separate variables anyhow. See
http://matlab.wikia.com/wiki/FAQ#How_can_I_create_variables_A1.2C_A2.2C....2CA10_in_a_loop.3F

Sign in to comment.

Categories

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!