more flexible and extensible image operations