Is it possible to identify fish by scale pattern with OpenCV?

asked 2015-01-15 14:24:15 -0500

ricbra gravatar image

updated 2015-01-16 05:47:52 -0500

Hi,

I'm working on a project to monitor our fish population. Every year we release new young carp. We ask fishermen to send us photographs of every catch to see where they go. We identify these fish by the scale pattern. Every fish is unique in its scale pattern.This is quite a lot of work to do by hand.

Is it possible to detect similarity in scale pattern with OpenCV? Any pointers on how to accomplish this? I've a decent background in programming, but am a little stuck where to start.

Example of one fish release picture and catch picture (I marked the scale pattern with red, to show how we recognise the fish on pictures):

Picture of fish before released

Picture of same fish being catched

To demonstrate the uniqeness of the scale pattern per fish, this is a different one: Picture of another fish

edit retag flag offensive close merge delete

Comments

3

I'm from germany and it took me some time to figure out that "scale" in this context has nothing to do with the size of the fish.... Scale-invariant features could help you to detect the scale features.

FooBar gravatar imageFooBar ( 2015-01-15 14:51:49 -0500 )edit
4

Can you show what is "scale pattern" on your pictures? And also show a few possible patterns.

Vit gravatar imageVit ( 2015-01-15 16:55:38 -0500 )edit
2

Yes, you said it is tedious to do by hand... but I assume it is possible to do it? As others said, you could try to constrain the problem to some specific features on the fish. Then, knowing what you want to search/look at, it would be easier to find a method. I would point too to scale-invariant features. The BRISK feature-descriptors is available in OpenCV. There is SIFT and SURF, but you get in the realm of algorithms that are patented for commercial use in the USA (which may not necessarily be an issue, depends...)

By the way, this is very interesting!!! :D

Doombot gravatar imageDoombot ( 2015-01-15 19:48:30 -0500 )edit
5

I updated the pictures with some red lines to make myself clear. In Dutch we call scales "schubben", but I don't know any other word in English to describe it.

Btw. it is possible by hand. But since a lot of fish gets released every year, it gets harder and harder to recognise them by hand. This is all volunteer work so I'm trying to improve things a bit :). Also, because it is non-profit I shouldnt be in any problems regarding commercial use I guess.

ricbra gravatar imagericbra ( 2015-01-16 05:50:54 -0500 )edit

How many photos of fish do you have in your database and how many photos do you have to process every year (?) to find it in this database? How many photos per fish? How large is acceptable level of "false positive" and "false negative" results?

Vit gravatar imageVit ( 2015-01-16 08:09:48 -0500 )edit
1

Scale is the right word for things that cover fishes. You would use the same word for a lizard, or a dinosaur (well, though paleontologist now are pretty sure lots of them had feathers ;) ) It just happen to be an homonym to scale (the "size" thing)...

Doombot gravatar imageDoombot ( 2015-01-16 09:55:07 -0500 )edit
1

We release approximately 1000 fish every year. But that is only in my region, for the whole country this is a lot more. False positives is no problem, if I could filter the best 20 matching pictures out of a few 1000 would be awesome. There are some fish which look quite a like, so these are with the eye even hard to find.

I've been reading myself into this SURF thing, looks really promising. If anyone else got some more tips or tricks let me know.

ricbra gravatar imagericbra ( 2015-01-17 03:05:58 -0500 )edit

I think you should look into bag of words approach for object recognition with a database. Google it, you will find several similar cases with other objects.

StevenPuttemans gravatar imageStevenPuttemans ( 2015-01-17 06:13:33 -0500 )edit