Skip to content Skip to navigation Skip to collection information

OpenStax-CNX

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

Navigation

Table of Contents

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? tag icon

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

This content is ...

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 display tagshide tags

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

    Comments:

    "assafdf"

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

    Click the tag icon 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.
 

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
% to start with.
function [fishtype] = fishcounterback(file)

fish = imread(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.
    [body,head,tail] = featureanalyzer(fishimage);
    
    % 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);

fish1 = double(imread(file));

back1 = double(imread('bkunderwater1.jpg','jpg'));
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.
    [body,head,tail] = featureanalyzer(fishimage);
    
    % 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];

Collection Navigation

Content actions

Download:

Collection as:

PDF | EPUB (?)

What is an EPUB file?

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

Downloading to a reading device

For detailed instructions on how to download this content's EPUB to your specific device, click the "(?)" link.

| More downloads ...

Module as:

PDF | More downloads ...

Add:

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? tag icon

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? tag icon

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