Skip to content Skip to navigation

Connexions

You are here: Home » Content » Miscellaneous Code

Navigation

Content Actions

  • Download module PDF
  • Add to ...
    Add the module to:
    • My Favorites
    • A lens
    • An external social bookmarking service
    • My Favorites (What is 'My Favorites'?)
      'My Favorites' is a special kind of lens which you can use to bookmark modules and collections directly in Connexions. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need a Connexions account to use 'My Favorites'.
    • A lens (What is a lens?)

      Definition of a lens

      Lenses

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

      What is in a lens?

      Lens makers point to Connexions 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 Connexions 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
  • E-mail the authors
  • Rate this module (How does the rating system work?)

    Rating system

    Ratings

    Ratings allow you to judge the quality of modules. If other users have ranked the module then its average rating is displayed below. Ratings are calculated on a scale from one star (Poor) to five stars (Excellent).

    How to rate a module

    Hover over the star that corresponds to the rating you wish to assign. Click on the star to add your rating. Your rating should be based on the quality of the content. You must have an account and be logged in to rate content.

    (0 ratings)

Lenses

What is a lens?

Definition of a lens

Lenses

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

What is in a lens?

Lens makers point to Connexions 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 Connexions 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 module is included inLens: Rice University ELEC 301 Project Lens
    By: Rice University ELEC 301As a part of collection:"ECE 301 Projects Fall 2003"

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

Recently Viewed

This feature requires Javascript to be enabled.

Miscellaneous Code

Module by: Kyle Clarkson, Jason Sedano, Ian Clark

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];

Comments, questions, feedback, criticisms?

Send feedback