# Connexions

You are here: Home » Content » ECE 301 Projects Fall 2003 » Miscellaneous Code

### Lenses

What is a lens?

#### Definition of a lens

##### Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

##### What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

##### Who can create a lens?

Any individual member, a community, or a respected organization.

##### What are tags?

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

#### Affiliated with (What does "Affiliated with" mean?)

This content is either by members of the organizations listed or about topics related to the organizations listed. Click each link to see a list of all content affiliated with the organization.
• Rice University ELEC 301 Projects

This collection is included inLens: Rice University ELEC 301 Project Lens
By: Rice University ELEC 301

Click the "Rice University ELEC 301 Projects" link to see all content affiliated with them.

• Rice Digital Scholarship

This collection is included in aLens by: Digital Scholarship at Rice University

Click the "Rice Digital Scholarship" link to see all content affiliated with them.

#### Also in these lenses

• Lens for Engineering

This module and collection are included inLens: Lens for Engineering
By: Sidney Burrus

Click the "Lens for Engineering" link to see all content selected in this lens.

• EW Public Lens

This collection is included inLens: Ed Woodward's Public Lens
By: Ed Woodward

"assafdf"

Click the "EW Public Lens" link to see all content selected in this lens.

Click the tag icon to display tags associated with this content.

### Recently Viewed

This feature requires Javascript to be enabled.

### Tags

(What is a tag?)

These tags come from the endorsement, affiliation, and other lenses that include this content.

Inside Collection (Course):

# Miscellaneous Code

Module by: Kyle Clarkson, Jason Sedano, Ian Clark. E-mail the authors

Summary: All other code for the fish counting project

## Example 1: Code for the Fish Classifier

% This function is one of the top level files that call all the tests and
% figure out which fish their results indicate.  It also adds noise to the image
function [fishtype] = fishcounterback(file)

fishimage1 = im2double(fish);

% Add noise to the picture
noise = randn(size(fishimage1));
noiselevel = .00;

fishimagenoise = fishimage1 + noiselevel.*noise;
fishimagenoisevals = and(fishimagenoise<1, fishimagenoise>0);
fishimage = fishimagenoise.*fishimagenoisevals;

fishmod = 0;

if  sum(sum(rgb2gray(fishimage)))>100

% If the length to width ratio is less than 2.85 and greater than 2,
% its a salmon, and if its greater than 3.5, the fish is a trout.
[length,width,lwratio] = fishedge(fishimage);
if  and(lwratio <= 2.85, lwratio>2)
fishmod = fishmod + 1;
elseif lwratio >=3.5
fishmod = fishmod - 1;
end

% Check to see how much intensity there is in each of the color spectrums
for i = 1:3
fishnorm(:,:,i) = fishimage(:,:,i)./norm((fishimage(:,:,i)));

intensitymatrix(:,:,i) = reshape(fishimage(:,:,i), 1, prod(size(fishimage(:,:,1))));
intensity(:,:,i) = mean(intensitymatrix(:,:,i));
end

rgintens = intensity(:,:,1)-intensity(:,:,2);
rbintens = intensity(:,:,1)-intensity(:,:,3);

% If the red is greater than one ofthe other spectrums by at least .4, then
% it is a trout, if they are within .1 of each other, it is a trout.  Otherwise
% it is an unknown item.
if rgintens >.04
fishmod = fishmod + .5;
elseif rgintens <.01
fishmod = fishmod - .5;
end

if rbintens >.04
fishmod = fishmod + .5;
elseif rbintens <.01
fishmod = fishmod - .5;
end

% Check the features of the fish.

% If the body is red and the head is green, blue, or both, then its a trout.
% If the body is all three colors and either the head or the tail or both
% are the same color and included in the body, then it is a trout.
if and(body == 'r  ', or(head == 'g  ', or(head == 'gb ', head == 'b  ')))
fishmod = fishmod + 1.5;
end
if and(body == 'rgb', and(head == 'cbd', tail == 'cbd'))
fishmod = fishmod - 1.5;
elseif and(body == 'rgb', or(head == 'cbd', tail == 'cbd'))
fishmod = fishmod - 1;
end

%Count the fins on the fish.  If it is zero, then its probably trash,
% otherwise, keep the modifier in its present state.
numfins = findet(fishimage);

if and(numfins == 0, abs(fishmod)<=2)
fishmod = 0;
end

else
fishmod = 0;
end

% If most of the tests think the fish is a salmon, call it a salmon
% If most of the tests think the fish is a trout, call it a trout
% If the tests all don't know, or if they disagree, call it unknown
if fishmod >0
fishtype = 'salmon ';
elseif fishmod <0
fishtype = 'trout  ';
else
fishtype = 'unknown';
end



## Example 2: Code for the Mass Fish Counter

% This is the top file for the whole system.  It takes in a matrix of filenames and
% a matrix of what type of fish each of the files is.  It then runs the classification
% program on one fish at a time and then computes the accuracy of the outputs.
function [fishmatrix,statsmat,correct,wrong] = massfishcounter(filematrix,typematrix);

for fishnum = 1:size(filematrix,1)

fishnum
% Classify the current fish
fishmatrix(fishnum,:) = fishcounter(filematrix(fishnum,:));

end

salmoncount = 0;
troutcount = 0;
undetermined = 0;
correct = 0;
wrong = 0;
salcor = 0;
troutcor = 0;
undetcor = 0;
salwrong = 0
troutwrong = 0;
undetwrong = 0;
salmonpercent = 0;
troutpercent = 0;
undetpercent = 0;
% Check all of the output types to the input matrix of which type each
% fish should be and see how accurate the results were.
for z = 1:size(fishmatrix,1)
switch fishmatrix(z,:)
case 'salmon '
salmoncount = salmoncount + 1;
if fishmatrix(z,:)==typematrix(z,:);
salcor = salcor + 1;
else
salwrong = salwrong + 1;
end
case 'trout  '
troutcount = troutcount + 1;
if fishmatrix(z,:)==typematrix(z,:);
troutcor = troutcor + 1;
else
troutwrong = troutwrong + 1;
end
case 'unknown'
undetermined = undetermined + 1;
if fishmatrix(z,:)==typematrix(z,:);
undetcor = undetcor + 1;
else
undetwrong = undetwrong + 1;
end
end
end

salmonpercent = salcor./(salcor+salwrong);
troutpercent = troutcor./(troutcor+troutwrong);
undetpercent = undetcor./(undetcor+undetwrong);

correct = salcor + troutcor + undetcor;
wrong = salwrong + troutwrong + undetwrong;

statsmat = [salcor salwrong salmonpercent; troutcor troutwrong troutpercent; undetcor undetwrong undetpercent];


## Example 3: Code to Subtract the background from an image

% This function subtract a predeterminded background image from the input image
% and returns just the plain fish.
function [justfish] = subback(file);

justfish = fish1 - back1;


## Example 4: Code for the Classifier when the Background is Subtracted

% This is the same as the fishcounter file, but it works for a non-ideal
% situation, where the backgroup behind the fish must be subtracted off.
function [fishtype] = fishcounterback(file)

% Subtract the background from the picture.
fishimage1 = subback(file);

% Add noise to the picture
noise = randn(size(fishimage1));
noiselevel = 100;

fishimagenoise = fishimage1 + noiselevel.*noise;
fishimagenoisevals = and(fishimagenoise<256, fishimagenoise>0);
fishimage = fishimagenoise.*fishimagenoisevals;

fishmod = 0;

if  sum(sum(rgb2gray(fishimage)))>100

% If the length to width ratio is less than 2.85 and greater than 2,
% its a salmon, and if its greater than 3.5, the fish is a trout.
[length,width,lwratio] = fishedge(fishimage);
if  and(lwratio <= 2.85, lwratio>2)
fishmod = fishmod + 1;
elseif lwratio >=3.5
fishmod = fishmod - 1;
end

% Check to see how much intensity there is in each of the color spectrums
for i = 1:3
fishnorm(:,:,i) = fishimage(:,:,i)./norm((fishimage(:,:,i)));

intensitymatrix(:,:,i) = reshape(fishimage(:,:,i), 1, prod(size(fishimage(:,:,1))));
intensity(:,:,i) = mean(intensitymatrix(:,:,i));
end

rgintens = intensity(:,:,1)-intensity(:,:,2);
rbintens = intensity(:,:,1)-intensity(:,:,3);

% If the red is greater than one ofthe other spectrums by at least .4, then
% it is a trout, if they are within .1 of each other, it is a trout.  Otherwise
% it is an unknown item.
if rgintens >.04
fishmod = fishmod + .5;
elseif rgintens <.01
fishmod = fishmod - .5;
end

if rbintens >.04
fishmod = fishmod + .5;
elseif rbintens <.01
fishmod = fishmod - .5;
end

% Check the features of the fish.

% If the body is red and the head is green, blue, or both, then its a trout.
% If the body is all three colors and either the head or the tail or both
% are the same color and included in the body, then it is a trout.
if and(body == 'r  ', or(head == 'g  ', or(head == 'gb ', head == 'b  ')))
fishmod = fishmod + 1.5;
end
if and(body == 'rgb', and(head == 'cbd', tail == 'cbd'))
fishmod = fishmod - 1.5;
elseif and(body == 'rgb', or(head == 'cbd', tail == 'cbd'))
fishmod = fishmod - 1;
end

%Count the fins on the fish.  If it is zero, then its probably trash,
% otherwise, keep the modifier in its present state.
numfins = findet(fishimage);

if and(numfins == 0, abs(fishmod)<=2)
fishmod = 0;
end

else
fishmod = 0;
end

% If most of the tests think the fish is a salmon, call it a salmon
% If most of the tests think the fish is a trout, call it a trout
% If the tests all don't know, or if they disagree, call it unknown
if fishmod >0
fishtype = 'salmon ';
elseif fishmod <0
fishtype = 'trout  ';
else
fishtype = 'unknown';
end


## Example 5: Code for the Mass Classifier when the Background is Subtracted

% This is the top file for the whole system when the background must be subtracte from
% the image before it is analyzed.  It takes in a matrix of filenames and
% a matrix of what type of fish each of the files is.  It then runs the classification
% program on one fish at a time and then computes the accuracy of the outputs.
function [fishmatrix,statsmat,correct,wrong] = massfishcounterback(filematrix,typematrix);

for fishnum = 1:size(filematrix,1)

fishnum
% Classify the current fish
fishmatrix(fishnum,:) = fishcounterback(filematrix(fishnum,:));

end

salmoncount = 0;
troutcount = 0;
undetermined = 0;
correct = 0;
wrong = 0;
salcor = 0;
troutcor = 0;
undetcor = 0;
salwrong = 0
troutwrong = 0;
undetwrong = 0;
salmonpercent = 0;
troutpercent = 0;
undetpercent = 0;

% Check all of the output types to the input matrix of which type each
% fish should be and see how accurate the results were.
for z = 1:size(fishmatrix,1)
switch fishmatrix(z,:)
case 'salmon '
salmoncount = salmoncount + 1;
if fishmatrix(z,:)==typematrix(z,:);
salcor = salcor + 1;
else
salwrong = salwrong + 1;
end
case 'trout  '
troutcount = troutcount + 1;
if fishmatrix(z,:)==typematrix(z,:);
troutcor = troutcor + 1;
else
troutwrong = troutwrong + 1;
end
case 'unknown'
undetermined = undetermined + 1;
if fishmatrix(z,:)==typematrix(z,:);
undetcor = undetcor + 1;
else
undetwrong = undetwrong + 1;
end
end
end

salmonpercent = salcor./(salcor+salwrong);
troutpercent = troutcor./(troutcor+troutwrong);
undetpercent = undetcor./(undetcor+undetwrong);

correct = salcor + troutcor + undetcor;
wrong = salwrong + troutwrong + undetwrong;

statsmat = [salcor salwrong salmonpercent; troutcor troutwrong troutpercent; undetcor undetwrong undetpercent];


## Content actions

PDF | EPUB (?)

### What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

PDF | EPUB (?)

### What is an EPUB file?

EPUB is an electronic book format that can be read on a variety of mobile devices.

#### Collection to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

#### Definition of a lens

##### Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

##### What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

##### Who can create a lens?

Any individual member, a community, or a respected organization.

##### What are tags?

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks

#### Module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

#### Definition of a lens

##### Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

##### What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

##### Who can create a lens?

Any individual member, a community, or a respected organization.

##### What are tags?

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks