<< Chapter < Page | Chapter >> Page > |
% 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 picturenoise = 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:3fishnorm(:,:,i) = fishimage(:,:,i)./norm((fishimage(:,:,i)));intensitymatrix(:,:,i) = reshape(fishimage(:,:,i), 1, prod(size(fishimage(:,:,1))));
intensity(:,:,i) = mean(intensitymatrix(:,:,i));endrgintens = 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;endif 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;
endif 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;endelse
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 unknownif fishmod >0
fishtype = 'salmon ';elseif fishmod<0
fishtype = 'trout ';else
fishtype = 'unknown';end
% 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 = 0troutwrong = 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;
elsesalwrong = salwrong + 1;
endcase '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;
elseundetwrong = undetwrong + 1;
endend
endsalmonpercent = 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];
Notification Switch
Would you like to follow the 'Ece 301 projects fall 2003' conversation and receive update notifications?