Quixels-양자 픽셀


35

소개

quixel은 양자 픽셀입니다. 기존 픽셀과 유사하게 3 개의 정수 값 (빨간색, 녹색, 파란색)으로 표시됩니다. 그러나, 퀵셀은 조합 대신이 3 가지 상태의 슈퍼 위치에 있습니다. 이 슈퍼 위치는 quixel이 관찰 될 때까지만 지속되며,이 시점에서 3 개의 클래식 픽셀 중 하나로 축소됩니다. RGB(255,0,0), RGB(0,255,0)RGB(0,0,255).

사양

  • 대표
    • quixel 각은 0과 255 사이의 정수 (3)의 배열로 표현되는 r, g그리고 b각각.
  • 슈퍼 포지션
    • 각 quixel에 의해 표현 된 레드, 블루와 그린 상태 사이의 최고 위치에있는 R, G그리고 B각각.
  • 관측
    • 각 quixel이 관찰되면 세 가지 상태 중 하나로 붕괴됩니다. 각각 고전 상태 확률은 R = (r + 1) / (r + g + b +3), G = (g + 1) / (r + g + b + 3)B = (b + 1) / (r + g + b + 3). 이런 식으로 각 클래식 상태는 항상 0이 아닌 확률로 표시됩니다.
  • 입력
    • 기능이나 프로그램은 퀵셀 이미지를 가져와야합니다. 이 방법은 유연합니다. 다차원 배열을 사용하는 파일 이름 등을 모두 사용할 수 있습니다.
  • 산출
    • 함수 또는 프로그램은 클래식 픽셀의 이미지를 생성해야합니다. 이 생성 된 이미지의 데이터 구조도 유연합니다. 모든 픽셀은 세 가지 중 하나가 될 것을 참고 RGB(255,0,0), RGB(0,255,0)RGB(0,0,255)
    • 결과는 결정적 이어서는 안된다 . 이들은 양자 픽셀입니다! 동일한 입력으로 인해 다른 출력이 발생합니다.
    • 언어에서 난수를 생성하는 방법이없는 경우 난수 바이트를 입력으로 사용할 수 있습니다
  • 채점
    • 이것은 이므로 가장 적은 바이트가 이깁니다.

이미지

모나리자 에 의해 레오나르도 다 빈치 모나리자

별이 빛나는 밤 에 의해 빈센트 반 고흐 여기에 이미지 설명을 입력하십시오

메모리의 지속성 에 의해 살바도르 달리 여기에 이미지 설명을 입력하십시오

테디 루즈 벨트 VS. 빅풋 에 의해 SharpWriter 여기에 이미지 설명을 입력하십시오


이미지 파일 이름 / URL이 입력 인수 일 수 있습니까?
Luis Mendo

2
모나리자의 JPEG 이미지는 출력 이미지에서 16x16의 뛰어난 시각적 인공물을 발생시킵니다.
wizzwizz4

1
@ wizzwizz4 사실 그렇지 않습니다. 인공물이있는 축소 된 미리보기입니다. 이미지를 클릭하면 전체 크기로 볼 수 있습니다. 나는 그것이 효과를주는 이미지의 특정 너비라고 생각합니다.
Adám

2
양자 공간이 RGBK이면 어디에서나 더 나은 (시각적) 결과를 얻을 K=255*3-R-G-B수 있습니다. 그리고 양자 픽셀을 4 중 하나로 만드십시오. (K를 선택하면 (0,0,0)을 표시하십시오. 명백한 방법, 3 초에서 4 초로 변경, R + G + B 등을 추가 할 때 K 추가). 이 작업을 수행 한 후 흐리게 처리하면 원본의 꽤 시끄러운 복사본이 재구성됩니다. (K는 ​​검은 색 또는 열쇠를 뜻합니다. 궁금한 경우)
Yakk

2
언어는 임의의 숫자를 생성하는 방법이 없습니다 @TLW 경우 입력으로 난수 바이트를 취할 수
NonlinearFruit

답변:


13

Dyalog APL , 23 21 19 바이트

(R, G, B) 삼중 테이블을 가져옵니다.

마일 알고리즘에서 영감을 얻음

인덱스 테이블을 {(255, 0, 0), (0, 255, 0), (0, 0, 255)}로 반환합니다. 끔찍한 낭비.

(?∘≢⊃⊢)¨(⊂⍳3)/¨⍨1+⊢

(
?∘≢랜덤 인덱스
는 각각
에서 선택

(
각각에 의해 복제 된
⍳3처음 세 지수 전체
)/¨⍨

1+⊢ 증가 된 트리플렛

TryAPL!


구 버전

0부터 시작하는 인덱스 테이블을 {(255, 0, 0), (0, 255, 0), (0, 0, 255)}로 반환

{+/(?0)≥+\(1+⍵)÷3++/⍵}¨

{... }¨ 표에있는 각 quixel에 대해 다음을 찾으십시오.

+/ 합 (즉, 진실의 수)

(?0)≥ 임의의 0 <수 <1 이상인

+\ 누적 합계

(1+⍵)÷ 증가 된 RGB 값을

3+ 세 플러스

+/⍵ 퀴셀의 합

참고 : Dyalog APL은 당신이 선택 할 수 있습니다 사이에 합동 생성기 선형 레머메르 센 트위스터 , 그리고 운영 체제의 RNG ¹ ² .

예를 들어 이미지는 다음과 같습니다.

┌──────────┬──────────┬───────────┬───────────┬─────────┐
52 241 198148 111 45197 165 1809 137 120  46 62 75 
├──────────┼──────────┼───────────┼───────────┼─────────┤
81 218 1040 0 255   0 255 0    181 202 116122 89 76
├──────────┼──────────┼───────────┼───────────┼─────────┤
181 61 34 84 7 27   233 220 24939 184 160 255 0 0  
└──────────┴──────────┴───────────┴───────────┴─────────┘

제공 할 수 있습니다

┌─┬─┬─┬─┬─┐
10221
├─┼─┼─┼─┼─┤
22112
├─┼─┼─┼─┼─┤
02120
└─┴─┴─┴─┴─┘

세 가지 "순수한"퀵셀이 각각의 색상으로 어떻게 축소되었는지 확인하십시오.

TryAPL 온라인!

무너진 모나리자


8

수학, 53 바이트

RandomChoice[255#+1->IdentityMatrix@3]&~ImageApply~#&

익명의 기능. Mathematica Image를 입력으로 받아서 Image를 출력으로 반환합니다 . 입력 이미지에는 RGB 색 공간이 있어야합니다.


어떻게 작동합니까?
GreenAsJade

2
@GreenAsJade은 <...>~ImageApply~#이미지의 모든 픽셀을 통해 함수를 적용하고, RandomChoice[255#+1->IdentityMatrix@3]3 × 3 행렬의 행을 생성하기 위해 일부 가중 RNG를 사용하여 (즉 {1, 0, 0}, {0, 1, 0}또는 {0, 0, 1}), 적색, 녹색, 또는 청색에 대응한다.
LegionMammal978

5

C #, 366243 바이트

골프를 해주신 @TheLethalCoder에게 감사드립니다!

var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{fo‌​r(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(‌​b.GetPixel(x,y)));re‌​turn b;};

기본 아이디어 :

using System;
using System.Drawing;
static Random r = new Random();

static Image f(Bitmap a) {
    for (int x = 0; x < a.Width; x++) {
        for (int y = 0; y < a.Height; y++) {
            a.SetPixel(x, y, g(a.GetPixel(x, y)));
        }
    }
    return a;
}

static Color g(Color c) {
    int a = c.R;
    int g = c.G;
    double t = a + g + c.B + 3;
    var x = (a + 1) / t;
    var y = x + (g + 1) / t;
    var d = r.NextDouble();
    return d <= x ? Color.Red : d <= y ? Color.Lime : Color.Blue;
}

예 :

모나리자

여기에 이미지 설명을 입력하십시오

별이 빛나는 밤

여기에 이미지 설명을 입력하십시오

기억의 끈기

여기에 이미지 설명을 입력하십시오

테디 루즈 벨트 VS. 큰 발

여기에 이미지 설명을 입력하십시오

다음 은 몇 가지 예제가 추가 된 업데이트 된 imgur 앨범입니다. 이는 비 결정적임을 보여줍니다.


6
Color.Lime은 순수한 녹색입니다. 나중에 참조 할 수 있도록 알려진 색상 표는 다음과 같습니다 .
우유

1
여기에 237 바이트의 골프 버전 var r=new Random();c=>{double t=c.R+c.G+c.B+3,x=(c.R+1)/t,d=r.NextDouble();return d<=x?Color.Red:d<=x+(c.G+1)/t?Color.Lime:Color.Blue;};b=>{for(int x=0,y;x<b.Width;x++)for(y=0;y<b.Height;y++)b.SetPixel(x,y,g(b.GetPixel(x,y)));return b;};이 있습니다 : 그리고 여전히 개선 될 수 있습니다
TheLethalCoder

실제로 237 바이트 여분의 바이트는 내가 생각하는 코드 주석에 추가되는 보이지 않는 문자입니다.
TheLethalCoder

4

파이썬 2 172 166 162 바이트

두 번째 및 세 번째 들여 쓰기 레벨은 각각 원시 탭과 원시 탭에 공백을 더한 값입니다. 이 연극 정말 탭 두 개의 공백으로 대체되었습니다 때문에, 심하게 마크 다운으로.

from random import*
i=input()
E=enumerate
for a,y in E(i):
 for b,x in E(y):
  t=sum(x)+3.;n=random()
  for j,u in E(x):
   n-=-~u/t
   if n<0:i[a][b]=j;break
print i

Adám의 APL answer 와 유사한 입력 / 출력 형식을 사용합니다 . 입력은 RGB 튜플의 2D 배열입니다. 출력은 2 차원 배열이며 0, 1또는 2적색, 녹색 및 청색을 나타내는. 예를 들면 다음과 같습니다.

$ echo "[[(181,61,34),(39,184,160),(255,0,0)],[(84,7,27),(123,97,5),(12,24,88)]]" | python quixel.py
[[2, 2, 0], [0, 0, 0]]

아래는 PIL을 사용하는 이전 Python 3 답변입니다.

파이썬 3 + PIL, 271 250 245 243 바이트

import random as a,PIL.Image as q
i=q.open(input())
w,h=i.size
for k in range(w*h):
 m=k//h,k%h;c=i.getpixel(m);t=sum(c)+3;n=a.random()
 for j,u in enumerate(c):
  n-=-~u/t
  if n<0:z=[0]*3;z[j]=255;i.putpixel(m,tuple(z));break
i.save('o.png')

모든 픽셀을 반복하고 quixel 기능을 적용합니다. 파일 이름을 입력으로 사용하고 출력을에 저장합니다 o.png.

결과는 다음과 같습니다.

$ echo mona-lisa.jpg | python quixel.py

모나리자, quixelized

$ echo starry-night.jpg | python quixel.py

별이 빛나는 밤, quixelized

$ echo persistence-of-memory.jpg | python quixel.py

메모리의 지속성, 빠른 처리

$ echo roosevelt-vs-bigfoot.jpg | python quixel.py

테디 루즈 벨트 및 빅풋


@Doddy 아마도 암호로 안전한 RNG가 아니라 PRNG이기 때문일 것입니다.
someonewithpc

@someonewithpc 아, 실제로, 나는 마지막 이미지가 규칙적인 격자 모양의 패턴을 가지고있는 휴대 전화에서 볼 때 그 질문을 썼다. 그러나 이제는 컴퓨터에서 볼 때이 효과 가있는 첫 번째 이미지이다.
Doddy

@Doddy 오, 그래! 휴대 전화에서 이미지를 누르면 효과가 전환됩니다. 이미지 샘플링에 관한 것 같습니다.
someonewithpc

@Doddy 첫 번째 질문을 삭제했을 수도 있습니다. 그래서 우리는 당신이 고밀도 플래그 빨간 줄무늬에 대해 묻고 있다고 생각하지 않습니다 ...
GreenAsJade

4

R, 58 바이트

mapply(function(r,g,b)rmultinom(1,1,c(r+1,g+1,b+1)),r,g,b)

입력은 세 개의 숫자에서 개최 된 벡터로 구성 r, g그리고 b각각.

우리는 확률을 1로 합산하기 위해 정규화 할 필요가 없습니다 rmultinom.

출력 형태

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    0    0    0    0    0    0    0     0
[2,]    0    0    0    1    0    0    1    1    1     0
[3,]    1    1    1    0    1    1    0    0    0     1

1각 열에 단일 항목이있는 경우 는 1"R", "G"의 화소 번째 행 및 "B"에 대한 세 번째 행의 첫 번째 행에있다.



4

J, 20 18 17 바이트

(>:({~?@#)@##\)"1

이미지는 0-255 범위의 정수로 RGB 값을 나타내는 h x w x 3 차원의 배열로 입력됩니다 . 출력은 차원 h x w 가있는 테이블입니다. 여기서 1은 rgb 값이 (255, 0, 0)입니다 )에서 2는 (0, 255, 0)이고 3은 (0, 0, 255)입니다.

설명

()"1이 동사가 각각 적용 즉, 입력에서 1 레벨의 각 어레이에 적용되는 것을 나타낸다 화소 .

>:({~?@#)@##\  Input: array [R G B]
>:             Increment each, gets [R+1, G+1, B+1]
           #\  Gets the length of each prefix of [R G B], forms [1 2 3]
          #    Make a new array with R+1 copies of 1, G+1 copies of 2,
               and B+1 copies of 3
  (     )@     Operate on that array
       #         Get the length of the array of copies, will be R+G+B+3
     ?@          Generate a random integer in the range [0, R+G+B+3)
   {~            Select the value at that index from the array of copies and return

예


1
모나리자는 다른 색 구성표를 가지고 있습니다. 제대로 작동합니까?
wizzwizz4

@ wizzwizz4 감사합니다. 이미지를 표시 할 때 rgb 픽셀을 역순으로했습니다.
마일

4

젤리 , 8 7 바이트

Jx‘Xµ€€

입력 값은 크기가 h x w x 3 인 3d 목록입니다 . 출력값은 크기가 h x w 인 2d 목록입니다. 여기서 1은 rgb 값 (255, 0, 0)을 나타내고 2는 (0, 255, 0)을 나타냅니다. 3은 (0, 0, 255)입니다.

아래 샘플 입력은 Mona Lisa 이미지의 왼쪽 상단 4 x 4 영역입니다.

온라인으로 사용해보십시오!

설명

Jx‘Xµ€€  Input: The 3d list of rgb pixels
    µ    Begin a monadic chain (Will operate on each pixel, input: [R, G, B])
J          Enumerate indices to get [1, 2, 3]
  ‘        Increment each to get [R+1, G+1, B+1]
 x         Make R+1 copies of 1, G+1 copies of 2, B+1 copies of 3
   X       Select a random value from that list of copies and return
     €€  Apply that monadic chain for each list inside each list

3

파이썬 3, 119 바이트

여기서 m각 픽셀의 형식의 목록 화소의 2 차원 어레이로서 취해진 입력된다 [r,g,b]. 각 픽셀의 위치에서 각각 0,1,2을 나타내는 것으로 돌아갑니다 (250,0,0), (0,250,0), and (0,0,250).

import random
lambda m:[map(lambda x:x.index(sum((((i+1)*[i])for i in x),[])[random.randint(0,sum(x)+2)]),i)for i in m]

나는 당신이 변수로 입력 할 수 있다고 생각하지 않습니다 (일반 IO를 지원하는 언어로 전체 프로그램을 작성할 때). input이 기능 을 사용 하거나 m매개 변수 로 사용해야한다고 생각합니다 .
NonlinearFruit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.