LogIn E-mail
¼³°èÀ̾߱â
rgb2ycbcr.pl
# 91 JMJS    10.5.12 15:20

#!/usr/bin/perl

sub round { sprintf("%.$_[1]f", $_[0]);}


sub rgb2ycbcr {
        my ($r,$g,$b,$y,$cb,$cr)=@_;
        $y = ( 306*$r+601*$g+117*$b)/1024;
        $cb=((-173*$r-339*$g+512*$b)/1024)+128;
        $cr=(( 512*$r-429*$g- 83*$b)/1024)+128;
        if($y <0){$y =0;} if($y >255){$y =255;}
        if($cb<0){$cb=0;} if($cb>255){$cb=255;}
        if($cr<0){$cr=0;} if($cr>255){$cr=255;}
        (int $y,int $cb,int $cr);
}


sub ycbcr2rgb {
        my ($y,$cb,$cr,$r,$g,$b)=@_;
        $r=$y+((         $cr*1436)>>10)-179;
        $g=$y-(($cb* 352+$cr* 731)>>10)+135;
        $b=$y+(($cb*1815         )>>10)-227;
        if($r<0){$r=0;} if($r>1023){$r=1023};
        if($g<0){$g=0;} if($g>1023){$g=1023};
        if($b<0){$b=0;} if($b>1023){$b=1023};
        (int $r,int $g,int $b);
}

sub de2_rgb2ycbcr {
        my ($r,$g,$b,$y,$cb,$cr)=@_;
        $r=(($r*4)-1)*128+105555;
        $g=(($g*4)-1)*128 -64218;
        $b=(($b*4)-1)*128+131072;
        $y =(( 306.0295*$r+600.9306*$g+117.0399*$b)/1024/551); #+ 16.0451;
        $cb=((-176.5678*$r-346.7149*$g+523.2827*$b)/1024/551); #+127.9907;
        $cr=(( 523.2827*$r-437.9799*$g- 85.3029*$b)/1024/551); #+127.9288;
        if($y <0){$y =0;} if($y >255){$y =255;}
        if($cb<0){$cb=0;} if($cb>255){$cb=255;}
        if($cr<0){$cr=0;} if($cr>255){$cr=255;}
        #(int $y,int $cb,int $cr);
        (round($y,0),round($cb,0),round($cr,0));
}


sub de2_ycbcr2rgb {
        my ($y,$cb,$cr,$r,$g,$b)=@_;
        $r=((551*$y        +756*$cr-105555)/128)+1;
        $g=((551*$y-186*$cb-385*$cr+ 64218)/128)+1;
        $b=((551*$y+955*$cb        -131072)/128)+1;
        $r/=4; if($r<0){$r=0;} if($r>255){$r=255};
        $g/=4; if($g<0){$g=0;} if($g>255){$g=255};
        $b/=4; if($b<0){$b=0;} if($b>255){$b=255};
        #($r,$g,$b);
        #(round($r,0),round($g,0),round($b,0));
        (int $r,int $g,int $b);
}

for(my $r=0;$r<256;$r+=15) {
 for(my $g=0;$g<256;$g+=15) {
  for(my $b=0;$b<256;$b+=15) {
        my($y,$cb,$cr)        =de2_rgb2ycbcr($r,$g,$b);        
        ($r,$g,$b)        =de2_ycbcr2rgb($y,$cb,$cr);
        ($y,$cb,$cr)        =de2_rgb2ycbcr($r,$g,$b);        
        my($r2,$g2,$b2)        =de2_ycbcr2rgb($y,$cb,$cr);
        if(($r!=$r2)||($g!=$g2)||($b!=$b2)) {
                print "$r $g $b";
                print "\t-> $y $cb $cr";
                print "\t-> $r2 $g2 $b2";
                ($y,$cb,$cr)=de2_rgb2ycbcr($r2,$g2,$b2);        
                print "\t-> $y $cb $cr";
                ($r2,$g2,$b2)=de2_ycbcr2rgb($y,$cb,$cr);
                print "\t-> $r2 $g2 $b2\n";
        }
}}}

÷ºÎÆÄÀÏ: rgb2ycbcr.pl
°Ô½Ã¹°: 115 °Ç, ÇöÀç: 1 / 1 ÂÊ
¹øÈ£ Á¦       ¸ñ ÀÛ¼ºÀÚ µî·ÏÀÏ ¹æ¹®
115  perl format JMJS 24.6.22 597
114  perl -p -i -e s/abc/def/g JMJS 24.3.26 448
113  Deleting from a Hash , defined , exists JMJS 25.7.9 566
112  yaml file Àбâ JMJS 23.11.30 682
111  alzipcon JMJS 22.11.26 695
110  file2date.pl JMJS 24.6.1 783
109  UTF-8, EUC-KR JMJS 19.12.15 826
108  wget.pl LWP Simple get JMJS 19.9.17 822
107  X JMJS 19.9.17 804
106  X JMJS 19.9.17 814
105  X JMJS 19.9.17 815
104  X JMJS 19.9.17 828
103  X JMJS 19.9.17 803
102  X JMJS 19.9.17 808
101  gnome-terminal JMJS 25.7.3 814
100  jsame.pl JMJS 09.5.21 2449
99  jos.pl JMJS 08.11.29 2077
98  jmngr.pl - jmjspro manager JMJS 08.11.29 2088
97  vhdl.pm JMJS 08.11.29 1929
96  jreg.pl JMJS 08.11.29 2060
95  jtree.pm JMJS 08.11.29 1964
94  w2c.pl JMJS 08.11.29 2085
93  jdread.pl JMJS 08.11.29 1853
92  ffile.zip ffilediff.pl JMJS 09.4.24 1878
91  rgb2ycbcr.pl JMJS 10.5.12 2145
90  proview.pl JMJS 08.11.29 2173
89  smi_shift.pl JMJS 10.10.3 1887
88  srt2smi.pl srtshift.pl JMJS 18.7.14 2085
87  Perl CGI Input Test, getenv.cgi JMJS 18.11.21 1684
86  hash JMJS 24.6.22 1988
85  tr a-z A-Z ġȯ , ´ë¼Ò¹®ÀÚ º¯È¯ , ¹®ÀÚ¿­ Á¶°Ç , ... JMJS 24.6.22 1643
84  JARRAY->jfunc JMJS 08.10.2 1803
83  ¼öÄ¡ÇÔ¼ö - ... JMJS 09.5.7 2210
82  ¿ªÇà·Ä3x3 JMJS 09.5.7 2459
81  hex2int.pl JMJS 10.9.12 2869
80  stat - file status º¸±â JMJS 07.12.16 1903
79  Perl Tip JMJS 24.6.22 2920
78  SMI file sync delay JMJS 07.7.18 1990
77  rmword.pl JMJS 07.6.18 1923
76  pack unpack JMJS 24.6.22 2012
75  [Perl]read_dir.pl JMJS 07.2.22 2230
74  [Perl]jtab2char - tab¹®ÀÚ¸¦ ƯÁ¤ char·Î ¹Ù²ãÁÖ±â JMJS 07.2.22 2093
73  Perl ¼ýÀÚ Sorting JMJS 11.5.17 2113
72  [CGI]GET and POST JMJS 06.11.20 3677
71  Perl Grammer JMJS 06.9.4 3272
70  Ç¥ÁØ ¸ðµâ JMJS 06.8.10 2276
69  Getopt::Long example JMJS 06.8.10 2306
68  array of array JMJS 06.4.22 1909
67  [HTML]Å×ÀÌºí ¹è°æ¿¡ ±×¸²³Ö±â JMJS 06.3.8 1997
66  l2w.pm - line to word JMJS 08.12.1 2044
65  make_random_chars JMJS 05.8.10 1788
64  mail º¸³»´Â script JMJS 05.3.23 1795
63  ½ÇÇàÆÄÀÏÀ» ½ÇÇà½Ã۰í Ç¥ÁØ¿¡·¯ Àбâ JMJS 09.2.25 1819
62  ÆË¾÷â(°øÁöâ)¶ç¿ì±â Jinsung 03.12.16 2779
61  print <<ENDLINE JMJS 03.12.5 1793
60  [HTML]Target JMJS 03.5.21 1962
59  [Perl]jutil.pm JMJS 03.5.3 2017
58  [Perl]jdiff.pl JMJS 02.6.6 2085
57  [Perl]cfilter.pm - commant filter JMJS 02.1.31 2051
56  [HTML]ÀÚµ¿À¸·Î ´Ù¸¥ ÆäÀÌÁö À̵¿ JMJS 02.1.19 1966
55  STDIN file open glob -w warning JMJS 24.6.22 2025
54  opendir , readdir , closedir JMJS 24.6.22 1955
53  rand_diff JMJS 01.10.23 1905
52  vcd2v.pl JMJS 15.8.25 1769
51  file upload JMJS 24.6.22 1902
50  umask(070) <- chmod o-rwx Áø¼º 01.3.16 2066
49  head2index Áø¼º 01.3.15 1727
48  grep.pl JMJS 11.1.20 1865
47  chr(13) = \M Áø¼º 01.3.15 1755
46  stty JMJS 01.3.12 1830
45  des.pl JMJS 01.3.8 1659
44  chr_plus.pl JMJS 01.3.8 1813
43  get passwd in unix JMJS 19.8.18 1706
42  unsort JMJS 19.9.10 2155
41  read from website web JMJS 19.5.15 1644
40  vec JMJS 01.3.8 1948
39  chomp $_ @_ say defined use 5.010 state grep any ... JMJS 18.10.27 1753
38  [Perl Tk] µµ½ºÃ¢ ¾øÀÌ, ÆÞ Tk ½ºÅ©¸³Æ® ½ÇÇàÇϱâ; ... JMJS 17.9.30 1822
37  @bs = sort {$a <=> $b} @as; JMJS 17.7.12 1892
36  if ( -e -z -s -f -d -T -B -M ) JMJS 16.3.10 1902
35  mkmm.pl - make freemind JMJS 12.5.22 1910
34  perl -pi.orig -e "s/\bu_(\w+_t)\b/u$1/g" *.c JMJS 11.8.26 1923
33  .xls output csv ÆÄÀÏ¿¡ \n "°¡ ÀÖÀ»¶§ JMJS 11.4.13 1873
32  jdcat.pl juncat.pl JMJS 11.2.24 2005
31  print chr(ord('a')); JMJS 01.3.8 1885
30  require "/user/home/jin1/jin1.pm"; JMJS 00.11.28 1828
29  for(my $i=0; $i < @abc; $i ++) {} JMJS 00.11.15 1766
28  remove blank $abc =~ s/[\s]+//g; Á¤±ÔÇ¥Çö½Ä ... JMJS 25.7.16 1763
27  array and for JMJS 00.11.14 1687
26  È¨ÆäÀÌÁö ÀÚµ¿ À̵¿ JMJS 00.10.28 1787
25  html¿¡¼­ ¾²ÀÌ´Â ±âȣǥ½Ã¹æ¹ý JMJS 00.9.30 1539
24  ¹è¿­ÀÇ ¹üÀ§ ¿¬»êÀÚ JMJS 00.9.20 1997
23  for(1..3) { print "$_";} JMJS 09.4.24 1698
22  package JMJS 24.6.22 1749
21  ÁÙ¿¡¼­ ÇѱÛÀÚ °íÄ¡±â JMJS 00.8.7 1744
20  hotkey function by getc JMJS 00.7.21 1737
19  read, sysread, syswrite JMJS 00.7.21 2761
18  crypt JMJS 00.7.13 2023
17  csv2gan.pl JMJS 11.4.4 2044
16  hexa JMJS 24.6.18 1836
15  file in out.pl JMJS 00.7.5 1960
14  ARGV JMJS 00.7.5 1868
13  jtime.pm - localtime, timelocal JMJS 09.4.9 2221
12  @INC JMJS 00.7.5 2267
11  $#myarray JMJS 00.7.5 2042
10  Hash of Array JMJS 00.7.5 1810
9  package JARRAY JHASH JMJS 00.7.4 2169
8  foreach, while each, dos2unix.pl, next last JMJS 09.4.24 2047
7  base64 enc dec binary JMJS 25.6.30 1862
6  file lock JMJS 00.7.4 1957
5  gettime JMJS 00.7.4 2193
4  [Perl]jcdread.pl JMJS 00.7.4 2026
3  [Perl]jdread.pl JMJS 00.7.4 1870
2  Monti Hall problem JMJS 24.6.27 1885
1  DESTROY JMJS 09.7.20 1909
[1]