Use a lossless compression algorithm, PNG removing jpeg artifacts
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
Generation
To generate this map Brian Szymanski 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, but it is wrong. The first channel of the blue/yellow map has to be set to U as well and the third channel of the red/green map has to be set to 0.5. I will fix it soon and update the image.
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("barn.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' >barn-yuv.png
Licensing
Public domainPublic domainfalsefalse
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.
Captions
Add a one-line explanation of what this file represents
copyrighted, dedicated to the public domain by copyright holder<\/a>"}},"text\/plain":{"en":{"P6216":"copyrighted, dedicated to the public domain by copyright holder"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P6216 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
released into the public domain by the copyright holder<\/a>"}},"text\/plain":{"en":{"P275":"released into the public domain by the copyright holder"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P275 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">