8
$\begingroup$

I assumed that Image and ImageData are inverses, so that the following expression gives back the original image.

Image[ImageData[image]]

But that doesn't work. Why?

$\endgroup$
5
  • $\begingroup$ What do you mean by "it doesn't work"? Image[ImageData[ExampleData[{"TestImage", "Mandrill"}]]] works fine... $\endgroup$ Feb 26 '16 at 19:36
  • 1
    $\begingroup$ Actually Image[ImageData[ExampleData[{"TestImage", "Mandrill"}]]] == ExampleData[{"TestImage", "Mandrill"}] returns false. If you look at FullForm you see the image color representation has changed from interger to float. $\endgroup$
    – george2079
    Feb 26 '16 at 19:49
  • $\begingroup$ If you use for example a black 24-bit Bitmap image, then what you will get back is a blue image. $\endgroup$ Feb 26 '16 at 19:52
  • $\begingroup$ I colud have sworn this is a duplicate or at least thoroughly discussed in another question but can't find it. $\endgroup$
    – William
    Feb 27 '16 at 4:53
  • $\begingroup$ Strongly related: "ImageType used by ImageData." $\endgroup$ Feb 27 '16 at 7:33
8
$\begingroup$

I would guess it's something to do with the ImageType.

img1 = ExampleData[{"TestImage", "Mandrill"}];
img2 = Image[ImageData[ExampleData[{"TestImage", "Mandrill"}]]];    
img1 == img2
(* False *)
ImageType[img1]
(* Byte *)    
ImageType[img2]
(* Real *)

However, trying the following doesn't seem to help:

img3 = Image[
   ImageData[ExampleData[{"TestImage", "Mandrill"}], "Byte"], "Byte"];
ImageType[img3]
(* Byte *)    
img3 == img1
(* False *)

But the following (courtesy of @george2079) does work! It must be related to the default option for Image being the following, rather than RGB, so the original colorspace is not preserved.

ColorSpace -> Automatic treats values as arbitrary channel intensities

img4 = Image[
  ImageData[ExampleData[{"TestImage", "Mandrill"}], "Byte"], "Byte", 
  ColorSpace -> "RGB"]
img1 == img4
(* True *)

Hence the following code from @Kuba should work generally:

Image[ImageData[#, ImageType[#]], ImageType[#], Options[#]] &[img1]
$\endgroup$
4
  • 2
    $\begingroup$ puzzled myself.. this gets it back: Image[ImageData[ExampleData[{"TestImage", "Mandrill"}], "Byte"], "Byte", ColorSpace -> "RGB"] $\endgroup$
    – george2079
    Feb 26 '16 at 20:05
  • 1
    $\begingroup$ probably more general: img1 === Image[ImageData[#, ImageType[#]], ImageType[#], Options[#]] &[img1] $\endgroup$
    – Kuba
    Feb 26 '16 at 20:08
  • $\begingroup$ Shouldn't the ColorSpace of RGB provide only 3 parameters? A black bmp image mentioned above comes with a ColorSpace of RGB, but the ImageData looks like {{0,0,0,255},{0,0,0,255}...}. What does the 4th parameter do? $\endgroup$ Feb 26 '16 at 20:36
  • 1
    $\begingroup$ @AntonAlice It denotes the transparency, or "alpha" value. $\endgroup$ Feb 26 '16 at 20:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.