Skip to content Skip to navigation

Connexions

You are here: Home » Content » Miscellaneous Code

Navigation

Content Actions

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.

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.

  • Rice University OCW

    This module is included inLens: Rice University OpenCourseWare
    By: OpenCourseWare ConsortiumAs a part of collection:"ECE 301 Projects Fall 2003"

    Click the "Rice University OCW" link to see all content affiliated with them.

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

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