Pretty good and simple way to deal with this is simply pipe it via gzip, something like this:
# dd if=/dev/sdb | gzip > backup.img.gz
This way your image will be compressed and most likely unused space will be squeezed to almost nothing.
You would use this to restore such image back:
# cat backup.img.gz | gunzip | dd of=/dev/sdb