Задача в таком виде слишком абстрактная, и совершенно непонятно как ее оптимизировать. Можно создать какие-то индексы, но если у вас возможны мелкие цветные "квадраты" размером 1х1, то эти индексы только будут мешать. Если заранее известен какой-то минимальный размер квадратов, то можно перебирать не по одному пикселю за раз, а через один, что ускорит обход"карты". в 4 раза. Если через два - в 9 раз.