File:Mandrill-yuv.png

Original file(512 × 2,048 pixels, file size: 1.35 MB, MIME type: image/png)

Captions

Captions

Add a one-line explanation of what this file represents

Summary edit

Description YUV colorspace
Date
Source Adapted from public domain Mandrill.png
Author Brian Szymanski
Permission
(Reusing this file)
Public domain
Other versions File:Barn-yuv.png

Raison d'être edit

This file is designed to replace en:Image:YUV_components.jpg. The improvements are:

  • Use a lossless compression algorithm, PNG removing jpeg artifacts
  • Use a more permissive license (public domain)
  • Use a standard test image from the public domain
  • Don't scale U, V to extreme values - use the raw value, which more closely approximates the chroma component
  • Fix the inverted polarity of U, V components

If you want to see the same method applied to the original picture, see Image:Barn-yuv.png, but note the licensing is necessarily a little different.

Generation edit

To generate this map from mandrill.png, I used this perl script, and then ran optipng with a full search to shrink the filesize. If you want to understand the below code, you should probably use perltidy - the code is mostly here for my reference.

perl -e 'use strict; use warnings; use GD; GD::Image->trueColor(1);
my %color_cache;
sub cached_allocate { my $img = shift; my @rgb = @_;
   my $rgb = join(",", @rgb);
   $color_cache{$rgb} = $img->colorAllocate(@rgb) unless($color_cache{$rgb});
   return $color_cache{$rgb};
}

my $img = GD::Image->new("mandrill.png");
my ($height, $width) = ($img->height, $img->width);
my $yuv_img = GD::Image->new($width, $height*4);
foreach my $y (0..$height-1) {
   foreach my $x (0..$width-1) {
      my ($r, $g, $b) = map { $_ / 256 } my @rgb = $img->rgb($img->getPixel($x, $y));
      my $Y = 0.299*$r+0.587*$g+0.114*$b;
      my $U = 0.436*($b-$Y)/(1-0.114);
      my $V = 0.615*($r-$Y)/(1-0.299);
      $Y *= 256;
      $U += .436; $U *= (256/.872);
      $V += .615; $V *= (256/1.23);
      ($Y, $U, $V) = map { int(0.5+$_) } ($Y, $U, $V);
      die "YUV: $Y,$U,$V" if (($Y > 255) or ($U > 255) or ($V > 255))
      $yuv_img->setPixel($x, $y, cached_allocate($yuv_img, @rgb));
      $yuv_img->setPixel($x, $height+$y, cached_allocate($yuv_img, $Y, $Y, $Y));
      $yuv_img->setPixel($x, 2*$height+$y, cached_allocate($yuv_img, 0, 255-$U, $U));
      $yuv_img->setPixel($x, 3*$height+$y, cached_allocate($yuv_img, $V, 255-$V, 0));
   }
};
print $yuv_img->png' >mandrill-yuv.png

Licensing edit

Public domain I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
In some countries this may not be legally possible; if so:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current04:39, 22 September 2007Thumbnail for version as of 04:39, 22 September 2007512 × 2,048 (1.35 MB)Brianski (talk | contribs)== Summary == {{Information |Description=YUV colorspace |Source=Adapted from public domain Mandrill.png |Date=2007/09/22 |Author=Brian Szymanski |Permission=Public domain |other_versions= }} == Raison d'être == This file is designed to replace [[:en:Ima

The following page uses this file:

File usage on other wikis

The following other wikis use this file: