Можем ли мы сгенерировать «любимое изображение» в Mathematica - PullRequest
15 голосов
/ 12 сентября 2011

" Foveted Imaging - это метод цифровой обработки изображений, при котором разрешение изображения или количество деталей изменяется по изображению в соответствии с одной или несколькими« точками фиксации ». Точка фиксации указывает самое высокое разрешение область изображения и соответствует центру сетчатки глаза, фовеа. "

enter image description here

Я хочу использовать такое изображение для иллюстрации остроты зрения человека. На диаграмме ниже показана относительная острота левого человеческого глаза (горизонтальный разрез) в градусах от фовеа (Википедия):

enter image description here

Есть ли способ создать сфальсифицированное изображение в Mathematica, используя его возможности обработки изображений?

Ответы [ 3 ]

10 голосов
/ 13 сентября 2011

Что-то по следующим направлениям может работать для вас. Детали фильтрации должны быть адаптированы к вашим вкусам.

lena = ExampleData[{"TestImage", "Lena"}]

lena

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]

mask

Show[ImageFilter[Mean[Flatten[#]] &, lena, 20, Masking -> mask], ImageSize -> 512]

enter image description here

9 голосов
/ 13 сентября 2011

Следуя ответу Шёрда, вы можете 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]

Acuity of fovea model

Пример изображения:

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}]

Некоторые примеры:

Acuity example 1

Acuity example 2

2 голосов
/ 13 апреля 2012

WaveletMapIndexed может дать пространственно-размытое размытие, как показано в документации Mathematica (WaveletMapIndexed-> Примеры-> Приложения-> Обработка изображений) .Вот реализация foveatedBlur с использованием скомпилированной версии функции acuity из другого ответа:

Clear[foveatedBlur];
foveatedBlur[image_, d_, cx_, cy_, blindspotradius_] := 
   Module[{sx, sy}, 
      {sy, sx} = ImageDimensions@image;
      InverseWaveletTransform@WaveletMapIndexed[ImageMultiply[#, 
          Image[acuityC[d, sx, sy, -cy + sy/2, cx - sx/2, blindspotradius]]] &, 
          StationaryWaveletTransform[image, Automatic, 6], {___,  1 | 2 | 3 | 4 | 5 | 6}]]

, где скомпилированная острота равна

Clear[acuityC];
acuityC = Compile[{{distance, _Real}, {sx, _Integer}, {sy, _Integer}, {x0, _Real}, 
                   {y0, _Real}, {blindspotradius, _Real}}, 
            Table[With[{\[Theta] = ArcTan[distance, Sqrt[(x - x0)^2 + (y - y0)^2]]},  
                  (Exp[-Abs[\[Theta]]/(15 Degree)] - .05)/.95 
                  *(1. - Boole[(x - x0)^2 + (y - y0 + 0.25 sy)^2 <= blindspotradius^2])], 
                  {x, Floor[-sx/2], Floor[sx/2 - 1]}, {y, Floor[-sy/2], Floor[sy/2 - 1]}]];

РасстояниеПараметр устанавливает скорость падения остроты зрения.Точка фокусировки {cx,cy} и радиус слепой зоны говорят сами за себя.Вот пример использования Manipulate, смотрящий прямо в правый глаз Лены:

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

Manipulate[foveatedBlur[lena, d, p[[1]], p[[2]], 20], {{d, 250}, 50, 
    500}, {{p, ImageDimensions@lena/2}, Locator, Appearance -> None}]

Foveated Image Example with blind spot

Видите слепое пятно?

...