我们可以在Mathematica中生成"foveated Image"吗?

500*_*500 15 wolfram-mathematica image image-processing

" Foveated成像是一种数字图像处理技术,其中图像分辨率或细节数量根据一个或多个"固定点"在图像上变化.固定点表示图像的最高分辨率区域并对应于中心眼睛的视网膜,中央凹."

在此输入图像描述

我想使用这样的图像来说明人类的视力,波纹管图显示左眼的相对敏锐度(水平部分),以度为中心凹(维基百科):

在此输入图像描述

有没有办法在Mathematica中使用其图像处理功能创建一个foveated图像?

Sjo*_*ies 10

以下几行可能对您有用.过滤细节应根据您​​的喜好进行调整.

lena = ExampleData[{"TestImage", "Lena"}]
Run Code Online (Sandbox Code Playgroud)

莉娜

ImageDimensions[lena]

==> {512, 512}

mask = DensityPlot[-Exp[-(x^2 + y^2)/5], {x, -4, 4}, {y, -4, 4}, 
                    Axes -> None, Frame -> None, Method -> {"ShrinkWrap" -> True}, 
                    ColorFunction -> GrayLevel, ImageSize -> 512]
Run Code Online (Sandbox Code Playgroud)

面具

Show[ImageFilter[Mean[Flatten[#]] &, lena, 20, Masking -> mask], ImageSize -> 512]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


JxB*_*JxB 9

继Sjoerd的回答之后,您可以Fold[]进行如下半径相关的模糊.

敏锐度模型(非常粗糙的模型):

Clear[acuity];
acuity[distance_, x_, y_, blindspotradius_] := 
    With[{\[Theta] = ArcTan[distance, Sqrt[x^2 + y^2]]}, 
       Clip[(Chop@Exp[-Abs[\[Theta]]/(15. Degree)] - .05)/.95, 
            {0,1}] (1. - Boole[(x + 100.)^2 + y^2 <= blindspotradius^2])]

Plot3D[acuity[250., x, y, 25], {x, -256, 256}, {y, -256, 256}, 
       PlotRange -> All, PlotPoints -> 40, ExclusionsStyle -> Automatic]
Run Code Online (Sandbox Code Playgroud)

中心凹模型的中心

示例图片:

size = 100;
lena = ImageResize[ExampleData[{"TestImage", "Lena"}], size];


Manipulate[
 ImageResize[
   Fold[Function[{ima, r}, 
   ImageFilter[(Mean[Flatten[#]] &), ima, 
      7*(1 - acuity[size*5, r, 0, 0]), 
      Masking -> Graphics[Disk[p/2, r], 
                    PlotRange -> {{0, size}, {0, size}}]
   ]], 
   lena, Range[10, size, 5]], 
 200], 
{{p, {size, size}}, Locator}]
Run Code Online (Sandbox Code Playgroud)

一些例子:

Acuity示例1

Acuity示例2