钝化图像


15

介绍

坦白说,尖锐的边缘很危险,因此,如果输入PNG,请使用以下所述的方法模糊图像,并钝化那些锐利的尖锐边缘。

方法

要获取每个像素的RGB值,请使用以下三个公式:

[R=1.5×一种=1个ñ[R一种2ñ
G=1.5×一种=1个ñG一种2ñ
=1.5×一种=1个ñ一种2ñ

其中一种=1个ñ[R一种2是每个相邻像素的红色值的平方之和。ñ的值是相邻像素的数量(例如,角像素的ñ值为3,而图像中心周围的像素的ñ值为8)。

相邻像素是在所有方向(左,右,上,下和所有对角线)上均距原始像素1个像素的像素。

例如,在以下3 x 1图像中:

中间像素的RGB模糊值将为:

[R=1.502+022=0
G=1.502+25522=220.836=221
=1.52552+022=220.836=221

十进制输出将四舍五入到最接近的单位。您不应简单地限制结果。

因此,中间像素将是颜色(0、221、221),或:

结果图像:

您应该对图像中的每个像素重复此过程。(请注意,您是使用原始像素而不是修改后的像素执行此操作的。基本上,您不应该覆盖原始图像,并且应使其与新的模糊图像完全分开)。

如果计算出的任何值都大于255,请假定其值为255(即,将374的值设置为255)。

结果输出应为单独的PNG图像(您可以随意命名)。

例子

超级马里奥

原版的:

模糊:

棋盘

原版的:

模糊:

薯片

原版的

模糊

不再那么脆了

美国哥特式

原版的:

模糊:

要在较大的图像上看到模糊,最好在模糊的图像上再次运行该程序:

挑战

使给定PNG图像模糊的最短代码获胜。

您可以使用图像处理库(例如PIL),但不能使用内置的模糊功能(Mathematica,我在找您)。

注意

就像@orlp在下面说的那样:

根据记录,(据我所知)这不是标准的模糊方法。这个挑战不是教育资源。


我对这种扩展并不满意。n应该出现在分母中。
卡尔·纳普夫

当我看到“ Blunt”时,我想到的是非常不同的东西:P。
阿德南

3
根据记录,(据我所知)这不是标准的模糊方法。这个挑战不是教育资源。
orlp

如果您有一个被8个白色像素包围的白色像素(全部为rgb(255,255,255)),则模糊像素将为rgb(312,312,312)。我们是否应该将值限制在[0,255]范围内?
kamoroso94 '16

1
@ kamoroso94 1:是,假设任何大于255的数字都是255。2:示例图像应表示为3 x 1图像。
Beta Decay

Answers:


5

Python,354313字节

不是最好的,但是嘿...

使用空格进行第一级缩进,使用Tab进行第二级缩进,然后使用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用于夹紧(节省很多!),并0pass感谢Loovjo
  • EDIT3:+=[]用于.append()保存5个字节
  • Edit4:将变量s用于模具

1
当然n**0.5import math;math.sqrt(n)?短 后者有理由吗?
Beta Decay's

是的,没有,没有理由。我忘了
卡尔·纳普夫

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')
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.