I have a set of images with red, round labels on it. What I want is, to get pixel location of each of the label. One way, of course, would be to search for red color pixels. But the problem is, sometimes light reflexes from the marker and changes it's color. But you could still detect round "redish" circle. It there any efficient way to get this?
You can always use normalised cross correlation with a structuring element like a disk or ellipsis to account for different viewing angles and marker distances. This is basically template matching, where a target that "looks like" the template is searched for in a larger image.
If more computational power is available, you could go down the route of detecting circles via the Hough Transform.
In this case, the Hough transform is used to identify some strong features that appear as points in some space and then, based on assumptions about their locations, the position of the circles is inferred. Similar to those techniques, are others that identify generic features off of an image (e.g. corners) and then try to cross-reference the position of the identified features with the relative positions identified off of a template.
A compromise might be to use similar methods as used to detect shotCodes. Now, I did try to locate that paper by the original authors of shotCodes where the detection process was outlined in detail but I cannot seem to find it. Instead, here is one that talks about detection (and the (more recent) associated thesis). This was quick enough to be implemented on early smartphones. Perhaps it offers a compromise in terms of ease of detection and position accuracy off of images.
Hope this helps.