It mostly depends on the tightness of your loops in Matlab. If you are simply calling a series of built-in Matlab image processing functions, you will most likely not be able to improve performance (most likely you will hurt it). If you are looping over image pixels or doing some kind of block processing, you may see big improvements. If you are doing some looping, but the amount of processing within each iteration is substantial, you may only see little or no improvement.
The way I look at Matlab is that every executed line has some amount of overhead. If you can put your solution into the form of a matrix multiply, or some other vector/matrix operation, you only suffer that overhead once and it is negligible. However, with loops, you suffer that overhead every time the loop iterates. Also, most of Matlab's image processing functions are just making calls out to optimized libraries, so don't try to recreate them unless you know for sure where they can be improved.
I found that the best approach is to use a combination of C and Matlab. I use Matlab when the operation can be easily vectorized (put in terms of vector/matrix operations). This may mean coming at the solution from a different angle than what seems the most straightforward. Also, it is hard to beat Matlab's plotting and visualization so I would definitely not move to an all C/C++ solution unless you have a plan for how to display with C/C++ (if that is part of your project).
If I can't come up with a relatively easy way to vectorize, I just implement the part of processing that needs tight loops in a C mex function that can be called from Matlab. I tend to use C instead of C++ in this case since the process should be relatively small and not need a lot of complicated data abstraction, but C++ would work fine too. Make sure you access image data in column-major order to maximize cache hits since this is how Matlab organizes its matrices.