I was just searching around the web for an idea:
We’ve got around 5000 images of bikes.
All are more or less similar:
A not too confusing background (1 - few colors, mostly blurry)
A bike in the foreground, mostly different colors (could be just one or several colors)
Image sizes are different, all above 1000px (shortest side)
Now, I’d like to have a software which goes through all of my images, automatically selects the bikes frames, changes the color of the frame in predefined manners/color definitions.
How far could software - especially ImageJ - help with this task?
Short answer: Software could help, but it is likely to be a lot of work
to do a good job on your task. But even if you process your images
"by hand," ImageJ, or similar, could be a very useful tool for doing
the “manual” work.
In more detail: Automated software – that is, you write a program
in an image-processing framework such as ImageJ that does a
lot of the necessary processing automatically – could be useful,
but writing that program could be more work than doing it "by hand,“
that is, identifying and somehow “selecting” or masking” the bike
frames and then changing their colors using "manual software,"
even with 5000 images.
ImageJ could be useful for automating your task – it has a lot of
low-level image processing tools and can be scripted (programmed)
in a number of scripting languages and programmed in java. But, as
Herbie pointed out, although the lower-level parts of ImageJ are general
purpose, ImageJ lives in the biological / scientific image-processing
ecology. It’s higher-level algorithms tend to be domain-specific, for
example, segmenting cells, processing sets of confocal-microscope
image “slices,” and identifying blood vessels.
A more general-purpose image-processing / computer-vision
framework such as OpenCV might be a better choice for your
But again, as I understand your task, I think it will be a lot of work,
at least if you want the resulting images to look relatively realistic.
You have to identify the bicycles, and then accurately "segment"
the frames from the rest of the images. Even if there are not
foreground objects in front of the bicycles, you will still have to
deal with occlusion – the pedals, handlebars, brake cables, etc.,
will likely occlude parts of the frame. You have to decide (and
program) what you want to do with multi-colored frames, e.g.,
chrome on the front fork or names and logos on the frames.
ImageJ (or another image-processing framework) would be
very helpful – much better than starting from scratch – but
won’t automate your task for you without you doing a lot of
the programming yourself.
Also, you could use ImageJ, or similar, to do the hard part “by
hand,” identifying and masking the frames, and then saving the
masking data with your images. You could then automate the
"easy" part – changing the colors – with an ImageJ script. You
could then automatically rerun the color-editing multiple times
with different colors and rules, using your hand-masked images
(I would not pursue “machine learning” as a way to automate
your task, even though a number image-processing frameworks
have support for such approaches. First, it can be hard to get to
work well. But, as importantly, you would need to hand-analyze
probably at least thousands of your bicycle images in order to
give the machine-learning algorithm the raw material it needs to
"learn" from, and by then, you might as well just finish the job
As Herbie mentioned, some sample images, and as you move
forward, some results showing your partial progress would help
us a lot in understanding your task and in giving you suggestions
for what might be worth trying.