Насколько я понимаю, у вас немного неверное представление о потоках. В коде, приведенном вами, одному и тому же потоку thrProcess дается команда запуска при каждой итерации. Зачем его запускать несколько раз, если он уже выполнил start() после первой итерации (при i = 0)?
В таком случае, вы можете:
1) перенести цикл, проходящий по всем изображениям массива, внутрь рабочего метода потока thrProcess и запустить данный поток один раз;
2) создавать в цикле на каждой итерации новый поток (thrProcess1, thrProcess2, ..., thrProcessN), в котором будет проводиться обработка текущего изображения, и запускать его.
Второй вариант весьма странный — согласитесь, если у вас 1000 изображений, то создавать по 1 потоку для каждого из них, т.е. 1000 потоков всего, будет как-то не хорошо.