Defcard Software-actus

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

defcard

Re: Defcard Software-actus

Message par defcard »

et j'vous emmerde tous là qu'est ce qui y'a !! :mrgreen: fneck chien de traineau !! qu'est ce qui y'a ?? y'a un problème avec la réalité ?? l'oeuf est carré c'est ça ??

allez vous fair foutre et bon vent !!!!!!!!!!!!!! :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen:
Daniel
Messages : 17412
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Defcard Software-actus

Message par Daniel »

Visiblement defcard a des difficultés avec le langage scientifique.
Essayons d'oublier les termes techniques pour employer un langage plus imagé :

- L'image de 320 points sur 200 affichée sur un grand écran et observée de près laisse bien voir tous les pixels.
- La même image affichée sur un timbre-poste paraît plus fine car on ne distingue pas les pixels sans l'aide d'instruments d'optique.

Ce n'est pas pour autant qu'elle est meilleure. C'est exactement la même, sa qualité n'a pas changé. Par contre la vue n'est pas assez bonne pour voir les défauts. En réduisant la taille on ne fait que masquer la mauvaise qualité, comme l'autruche masque le danger en enfonçant la tête dans le sable. Essayez de regarder le grand écran avec la tête dans le sable, ça vous piquera les yeux, mais vous ne verrez plus aucun défaut. Vous aurez obtenu l'image idéale, parfaite en tous points. Sera-t-elle meilleure ? Non.

La morale de ce post : au royaume des aveugles les pixels sont indiscernables (proverbe nouveau à méditer).
La morale de ce fil de discussion : il n'y a pas pire sourd que celui qui ne veut pas entendre (proverbe connu).
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7970
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Defcard Software-actus

Message par __sam__ »

REvenons en aux images
defcard a écrit :Voilà une image en 4 couleurs de 1200x600 à 25% de sa taille initiale:
La pièce jointe « 4C_TEST_1200x900(25%).gif » n’est plus disponible
On remarque aisément que bm4 est un "top" !
Le BM4 est bien mais le format de de base n'est pas à négliger pour autant. Voici ce que donne l'un de mes algos ZX adapté au thomson. On y trouve de magnifiques couleurs au prix d'une perte de définition:
@07631f6b.png
@07631f6b.png (5.53 Kio) Consulté 4449 fois
Un autre exemple:
Beautiful Birds Wallpapers HD.png
Beautiful Birds Wallpapers HD.png (6.93 Kio) Consulté 4449 fois
Quant au chat il donne:
@pisica_tabby-1024x768.png
@pisica_tabby-1024x768.png (4.12 Kio) Consulté 4449 fois
Perso j'aime assez l'aspect "grille" qui apparait avec cette trame. C'est d'ailleurs celle qui ressort le mieux et avec le moins de conflits de proximités parmi toutes celles dont le script dispose. Potentiellement je me dis que cette trame donenrait de très bon résultats pour faire de l'animation couleur depuis une carte SD.

Code : Tout sélectionner

#/bin/perl

#use Graphics::Magick;
use Image::Magick;
use MIME::Base64 qw( encode_base64 );

$glb_dith   = ("default", "4x4", "8x8", "ostro94", "vac-14x14")[0];
$glb_target = ("zx","to")[1];
$glb_satur  = 180;
$glb_blur   = 0;

if($glb_target eq "zx") {
$glb_width  = 256;
$glb_height = 192;
$glb_bloc_w = 8;
$glb_bloc_h = 8;
$glb_blur   = 1;
}

if($glb_target eq "to") {
$glb_width  = 320;
$glb_height = 200;
$glb_bloc_w = 8;
$glb_bloc_h = 1;
$glb_blur   = 0.5;
}

@glb_files = @ARGV;
if(!@glb_files) {
	print "No file found, reading from STDIN...";
	while(<STDIN>) {
		chomp;
		y%\\%/%;
		s%^([\S]):%/cygdrive/$1%;
		push(@glb_files, $_);
	}
	print "done\n";
}


# creation dossier de sortie
mkdir("rgb") || die "rgb: $!" unless -d "rgb";
for my $i (0..$#glb_files) {
	my $file = $glb_files[$i];

	my $out = $file;
	next if $out =~ /rgb/;
	$out =~ s/.*[\\\/]//;
	next if $out =~ /\.(txt|htm.*|ps|pdf)$/i;
	print 1+$i,"/",1+$#glb_files," ",$file,"\033]0;$out\007\n";
	$out =~ s/[\.][^\.]*//;
	$out = "rgb/$out.png";
	next if -f $out;
	
	my $conv = &convert($file);
	next unless $conv;
	
	$conv->Write($out);
	undef $conv;
	sleep(2);
}

sub convert {
	my($file) = @_;

	# read image
	my $img = Image::Magick->new();
	my $x=$img->ReadImage($file); 
	if($x) {print STDERR $x; return undef;}
	
	$img->Set(depth=>16);
	$img->Set(colorspace=>"RGB");
	$img->AutoLevel();
	$img->Normalize();
	$img->Modulate(saturation=>$glb_satur);
	$img->Set(fuzz=>"5%");
	$img->Trim();
	$img  = &liqrz($img,$glb_width,$glb_height);
	$img->Blur(sigma=>$glb_blur) if $glb_blur;

	#sleep(15);

	# creation image 80x75
	my @px = $img->GetPixels(map=>"RGB", height=>$glb_height, width=>$glb_width, normalize=>"True");
	
	# ajout du dither
	my @dither = ( [ 7, 13, 11, 4],
                       [12, 16, 14, 8],
  		       [10, 15,  6, 2],
 		       [ 5,  9,  3, 1] );

	# bayer 2x2
	@dither = ( [ 1,   4],
		    [ 3,   2]) if $glb_dith eq "2x2";
	
	# bayer 4x4
	@dither = ( [ 1,   9,   3,  11],
		    [13,   5,  15,   7],
		    [ 4,  12,   2,  10],
                    [16,   8,  14,   6]) if $glb_dith eq "4x4";
		  
	# bayer 8x8
	@dither = 	   ( [ 1,  49,  13,  61,   4,  52,  16,  64],
			     [33,  17,  45,  29,  36,  20,  48,  32],
                             [ 9,  57,   5,  53,  12,  60,   8,  56],
                             [41,  25,  37,  21,  44,  28,  40,  24],
                             [ 3,  51,  15,  63,   2,  50,  14,  62],
                             [35,  19,  47,  31,  34,  18,  46,  30],
                             [11,  59,   7,  55,  10,  58,   6,  54],
			     [43,  27,  39,  23,  42,  26,  38,  22]) if $glb_dith eq "8x8";
		
	# void and cluster 14x14
	@dither = (
	 [132, 188,   9,  79,  51,  19, 135,  90, 156, 103,  30,  96, 185,  74],
	 [ 23,  87, 114, 172, 143, 106,  35, 167,  10,  61, 152, 129,  41, 111],
	 [169, 138,  46,  29,  65, 189,  83,  55, 125, 190,  81,  14, 157,  57],
	 [  8,  62, 187, 122, 155,   7, 109, 178,  25, 101,  39, 177,  94, 124],
	 [ 84, 149,  97,  18,  89, 134,  45, 146,  70, 162, 140,  73,  31, 182],
	 [116,  28, 164,  48, 179,  66, 165,  15, 121,  49,   6, 128, 154,  53],
	 [191,  59, 127,  82, 117,  22, 107,  78, 174,  93, 192,  64, 100,  13],
	 [ 77, 145,   5, 186,  38, 150, 193,  40, 136,  24, 118,  32, 171, 133],
	 [ 36, 173, 104,  67, 130,  80,   4,  98,  58, 160,  71, 142,  54,  95],
	 [115,  21,  50, 159,  20, 147, 170, 123, 184,  12, 105, 181,   3, 166],
	 [153,  88, 183, 119,  92,  43,  68,  26,  85, 148,  44,  86, 126,  69],
	 [ 17, 137,  72,  11, 194, 113, 161, 139,  52, 112, 163,  27, 195,  47],
	 [175, 108,  42, 144,  34,  75,   2, 102, 196,  16,  76, 141, 110,  91],
	 [ 33,  63, 158,  99, 168, 120, 180,  60,  37, 131, 176,  56,   1, 151]
	) if $glb_dith eq "vac-14x14";
	
	# void and cluster 25x25
	@dither = (
	[166,531,107,303,541,220,478,101,232,418,315,224,425, 38,208,435,327, 23,449,339,112,455,524,279,580],
	[335, 20,411,496, 58,353,159,319,599,110,510,158,525,283,607, 84,226,540,164,235,608,314,207, 72,471],
	[252,609,217,136,276,610,416, 30,452,205,398, 22,374,108,463,349,483,121,363,509, 34,148,573,389,143],
	[448, 78,346,566,440,105,216,547,280, 70,568,312,586,259,178, 18,267,602, 56,429,271,462,332, 27,561],
	[ 65,272,487,187, 17,337,458,151,343,472,246,162, 57,397,497,556,386,147,322,191,527, 98,183,512,298],
	[430,554, 50,375,537,264,576, 44,502,125,369,539,451,122,310, 85,211,450,562, 80,357,611,257,379, 59],
	[106,316,157,245,424,119,184,409,221,612, 16,199,294,597,222,376,582, 40,239,501,288, 15,438,140,596],
	[538,360, 92,601,476,213,526,169,559,129,456,371,180,302,406,210,468, 49,443,128,356,185,333,482,127],
	[287,176,437,274, 32,378,307, 37,413,295,617,  9,474, 61,604,117,348,533,192,569, 62,523, 91,219,392],
	[593, 63,515,123,553,150,618,242,514, 82,203,273,558,334,227,508,256, 73,306,403,230,419,297,552,  8],
	[412,318,237,417,338,481, 65,390,133,351,488,405, 90,163,436, 45,420,619,114,506, 21,605,139,466,189],
	[494,134,581,  7,170,260,321,549,194,594, 41,179,513,365,592,145,320,197,387,262,352,206,385, 77,270],
	[ 39,350,209,505,441,100,491,  6,427,244,323,575,282,  5,238,461,528,  4,550,156,578, 48,534,317,620],
	[395,520, 83,269,326,567,200,300,120,530, 76,401,126,493,345, 87,218,309,464, 81,396,285,475,118,202],
	[ 96,236,423,621,144, 46,373,598,454,344,186,480,248,570,172,410,585,130,366,240,489, 95,225,439,560],
	[284,542, 19,195,402,517,263,149, 42,251,622, 25,330, 93,447, 28,292,486, 36,623,181,536,380, 31,342],
	[444,146,364,495,247,102,446,551,391,500,116,433,522,212,624,254,529,190,431,308, 54,324,131,625,173],
	[ 47,590,293, 64,600,329,204, 75,291,182,377,275,141,394, 60,368, 89,381,138,507,253,572,432,241,498],
	[383,229,465,168,399,  3,574,367,519,  2,584, 74,564,304,511,155,565,258,588, 66,407,174,  1,361,111]
	) if $glb_dith eq "vac-25x25";
	
	# rotated dispersed dither
	@dither = (
	[15, 7, 10, 4, 8, 3, 11, 7, 13, 12, 14, 6, 11, 1, 5, 2, 10, 6, 16, 9],
	[5, 2, 6, 16, 1, 9, 15, 10, 4, 16, 8, 3, 7, 13, 4, 12, 14, 11, 1, 13],
	[12, 8, 14, 11, 13, 5, 12, 2, 6, 1, 9, 5, 15, 10, 16, 8, 9, 3, 7, 4],
	[16, 9, 3, 15, 7, 4, 8, 14, 3, 11, 13, 12, 2, 14, 6, 1, 5, 15, 2, 10],
	[11, 1, 5, 2, 10, 6, 16, 9, 15, 7, 10, 4, 8, 3, 11, 7, 13, 12, 14, 6],
	[7, 13, 4, 12, 14, 11, 1, 13, 5, 2, 6, 16, 1, 9, 15, 10, 4, 16, 8, 3],
	[15, 10, 16, 8, 9, 3, 7, 4, 12, 8, 14, 11, 13, 5, 12, 2, 6, 1, 9, 5],
	[2, 14, 6, 1, 5, 15, 2, 10, 16, 9, 3, 15, 7, 4, 8, 14, 3, 11, 13, 12],
	[8, 3, 11, 7, 13, 12, 14, 6, 11, 1, 5, 2, 10, 6, 16, 9, 15, 7, 10, 4],
	[1, 9, 15, 10, 4, 16, 8, 3, 7, 13, 4, 12, 14, 11, 1, 13, 5, 2, 6, 16],
	[13, 5, 12, 2, 6, 1, 9, 5, 15, 10, 16, 8, 9, 3, 7, 4, 12, 8, 14, 11],
	[7, 4, 8, 14, 3, 11, 13, 12, 2, 14, 6, 1, 5, 15, 2, 10, 16, 9, 3, 15],
	[10, 6, 16, 9, 15, 7, 10, 4, 8, 3, 11, 7, 13, 12, 14, 6, 11, 1, 5, 2],
	[14, 11, 1, 13, 5, 2, 6, 16, 1, 9, 15, 10, 4, 16, 8, 3, 7, 13, 4, 12],
	[9, 3, 7, 4, 12, 8, 14, 11, 13, 5, 12, 2, 6, 1, 9, 5, 15, 10, 16, 8],
	[5, 15, 2, 10, 16, 9, 3, 15, 7, 4, 8, 14, 3, 11, 13, 12, 2, 14, 6, 1],
	[13, 12, 14, 6, 11, 1, 5, 2, 10, 6, 16, 9, 15, 7, 10, 4, 8, 3, 11, 7],
	[4, 16, 8, 3, 7, 13, 4, 12, 14, 11, 1, 13, 5, 2, 6, 16, 1, 9, 15, 10],
	[6, 1, 9, 5, 15, 10, 16, 8, 9, 3, 7, 4, 12, 8, 14, 11, 13, 5, 12, 2],
	[3, 11, 13, 12, 2, 14, 6, 1, 5, 15, 2, 10, 16, 9, 3, 15, 7, 4, 8, 14]
	) if $glb_dith eq "ostro94";
	
	my($dmax) = 0;
	for my $r (@dither) {for my $d (@$r) {$dmax = $d if $d>$dmax;}}
	for my $r (@dither) {for my $d (@$r) {$d/=($dmax+1);}}
		   
	for my $y (0..$glb_height-1) {
		for my $x (0..$glb_width-1) {
			my $d = $dither[$y%(1+$#dither)][$x%(1+$#dither)];
			my $p = ($x+$y*$glb_width)*3;
			$px[$p+0] += $d;
			$px[$p+1] += $d;	
			$px[$p+2] += $d;
		}
	}

	# conversion
	my @conv = (0)x($glb_width*$glb_height);
	for my $y (0..$glb_height/$glb_bloc_h-1) {
		$y *= $glb_bloc_h;
		for my $x (0..$glb_width/$glb_bloc_w-1) {
			$x *= $glb_bloc_w;
			my(@bloc);
			for my $j ($y..$y+$glb_bloc_h-1) {for my $i ($x..$x+$glb_bloc_w-1) {
				my $p = ($i + $j*$glb_width)*3;
				push(@bloc, @px[$p..$p+2]);
			}}
			my($c1, $c2) = &find(\@bloc);
			for my $j ($y..$y+$glb_bloc_h-1) {for my $i ($x..$x+$glb_bloc_w-1) {
				my $p = ($i + $j*$glb_width);
				my($ignore, $c) = &match($c1, $c2, \@px, $p*3);
				$conv[$p] = $c;
			}}
		}
	}

	# generation image sortie
	my @out;
	for my $c (@conv) {
		push(@out, ($c & 1)?255:0, ($c & 2)?255:0, ($c & 4)?255:0);
	}

	# sortie
	return &px2img($glb_width, $glb_height, @out);
	
	return $img;
}

sub find {
	my($px) = @_;
	
	my %c;
	for(my $i=0; $i<$#{$px}; $i+=3) {
		$c{($px->[$i+0]>=1?1:0)+($px->[$i+1]>=1?2:0)+($px->[$i+2]>=1?4:0)} = 1;
	}
	my @c = keys %c;
	push(@c, 0) if $#c==0;
	if($#c>=2) {
		my($bd) = 1e38;
		@c = (0,0);
		for my $c1 (0..6) {for my $c2 ($c1+1..7) {
			my $d = &dist($c1, $c2, $px, $bd);
			if($d<$bd) {$bd = $d; @c = ($c1, $c2);}
		}}
	}
	
	#print join(',', @c), "\n";
	
	return @c;
}

sub dist {
	my($c1, $c2, $px, $thr) = @_;
	
	my $d = 0;
	for(my $i=0; $d<$thr && $i<$#{$px}; $i+=3) {
		my ($t, $ignore) = &match($c1, $c2, $px, $i);
		$d += $t;
	}
	return $d;
}

sub match {
	my($c1, $c2, $px, $o) = @_;

	my $d1 = ($px->[$o+0] - ($c1&1?2:0))**2 + ($px->[$o+1] - ($c1&2?2:0))**2 + ($px->[$o+2] - ($c1&4?2:0))**2;
	my $d2 = ($px->[$o+0] - ($c2&1?2:0))**2 + ($px->[$o+1] - ($c2&2?2:0))**2 + ($px->[$o+2] - ($c2&4?2:0))**2;
	
	return $d1<$d2 ? ($d1, $c1) : ($d2, $c2);
}

sub liqrz {
	my($img, $t_width, $t_height) = @_;
	
	my $width  = $img->Get('width');
	my $height = $img->Get('height');

	my $rotate = 0;
	if(int($t_width * $height / $width+.5)>$t_height) {
		$rotate = 1;
		($width, $height)     = ($height, $width);
		($t_width, $t_height) = ($t_height, $t_width);
		$img->Rotate(degrees=>90);
	}
	
	$img->AdaptiveResize(geometry=>int($t_height * $width / $height+.5)."x".($t_height), filter=>"lanczos", blur=>1.5);

	$img->Set(colorspace=>"sRGB");
	$img->Write('rgb/zzzzzzzzzz.png');

	$width  = $img->Get('width');
	$height = $img->Get('height');
	
	local(@img, @gry, @nrj);
	for my $y (0..$height-1) {
		push(@img, [$img->GetPixels(map=>"RGB", height=>1, width=>$width, x=>0, y=>$y, normalize=>"True")]);
		push(@gry, [$img->GetPixels(map=>"I", height=>1, width=>$width, x=>0, y=>$y, normalize=>"True")]);
		push(@nrj, [(0) x $width]);
	}
	
	# fonction energie
	my $sobel = sub {
		my($x, $y) = @_;
		
		my $py = $y-1;
		my $ny = $y+1;
		my $cy = $y;
		$py = 0         if $py<0;
		$ny = $height-1 if $ny >= $height;
		
		my $px = $x-1;
		my $nx = $x+1;
		my $cx = $x;
		$px = 0        if $px<0;
		$nx = $width-1 if $nx>=$width;
			
		my $ipp = $gry[$py]->[$px];
		my $icp = $gry[$py]->[$cx];
		my $inp = $gry[$py]->[$nx];
		
		my $ipc = $gry[$cy]->[$px];
		my $inc = $gry[$cy]->[$nx];
			
		my $ipn = $gry[$ny]->[$px];
		my $icn = $gry[$ny]->[$cx];
		my $inn = $gry[$ny]->[$nx];
		
		my ($c1, $c2, $c3, $c4) = (2,1, 2,1);
		my $gx = ($inc-$ipc)*$c1+(($inp-$ipp)+($inn-$ipn))*$c2;
		my $gy = ($icn-$icp)*$c3+(($ipn-$ipp)+($inn-$inp))*$c4;
			
		return sqrt($gx*$gx + $gy*$gy);
	};
	my $gradient = sub {
		my($x, $y) = @_;
		
		my $py = $y-1;
		my $ny = $y+1;
		$py = 0         if $py<0;
		$ny = $height-1 if $ny >= $height;
		
		my $px = $x-1;
		my $nx = $x+1;
		$px = 0        if $px<0;
		$nx = $width-1 if $nx>=$width;
			
		return sqrt(($gry[$py]->[$x]-$gry[$ny]->[$x])**2 + ($gry[$y]->[$px]-$gry[$y]->[$nx])**2);
	};
	my $gradient_x = sub {
		my($x, $y) = @_;
		
		my $px = $x-1;
		my $nx = $x+1;
		$px = 0        if $px<0;
		$nx = $width-1 if $nx>=$width;
			
		return abs($gry[$y]->[$px]-$gry[$y]->[$nx]);
	};
	my $energy = $gradient_x;

	for my $y (0..$height-1) {for my $x (0..$width-1) {
		$nrj[$y]->[$x] = $energy->($x,$y);
	}}
	
	if(1) {
	my @px; my $max;
	for my $r (@nrj) {for my $e (@$r) {$max = $e if $e>$max;}}	
	for my $r (@nrj) {for my $e (@$r) {push(@px, (int($e*256/($max+1)))x3);}}
	
	my $img2 = &px2img($width, $height, @px);
	$img2->Write('rgb/zzzzzzzzz.png');
	}

	while($width > $t_width) {
		if(0) {
			my @px; my $max;
			for my $r (@nrj) {for my $e (@$r) {$max = $e if $e>$max;}}	
			for my $r (@nrj) {for my $e (@$r) {push(@px, (int($e*256/($max+1)))x3);}}
			my $img2 = &px2img($width, $height, @px);
			$img2->Write('rgb/zzzzzzzzz.png');
		}
		print STDERR "$width    \r";
		# Dijkstra
		my (@dir, @nrj2);
		for my $y (0..$height-1) {push(@dir, [(0)x$width]);}
		my (@min) = @{$nrj[0]};
		my($nrj2) = 0;
		push(@nrj2, [@min]) if $nrj2;
		for my $y (1..$height-1) {
			my(@m1n, $dir, $min);
			for my $x (0..$width-1) {
				my(@p) = ($x);
				push(@p, $x-1) if $x>0;
				push(@p, $x+1) if $x<$width-1;
				#push(@p, $x-2) if $x>1;
				#push(@p, $x+2) if $x<$width-2;
				
				$min = $min[$dir = pop(@p)];
				for my $q (@p) {if($min[$q]<$min) {$min = $min[$dir=$q];}}
		
				$dir[$y]->[$x] = $dir;
				push(@m1n, $min + $nrj[$y]->[$x]);
			}
			@min = @m1n;
			push(@nrj2, [@min]) if $nrj2;
		}
		
		if($nrj2) {
			my($max, @px) = 1;
			for my $r (@nrj2) {for my $e (@{$r}) {$max = $e if $e>$max;}}	
			for my $r (@nrj2) {for my $e (@{$r}) {push(@px, (int($e*256/($max+1)))x3);}}
			my $img2 = &px2img($width, $height, @px);
			$img2->Write('rgb/zzzzzzzzz__.png');
		}
		
		#for my $m (@min) {print STDERR " ", int($m*100)/100;}print STDERR "\n";

		# find minima
		my ($min, $pos) = 1e38;
		for my $x (0..$width-1) {$min = $min[$pos = $x] if $min[$x]<$min;}
		last if $min>=1e38;
		#print STDERR "POS=$pos ($min)     ";
	
		# delete pixel
		my($smooth) = 0;
		for(my ($y,$p)=($height, $pos); --$y>=0; $p = $dir[$y]->[$p]) {
			my (@t) = splice($img[$y], $p*3, 3);
			if($smooth && $p>0) {
				for my $i (0..2) {
					$img[$y]->[3*$p+$i-3] = ($img[$y]->[3*$p+$i-3]+$t[$i])/2;
				}
			}
			if($smooth && $p<$width-1) {
				for my $i (0..2) {
					$img[$y]->[3*$p+$i] = ($img[$y]->[3*$p+$i]+$t[$i])/2;
				}
			}
			
			my ($t) = splice($gry[$y], $p, 1);
			if($smooth && $p>0) {
				$gry[$y]->[$p-1] = ($gry[$y]->[$p-1]+$t)/2;
			}
			if($smooth && $p<$width-1) {
				$gry[$y]->[$p] = ($gry[$y]->[$p]+$t)/2;
			}			
			splice($nrj[$y], $p, 1);
		}	
		
		--$width;
		# rebuild NRJ
		for(my ($y,$p)=($height, $pos); --$y>=0; $p = $dir[$y]->[$p]) {
			$nrj[$y]->[$p-1] = $energy->($p-1, $y) if $p>0;
			$nrj[$y]->[$p]   = $energy->($p  , $y) if $p<$width;
			
			$nrj[$y]->[$p-2] = $energy->($p-2, $y) if $smooth && $p>1;
			$nrj[$y]->[$p+1] = $energy->($p+1, $y) if $smooth && $p+1<$width;
		}
	}

	my @px;
	for my $r (@img) {for my $e (@$r) {push(@px, int($e*255));}}
	$img2 = &px2img($width, $height, @px);
	$img2->Write('rgb/zzzzzzzzzzz.png');

	if($rotate) {
		$img->Rotate(degrees=>-90);
		$img2->Rotate(degrees=>-90);
	}
	
	$img2->Set(depth=>16);
	$img2->Set(colorspace=>"RGB");
	
	#print "i>", $img->Get('colorspace'),"\n";
	#print "o>", $img2->Get('colorspace'),"\n";
	
	return $img2;
}

sub px2img {
    my($width,$height,@px) = @_;

    my $img2;
    if($#px>1000) {
        open(OUT,">/tmp/.toto2.pnm");print OUT "P6\n$width $height\n255\n",pack('C*', @px),"\n";close(OUT);
        $img2 = Image::Magick->new();
        $img2->ReadImage("/tmp/.toto2.pnm");
        unlink "/tmp/.toto2.pnm";
    } else {
	my $txt = "P6\n$width $height\n255\n".pack('C*', @px)."\n";
	#system("convert 'inline:data:,".encode_base64($txt)."' toto.gif");
	$img2 = Image::Magick->new();
        my $x = $img2->ReadImage("inline:data:image/pnm,".encode_base64($txt));
	warn $x."\n$width $height ".(1+$#px)/3 if $x;
    } 

    return $img2;
 }
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: Defcard Software-actus

Message par jester »

Vous êtes content de vous, avec vos conneries on ne verra jamais le slideshow final !
J'allais me récupérer un TO8 pour l'occasion...

N'empêche qu'avec la technique de defcard, je pouvais voir les videos Thomson sur SD Card de Daniel avec mon téléphone (5") presque en qualité HD 8)
Avatar de l’utilisateur
petitjd
Messages : 2007
Inscription : 23 oct. 2007 11:50

Re: Defcard Software-actus

Message par petitjd »

Pour faire simple, disons que sur un petit écran, les défauts de l'image source sont moins visible que sur un écran plus grand.
C'est un peu comme les captures d'écran réduites sur le site de Daniel pour les jeux, ca parrait super beau les jeux Thomson à cette taille, mais en fait... non.

Cela dit, suivant la qualité des dalles, l'image sur un grand écran peut carrément être dégeulasse par rapport à la concurrence, ce qu'on constate moins sur les petites dalles, technologies plus éprouvées? Couts?
PetitJD
Tortue Jeulin: www.tortue-jeulin.com
Nanoreseau: www.nanoreseau.net
Proteus III: www.proteus-international.fr
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17495
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Defcard Software-actus

Message par fneck »

defcard a écrit :fneck chien de traineau !!
Tiens, je ne connaissais pas l'expression, c'est une insulte je suppose...? :|
Je me laisse un peu de temps pour savoir ce que je fais de ton compte et de ce topic.
En attendant tu es banni, si tu veux ajouter quelque chose tu peux le faire dans la rubrique "de passage".
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Daniel
Messages : 17412
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Defcard Software-actus

Message par Daniel »

La véritable insulte est "Fils de chien de traineau". "Chien de traineau" est une forme édulcorée, moins agressive.
Pourquoi defcard a-t-il disjoncté ? J'aimais bien ses délires et son côté artiste, complètement inculte en matière scientifique. Etait-ce un rôle de composition ou sa véritable nature, le doute restera...
Daniel
L'obstacle augmente mon ardeur.
Fabrice Montupet

Re: Defcard Software-actus

Message par Fabrice Montupet »

fneck a écrit :Tiens, je ne connaissais pas l'expression, c'est une insulte je suppose...? :|
Ce n'est pas une insulte. Être "un chien de traineau" signifie: toujours avancer avec la meute d'une manière disciplinée, aveuglément. Dans notre monde vidéo ludique, le chien de traineau serait équivalent au Lemming.
__sam__
Messages : 7970
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Defcard Software-actus

Message par __sam__ »

Moi non plus j'ai pas compris pourquoi il s'est énervé tout seul :shock: A relire ce sujet depuis le début je m'aperçois qu'il s'était fait sa propre interprétation de la notion définition des moniteurs et qu'il n'a jamais changé de point de vu. Maintenant de là à partir en vrille pour ca c'est curieux. Peut-être est-il un impulsif par moments, ou sur certains sujets.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Fool-DupleX
Messages : 2341
Inscription : 06 avr. 2009 12:07

Re: Defcard Software-actus

Message par Fool-DupleX »

Oula je pars un week-end et ca part en troll ... :shock:

Pour en revenir aux images, la trame void and cluster 25x25 comporte un défaut qui provoque un lignage visible a l'oeil nu. Cette matrice est mauvaise ou tu t'es trompé Sam en recopiant les valeurs de seuil. Par contre je suis assez bluffé par la 16x16 sur nos images.

La thèse de Victor explique en détails Combiscreen ce n'est pas très compliqué et ce qui est très bien c'est qu'on peut inventer des formes géométriques à l'infini pour la matrice, du moment qu'elle est pavable. Mais en fouillant dans mes archives, je dois pouvoir te retrouver quelques matrices interessantes.

Enfin pour l'histoire de la palette custom, j'ai pas compris le delire. Il suffit de voir les poids accordés à R,V, B sur la palette thomson par exemple, pour comprendre que le choix est arbitraire et dicté plus par la facilité à pondérer le rouge, vert, bleu avec une PROM de 8x4 bits qu'autre chose. Les gars se sont dit on va rajouter un demi-niveau en luminosité et ... mince blanc clair ca existe pas, bon mettons... heu... du orange.

Maintenant concernant la composition d'images a partir d'encres custom, sujet hautement suivi dans le monde de l'impression de securite (e.g. billets de banques), c'est un sujet que je connais très bien aussi puisque ca faisait partie des sujets de recherches de notre labo. Voici quelques exemples et articles excellents à ce sujet :

http://lsp.epfl.ch/files/content/sites/ ... eynote.pdf
http://lsp.epfl.ch/colorpublications

Mais en particulier, pour ouvrir le débat lancé par defcard, celui-ci :

http://lspwww.epfl.ch/publications/colo ... wci_02.pdf

Notons que ces recherches ont abouti à un résultat industriel exceptionnel il y a environ 3 ans :

Images invisibles

Fini les aigles bleus moches sur les cartes Visa !

La reproduction couleur est un sujet complexe. L'article que je mentionne plus haut montre comment reproduire une image le plus fidèlement possible à partir d'un jeu d'encre choisies arbitrairement. On observe qu'il y a plusieurs approches possibles mais que toutes ont des défauts. On peut clore l'affaire en mentionnant qu'aucun écran ne peut reproduire parfaitement le monde réel, car l'espace des couleurs reproductibles (le gamut) dépend de la qualité des trois composantes RVB de base et de l'aptitude à les manipuler sans dérive en luminosité et sans influence réciproque (d'ou les notions de gamma, pitch, rémanence, calibration etc.). Le gamut n'étant autre qu'un espace vectoriel algébrique basé sur les trois composantes RVB, il est donc fini, contrairement à la réalité. Certaines couleurs sont donc purement et simplement impossibles à reproduire.

Au final, les industriels ont simplement décidé de normaliser les couleurs à partir de tests colorimétriques perceptuels réalisés auprès d'un échantillon représentatif de la population, c'est le fameux ensemble de normes CIE. On peut donc dire que ce qu'on voit sur un écran n'est pas réel. D'ailleurs il existe quelques expériences d'illusion colorimétrique qui comme les illusions géométriques (plus connues) donnent l'impression d'être devenu fou quand on en est la victime (e.g. z'y va, mets ta mère !).
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3052
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Defcard Software-actus

Message par Papy.G »

Merci beaucoup Fool-Duplex, je mets à présent un nom sur ce phénomène qui fait que, selon l'éclairage, j'a du mal à différencier le vieux gris, le vieux gris jauni, et le nouveau gris dans mes Legos. Je me doutais bien que c'était un truc du genre. :evil:

Je pensais qu'il avait fin par assimiler les contraintes de bases et les lois mathématiques et physiques qui encadrent les applications électroniques d'imagerie depuis que l'on entendait plus parler des "images qui flashent", mais en fait, non. :shock:
Il y a bien longtemps que je ne suivais ce sujet que de loin, et je suis navré que cela finisse ainsi. :cry:
Merci à ceux qui ont eu le courage et la patience d'essayer d'enseigner leur savoir, je vous admire. :)
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Fool-DupleX
Messages : 2341
Inscription : 06 avr. 2009 12:07

Re: Defcard Software-actus

Message par Fool-DupleX »

En effet, c'est bien à cet effet auquel tu es confronté, ce n'est pas un problème de vieillesse ou que sais-je ! On peut aller très loin dans le métamérisme. Quand je donnais le cours sur la couleur, j'avais un objet de couleur perçue bleutée (ciel clair) dans la salle de cours sous l'éclairage au néon. Ce chapitre du cours se donnait mi à l'intérieur et mi à l'extérieur, de préférence par beau temps. Une fois dehors, je poursuivais mon cours par une phrase du genre "et donc, si on reprend l'objet orange que je vous ai montré tout a l'heure ...". Immanquablement, un étudiant me corrigeait. Or l'objet etait bel et bien orange a la lumiere du soleil ! Hilarité et perplexité générale ... Pour prouver le métamérisme, je refaisais le chemin inverse et on pouvait observer le "changement" de couleur en rentrant à l'intérieur.

Dans le même genre, la lessive lave plus blanc que blanc de Coluche est effectivement une jolie astuce de colorimétrie. Techniquement, elle ne lave pas grand chose, mais elle rend bien le linge plus blanc que blanc, par l'adjonction d'un colorant appelé azurant; en fait une substance fluorescente qui absorbe les UV et les réémet dans le bleu, donnant effectivement l'illusion de blanc plus blanc que blanc. On utilise énormément les azurants pour le linge en coton, qui n'est pas blanc, contrairement à la croyance populaire. Un t-shirt en coton lavé maintes fois avec une lessive sans azurant jaunit ; il n'est pas usé ou plus sale, mais au contraire plus propre, car débarrassé des stilbènes qu'il contenait.
__sam__
Messages : 7970
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Defcard Software-actus

Message par __sam__ »

De quelle couleur est cette robe?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Fool-DupleX
Messages : 2341
Inscription : 06 avr. 2009 12:07

Re: Defcard Software-actus

Message par Fool-DupleX »

Encore cette histoire ... :roll:
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3052
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: Defcard Software-actus

Message par Papy.G »

Attention au phénomène d'irisation, qui est un autre phénomène rendant des couleurs changeantes, mais qui est dû à la structure de la surface incriminée, plus qu'au phénomène évoqué précédement. C'est un phénomène optique, qui n'a pas de rapport direct avec les mécanismes de perception humaine.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Répondre