সাব-পিক্সেল জুমিং


9

আপনার কাজটি একটি 24 বিপিপি এসআরজিবি ইমেজ নেওয়া এবং একই চিত্রের উপরের ছাপ 3x, লাল, সবুজ এবং নীল উপপিক্সেলগুলিতে আউটপুট দেওয়া। ফলাফলটি সম্পূর্ণ খাঁটি কালো, লাল, সবুজ এবং নীল পিক্সেল দিয়ে তৈরি করা হবে els

উত্স চিত্র থেকে প্রতিটি পিক্সেল, যখন জুম করা হয়, তখন 9 টি উপ-পিক্সেলের ব্যবস্থা তৈরি করে যা হয় হয় বা বন্ধ হয় (অর্থাত্ তাদের নিজ নিজ রঙ বা কালো)। সুনির্দিষ্ট বিন্যাসে লাল, সবুজ এবং নীল বর্ণের তিনটি কলাম এই ক্রমে ব্যবহার করা হয়েছে:

আরজিবি সাবপিক্সেল

(দ্রষ্টব্য যে এই "পিক্সেল" এর সীমানাগুলি কেবল প্রদর্শনের জন্য))

যেহেতু নয়টি উপ-পিক্সেলগুলির প্রতিটি কেবল চালু বা বন্ধ হতে পারে, তাই আপনাকে 3 স্তরের উজ্জ্বলতা অর্জন করতে ইনপুট চিত্রের পরিমাণ এবং বিভিন্ন উপ-পিক্সেল নিদর্শন ব্যবহার করতে হবে।

চিত্রের প্রতিটি উপ-পিক্সেলের জন্য:

  • 0-74 রঙের স্তরের জন্য, সমস্ত উপ-পিক্সেল কালো হওয়া উচিত।
  • 75-134 রঙের স্তরের জন্য, মাঝের সাবপিক্সেলটি যথাযথ রঙ এবং অন্য দুটি কালো হওয়া উচিত।
  • 135-179 রঙের স্তরের জন্য, মাঝের সাবপিক্সেলটি কালো এবং অন্য দুটি অবশ্যই বর্ণের হতে হবে
  • 180-255 রঙের স্তরের জন্য, তিনটি সাবপিক্সেলই তাদের নিজ নিজ রঙের হওয়া উচিত

আমি এই স্তরগুলির ব্যাপ্তিগুলি বেছে নিয়েছি কারণ ভাল দেখতে দেখতে যা ঘটেছিল সেগুলি

এই রূপান্তরটি চিত্রের প্রতিটি পিক্সেলটিতে প্রয়োগ করুন এবং উপ-পিক্সেল-আপসিল্ড চিত্রটি আউটপুট করুন।

একক পিক্সেল উদাহরণ

rgb (40, 130, 175) এই প্যাটার্নটি উত্পাদন করবে:

00B / 0G0 / 00B

আরজিবি (160, 240, 100) এই ধরণটি তৈরি করবে:

RG0 / 0GB / RG0

সম্পূর্ণ চিত্র উদাহরণ

মোনালিসা মোনা লিসা সাবপিক্সেল

তারকাময় রাত স্টারি নাইট সাবপিক্সেল

টিয়া পাখি তোতা সাবপিক্সেল

উইকিপিডিয়া থেকে প্রাপ্ত ছবিগুলি

বিধি এবং নোট

  • ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে থাকতে পারে, তা আসল চিত্রের ফাইল বা আরজিবি মানগুলির (সম্ভবত নেস্টেড) তালিকা থাকুক।
  • আপনি ধরে নিতে পারেন যে পিক্সেলগুলি 24BPP এর সাথে এসআরজিবি রঙিন স্থানে রয়েছে।

শুভ গল্ফিং!


2
প্রাথমিক বিবরণটি আন-বেয়ারিংয়ের মতো শোনাচ্ছে। দেখা যাচ্ছে যে এটি আংশিকভাবে অপ্রচলিত 3x3 মাস্কের কারণে নয় তবে মূলত কোয়ান্টাইজেশনের কারণে, তবে আইএমও এটি উপ-পিক্সেল জুমিংয়ের চেয়ে আন-বেয়ারিংয়ের আরও কাছাকাছি রয়েছে (যা কিছুটা এন্টি-প্রতিস্থাপনে প্রান্ত সনাক্তকরণের সাথে উপসাগরিত হবে) ওরফে)।
পিটার টেলর

একটি আকর্ষণীয় চ্যালেঞ্জের জন্য ধন্যবাদ .... এটি বাস্তব জীবনের কোনও কিছুর জন্য আসলে ব্যবহৃত হয়?
উজ্জ্বল

উত্তর:


4

জাভাস্ক্রিপ্ট (নোড, ক্রোম, ফায়ারফক্স), 111 বাইট

I / O ফর্ম্যাট: [R,G,B]মানগুলির ম্যাট্রিক্স ।

a=>[...a,...a,...a].map((r,y)=>r.flat().map((_,x)=>a[y/3|0][x/3|0].map(v=>x--%3|511+y%3%2*3104>>v/15&1?0:255)))

এটি অনলাইন চেষ্টা করুন! (মাত্র একটি পিক্সেল)

কিভাবে?

সমস্ত প্রান্তিক মানগুলি 15 এর গুণক exp

 bit | range   | top/bottom | middle
-----+---------+------------+--------
  0  |   0- 14 |     off    |   off
  1  |  15- 29 |     off    |   off
  2  |  30- 44 |     off    |   off
  3  |  45- 59 |     off    |   off
  4  |  60- 74 |     off    |   off
  5  |  75- 89 |     off    |    on
  6  |  90-104 |     off    |    on
  7  | 105-119 |     off    |    on
  8  | 120-134 |     off    |    on
  9  | 135-149 |      on    |   off
 10  | 150-164 |      on    |   off
 11  | 165-179 |      on    |   off
 12  | 180-194 |      on    |    on
 13  | 195-209 |      on    |    on
 14  | 210-224 |      on    |    on
 15  | 225-239 |      on    |    on
 16  | 240-254 |      on    |    on
 17  |   255   |      on    |    on

আমরা এনকোড বন্ধ হিসাবে এবং উপর যেমন অর্ডার বসানো শূন্যগুলি সংখ্যা পূর্ণবিস্তার হবে।10

আমরা পেতে:

  • 000000000111111111শীর্ষ এবং নীচে পিক্সেলের জন্য ( দশমিক )511
  • 000000111000011111মাঝের পিক্সেলের জন্য ( দশমিক )3615

মন্তব্য

a =>                      // a[] = input matrix
  [...a, ...a, ...a]      // create a new matrix with 3 times more rows
  .map((r, y) =>          // for each row r[] at position y:
    r.flat()              //   turn [[R,G,B],[R,G,B],...] into [R,G,B,R,G,B,...]
                          //   i.e. create a new list with 3 times more columns
    .map((_, x) =>        //   for each value at position x:
      a[y / 3 | 0]        //     get [R,G,B] from the original matrix
       [x / 3 | 0]        //     for the pixel at position (floor(x/3), floor(y/3))
      .map(v =>           //     for each component v:
        x-- % 3 |         //       1) yield a non-zero value if this is not the component
                          //          that we're interested in at this position
        511 +             //       2) use either 511 for top and bottom pixels
        y % 3 % 2 * 3104  //          or 3615 for the middle pixel (y mod 3 = 1)
        >> v / 15         //          divide v by 15
        & 1               //          and test the corresponding bit
        ?                 //       if either of the above tests is truthy:
          0               //         yield 0
        :                 //       else:
          255             //         yield 255
      )                   //     end of map() over RGB components
    )                     //   end of map() over columns
  )                       // end of map() over rows

উদাহরণ

নিম্নলিখিত কোড স্নিপেট মোনা লিসার (64x64) মাথাটি প্রসেস করে। এজ এ কাজ করে না।


3

জেলি , 27 বাইট

<“⁷KṆ‘‘Ḅœ?Ɗo⁹’)×€"3⁼þ¤)ẎZ)Ẏ

তালিকা (সারি) তালিকার তালিকা (চিত্র) (পিক্সেল) গ্রহণ করে এমন এক লিঙ্ক লিঙ্ক। প্রতিটি পিক্সেল তিনটি পূর্ণসংখ্যার হচ্ছে , একই বিন্যাসে ফলাফলের উৎপাদ পারে।[0,255][r, g, b]

এটি অনলাইন চেষ্টা করুন! এই উদাহরণটি দু'একটি ছবি নিচ্ছে যেখানে শীর্ষ-বাম পিক্সেল প্রথম উদাহরণ পিক্সেল, উপরের-ডান পিক্সেলটি দ্বিতীয় উদাহরণ পিক্সেল, নীচে-বাম পিক্সেল একটি কালো পিক্সেল এবং নীচে-ডান পিক্সেলটি একটি সাদা পিক্সেল।

কিভাবে?

<“⁷KṆ‘‘Ḅœ?Ɗo⁹’)×€"3⁼þ¤)ẎZ)Ẏ - Link: list of lists of lists of integers, I
                         )  - for each row, R, in I:
                      )     -   for each pixel, P, in R:
              )             -     for each integer, C, in P:
 “⁷KṆ‘                      -       list of code-page indices = [135,75,180]
<                           -       less than -> [C<135,C<75,C<180] 
          Ɗ                 -       last three links as a monad:
      ‘                     -         increment -> [1+(C<135),1+(C<75),1+(C<180)]
       Ḅ                    -         from binary -> 4*(1+(C<135))+2*(1+(C<75))+1+(C<180)
        œ?                  -         permutation at that index of [C<135,C<75,C<180]
                            -         when all permutations sorted lexicographically
                            -       ... a no-op for all but [0,0,1]->[0,1,0]
            ⁹               -       256
           o                -       logical OR  e.g. [0,1,0]->[256,1,256]
             ’              -       decrement               ->[255,0,255]
                     ¤      -     nilad followed by link(s) as a nilad:
                  3         -       three
                    þ       -       table with: (i.e. [1,2,3] . [1,2,3])
                   ⁼        -         equal?    -> [[1,0,0],[0,1,0],[0,0,1]]
                 "          -     zip with:
                €           -       for each:
               ×            -         multiply
                       Ẏ    -   tighten (reduce with concatenation)
                        Z   -   transpose
                          Ẏ - tighten

আমি কোথায় এটি এনকোড করে তা বের করার চেষ্টা করছি [[1,0,0] [[0,1,0], [0,0,1]] এবং আমি হতবাক।
উজ্জ্বল

@ ডনব্রাইট ফলনের 3⁼þ¤একটি বাহ্যিক পণ্য সম্পাদন [1,2,3]=[1,2,3]করে [[1=1,2=1,3=1],[2=1,2=2,2=3],[3=1,3=2,3=3]]যা হয় [[1,0,0],[0,1,0],[0,0,1]]
জোনাথন অ্যালান

2

ওল্ফ্রাম ভাষা (গণিত) , 186 বাইট

ইনপুট এবং আউটপুট আরজিবি মানগুলির তালিকা

(g=#;Flatten[(T=Transpose)@Flatten[T/@{{#,v={0,0,0},v},{v,#2,v},{v,v,#3}}&@@(If[(l=Max@#)<75,v,If[74<l<135,{0,l,0},If[134<l<179,{l,0,l},{l,l,l}]]]&/@#)&/@g[[#]],1]&/@Range[Length@g],1])&

এটি অনলাইন চেষ্টা করুন!


ওল্ফ্রাম ভাষা (গণিত), 243 বাইট

এই দ্বিতীয় কোডটি এমন একটি ফাংশন যা কোনও চিত্রকে ইনপুট হিসাবে নেয় এবং একটি চিত্রকে আউটপুট দেয়
(আমি জানি না কেন লোকেরা মন্তব্যে বিভ্রান্ত হয়েছিল)

সুতরাং, আপনি এই img খাওয়ান

এখানে চিত্র বর্ণনা লিখুন

এই ফাংশন মধ্যে

(i=#;Image[Flatten[(T=Transpose)@Flatten[T/@{{#,v={0,0,0},v},{v,#2,v},{v,v,#3}}&@@(If[(l=Max@#)<75,v,If[74<l<135,{0,l,0},If[134<l<179,{l,0,l},{l,l,l}]]]&/@#)&/@ImageData[i,"Byte"][[#]],1]&/@Range[Last@ImageDimensions@i],1],ColorSpace->"RGB"])&


আপনি এই আউটপুট পাবেন

এখানে চিত্র বর্ণনা লিখুন


2
এটি কি হার্ডকডযুক্ত ইনপুট হিসাবে গণনা করবে না?
attinat

"ইনপুট এবং আউটপুট যে কোনও সুবিধাজনক বিন্যাসে হতে পারে, তা আসল চিত্রের ফাইল ..." না, iএকটি চিত্র।
J42161217

আমি @ মতিনাতের সাথে একমত হব, এটি হার্ডকোডিংয়ের মতো দেখাচ্ছে
জোনাথন ফ্রেচ

আমি কিছু পরিবর্তন করেছি এবং আমি আশা করি যে সবকিছু এখন পরিষ্কার হয়ে গেছে।
J42161217

1

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 157 বাইট

n=>{int i=0,j=n[0].Length;for(;;Write(z(0)+",0,0|0,"+z(1)+",0|0,0,"+z(2)+"\n|"[++i%j&1]));int z(int k)=>(((511^i/j%3%2*4064)>>n[i/j/3][i%j][k]/15)&1^1)*255;}

আউটপুটটির আরজিবি মুদ্রণ করে। আউটপুটটি নিউলাইনটি পৃথক এবং প্রান্তিক নয়। মূলত, আমি সঙ্গে একটি বিট-মাস্ক ব্যবহার করা 1হচ্ছে এবং 0বন্ধ হচ্ছে, কিন্তু তারপর আমি Arnauld এর উত্তর তাকালাম, আর সেই ব্যবহার উপলব্ধি 0এবং যেমন 1বন্ধ হিসাবে সংখ্যায় বাইট সংরক্ষণ করতে পারিনি। টিআইও লিঙ্কটিতে 4 বাই 2 পিক্সেলের নমুনা "চিত্র" রয়েছে।

এটি অনলাইন চেষ্টা করুন!


0

এপিএল + উইন, 102 বাইট

চিত্রটিতে প্রদর্শিত হওয়ার সাথে সাথে পিক্সেলের 2 ডি ম্যাট্রিক্সের 24 বিট পূর্ণসংখ্যা হিসাবে প্রম্পট করে

((⍴a)⍴,3 3⍴255*⍳3)×a←(3 1×⍴m)⍴∊⍉((1↓⍴m)/⍳↑⍴m)⊂n←(-+⌿n)⊖n←1 0↓0 75 135 180∘.≤,m←(1 3×⍴m)⍴,⍉(3⍴256)⊤,m←⎕

এটি অনলাইন চেষ্টা করুন! সৌজন্যে ডায়ালগ ক্লাসিক

রূপান্তরিত চিত্রটির 24 বিট পূর্ণসংখ্যার 2 ডি ম্যাট্রিক্স আউটপুট দেয়। বেশিরভাগ কোড ইনপুট এবং আউটপুটটির বিন্যাস পরিচালনা করছে।

উদাহরণ: নমুনা পিক্সেল দিয়ে তৈরি একটি 2 x 2 চিত্র নিন

ইনপুট:

2654895 10547300
2654895 10547300

আউটপুট :.

0     0 16581375 255 65025        0
0 65025        0   0 65025 16581375
0     0 16581375 255 65025        0
0     0 16581375 255 65025        0
0 65025        0   0 65025 16581375
0     0 16581375 255 65025        0

0

মরিচা - 281 বাইট

fn z(p:Vec<u8>,wh:[usize;2])->Vec<u8>{let mut o=vec![0;wh[0]*wh[1]*27];for m in 0..wh[0]{for n in 0..wh[1]{for i in 1..=3{for j in 0..3{o[m*9+n*wh[0]*27+j*wh[0]*9+i*2]=match p[18+m*3+n*wh[0]*3+3-i]{75..=134=>[0,1,0],135..=179=>[1,0,1],180..=255=>[1,1,1],_=>[0,0,0],}[j]*255;}}}}o}

এই লাইনটি এমন একটি ফাংশন যা চ্যালেঞ্জটি পূরণ করে, তবে এটির ইনপুটটি আসলে টিজিএ ফাইল ফর্ম্যাটে ডেটা যা পলবৌরক.নেমে বর্ণিত হিসাবে চিত্রের পূর্ব-পার্সড প্রস্থ এবং উচ্চতা সহ পিক্সেলগুলিতে রয়েছে। এটি আউটপুটটির জন্য পিক্সেল ডেটা, বাইট হিসাবে, কোনও ভেক্টরে ইনপুট পিক্সেল ডেটার আকারের 9 গুণ ফেরত দেয়।

use std::fs::File;use std::io::{Read,Write};fn main(){let mut p=vec![];let mut o=vec![0u8;18];File::open("i.tga").unwrap().read_to_end(&mut p).unwrap();let mut wh=[0;2];let h=|x|p[x] as usize;let g=|x|(3*x/256) as u8;for i in 0..2{wh[i]=h(12+i*2)+256*h(13+i*2);o[12+i*2]=g(wh[i]*256);o[13+i*2]=g(wh[i]);}let mut f=File::create("o.tga").unwrap();o[2]=2;o[16]=24;o.extend(z(p,wh));f.write(&o).unwrap();}

এই দ্বিতীয় লাইনটি একটি প্রধান () ফাংশন যা কোনও বাহ্যিক লাইব্রেরি ব্যবহার না করে প্রথম লাইন থেকে ফাংশন z কল করে, i.tga নামের একটি ইনপুট ফাইলকে o.tga নামে একটি আউটপুট ফাইল রূপান্তর করতে পারে is এটি প্রস্থ / উচ্চতার পার্সিং পরিচালনা করে, আউটপুট ফাইলের জন্য শিরোনাম তৈরি করে এবং ফাইল রিডিং + রাইটিং পরিচালনা করে। যদি চ্যালেঞ্জটিতে ফাইলের I / O প্রয়োজন হয় তবে এটি মোট 683 বাইট যুক্ত করবে testing এটি পরীক্ষার জন্য দরকারী।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.