이미지 무딘


15

소개

날카로운 모서리는 솔직히 말해서 매우 위험하므로 PNG를 입력으로 사용하면 아래 설명 된 방법을 사용하여 이미지를 흐리게 처리하고 손상된 날카로운 모서리를 둔화시킵니다.

방법

각 픽셀의 RGB 값을 얻으려면 다음 세 가지 방정식을 사용하십시오.

아르 자형=1.5×=1아르 자형2
=1.5×=12
=1.5×=12

여기서 =1아르 자형2 는 인접한 각 픽셀의 빨강 값의 합을 제곱 한 것입니다. 값 인접 화소 (예를 들면, 코너의 화소가있을 것이다의 개수 화상의 중심 주위의 화소가있을 것이다 반면, 3의 값을 (8)의 값).

인접한 픽셀은 모든 방향 (왼쪽, 오른쪽, 위, 아래 및 모든 대각선)에서 원본 픽셀에서 1 픽셀 떨어진 픽셀입니다.

예를 들어 다음 3 x 1 이미지에서

중간 픽셀의 흐릿한 RGB 값은 다음과 같습니다.

아르 자형=1.5(02+02)2=0
=1.5(02+2552)2=220.836=221
=1.5(2552+02)2=220.836=221

소수점 출력은 가장 가까운 단위로 반올림됩니다. 당신은 단순히 결과를 바닥해서는 안됩니다.

따라서 가운데 ​​픽셀은 색상 (0, 221, 221)이거나 다음과 같습니다.

이미지 결과 :

이미지의 모든 픽셀에 대해이 과정을 반복해야합니다. (수정 된 픽셀이 아닌 원본 픽셀로이 작업을 수행합니다. 기본적으로 원본 이미지를 덮어 쓰지 않아야하며 흐리게 처리 된 새 이미지와 완전히 분리해야합니다 ).

255보다 큰 값을 계산하는 경우 해당 값이 255라고 가정하십시오 (즉, 374는 255로 설정 됨).

결과 출력은 별도의 PNG 이미지 여야합니다 (원하는 이름을 지정할 수 있음).

슈퍼 마리오

기발한:

흐리게 :

서양 장기판

기발한:

흐리게 :

기발한

흐리게

더 이상 선명하지 않습니다

미국 고딕

기발한:

흐리게 :

큰 이미지에서 흐려짐을 보려면 흐릿한 이미지에서 프로그램을 다시 실행하는 것이 가장 좋습니다.

도전

주어진 PNG 이미지를 흐리게 처리하는 가장 짧은 코드가 승리합니다.

이미지 처리 라이브러리 (예 : PIL)를 사용할 수 있지만 내장 흐림 기능을 사용해서는 안됩니다 (Mathematica,보고 있습니다).

노트

@orlp는 다음과 같이 말합니다.

기록적으로 (내 지식으로는) 이것은 표준 흐림 방법이 아닙니다. 이 도전은 교육 자료가 아닙니다.


나는 그 스케일링에 정말로 만족하지 않습니다. n분모에 나타나야합니다.
Karl Napf

"Blunt"를 보았을 때 매우 다른 점을 생각했습니다. : P.
Adnan

3
기록적으로 (내 지식으로는) 이것은 표준 흐림 방법이 아닙니다. 이 도전은 교육 자료가 아닙니다.
orlp

8 개의 흰색 픽셀 (모두 rgb (255,255,255))로 둘러싸인 흰색 픽셀이있는 경우 흐릿한 픽셀은 rgb (312,312,312)입니다. 값을 [0,255] 범위로 고정해야합니까?
kamoroso94 16:14

1
@ kamoroso94 1 : 예, 255보다 큰 수는 255라고 가정합니다. 2 : 예제 이미지는 3 x 1 이미지를 나타냅니다.
Beta Decay

답변:


5

Python, 354313 바이트

최고는 아니지만 이봐 ...

첫 번째 수준 들여 쓰기에 공백 사용, 두 번째 수준에 탭 사용, Tab + Space 및 Tab + Tab 사용

import Image as I
A=I.open(raw_input())
w,h=A.size
B=I.new('RGB',(w,h))
s=[-1,1,0]
r=range
for x in r(w):
 for y in r(h):
    P=[]
    for d in s:
     for e in s:
        try:P+=[A.load()[x+e,y+d]]
        except:0
    P.pop()
    B.load()[x,y]=tuple(min(int(.5+(1.5*sum([v*v for v in t])/len(P))**.5),255)for t in zip(*P))
B.save("b.jpg")
  • EDIT1가 : 교체 math.sqrt()()**.5베타 붕괴 덕분에
  • EDIT2가 : 사용 min클램프 (! 많이 저장) 및 0대한 passLoovjo 덕분에
  • EDIT3 : +=[]대한 .append()5 바이트를 저장
  • Edit4 : s스텐실 변수 사용

1
확실히 n**0.5보다 짧 import math;math.sqrt(n)습니까? 후자에 대한 이유가 있습니까?
Beta Decay

그렇습니다. 이유가 없습니다. 방금 잊었 어
Karl Napf

2
v if v<256 else 255단축 할 수있다min(v,255)
Loovjo

또한 대체 할 수 pass0
Loovjo

사용중인 이미지 라이브러리를 명시해야합니다. PIL / Pillow를 사용하는 경우 (그리고 사용자처럼 보이는 경우) 최상위 import 문은을 읽어야 from PIL import Image as I합니다.
Mego

0

MATLAB, 130 바이트

이미지를 입력으로 취하고 출력을로 저장합니다 b.png.

i=double(input(''));m=ones(3);m(5)=0;k=@(x)imfilter(x,m);imwrite(uint8(round((1.5*k(double(i.^2))./k(i(:,:,1)*0+1)).^.5)),'b.png')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.