I think you are moving to right direction. OpenCL image objects are better option for operating on non-linear structures like 2D and 3D image, specially for spatial operations like convolution, filtering etc. Most of the GPUs have special hardware (e.g texture memory/cache] to handle the images and they provide extremely high-performance access to and filtering of texture images. But there are few limitations worth to know like:
1) There is a limit to maximum size of 2D and 3D image object (can be queried using clGetDeviceInfo)
2) Same image object cannot be read and written in same kernel (this restriction will not be there in OpenCL 2.0)
3) Image data can not be accessed directly using pointer, only accessible through built-in image read/write functions.
4) As most of the OpenCL implementations prefer to store(internally) the image object as non-linear fashion, the copy and mapping of image object to linear memory such as buffer or linear host memory may have some performance impact.
5) There is a limit of max. image objects that can be used as kernel arguments (for read and write) [this limit values are large enough for general applications].