Применить банк фильтров параллельно

Я использую платформу Accord.NET.

Предположим, у меня есть три фильтра Габора, и мне нужно применить их к изображению параллельно.

Является ли следующее правильным понятием параллельного банка фильтров?

Bitmap bmp = (Bitmap)Bitmap.FromFile(@"C:\Lenna.png");

GaborFilter gf1 = new GaborFilter();
gf1.GaborKernelSize = 3;
gf1.Lambda = 4.0;
gf1.Theta = 45.0;////////////////////Theta is 45
gf1.Psi = 1.0;
gf1.Sigma = 2.0;
gf1.Gamma = 0.3;

GaborFilter gf2 = new GaborFilter();
gf2.GaborKernelSize = 3;
gf2.Lambda = 4.0;
gf2.Theta = 90.0;/////////////////////Theta is 90
gf2.Psi = 1.0;
gf2.Sigma = 2.0;
gf2.Gamma = 0.3;

GaborFilter gf3 = new GaborFilter();
gf3.GaborKernelSize = 3;
gf3.Lambda = 4.0;
gf3.Theta = 135.0;////////////////////Theta is 135
gf3.Psi = 1.0;
gf3.Sigma = 2.0;
gf3.Gamma = 0.3;

bmp = gf1.Apply(bmp);
bmp = gf2.Apply(bmp);
bmp = gf3.Apply(bmp);

MyWinForm f = new MyWinForm ();
f.PictureBox = bmp;
f.ShowDialog();

Если нет, то как я могу заставить их работать параллельно?


person user366312    schedule 10.08.2016    source источник


Ответы (1)


Банк фильтров — это просто набор фильтров, каждый из которых имеет разные параметры и предназначен для получения отклика для разных компонентов сигнала.

В вашем случае, фильтры Габора, параметры, которые вы меняете, — это ориентация, поэтому каждый из фильтров будет давать ответ функций на изображении с выбранной ориентацией. Для банка фильтров размером N (N разных фильтров), если мы применим его к изображению, мы получим N разных изображений, каждое из которых является результатом определенного фильтра.

В вашем коде вы применяете фильтры один за другим, если вывод первого фильтра является входом для следующего. В этом случае вы не можете фильтровать изображение параллельно.

Применение фитлера Габора — это просто свертка ядра Габора с изображением. Поэтому вместо того, чтобы применять каждый фильтр Габора к изображению отдельно, вы можете просто объединить фильтры Габора вместе и получить новый фильтр, который затем можно будет применить один раз ко всему изображению.

person Amitay Nachmani    schedule 14.08.2016
comment
Будет ли работать, если я применю банк фильтров к изображениям, чтобы получить 03 изображения, а затем объединим их, применяя операции AND? - person user366312; 14.08.2016
comment
Когда вы фильтруете изображение, вы не получаете двоичный результат, поэтому я не думаю, что вы можете выполнить операцию AND. Я не знаю, чего именно вы хотите достичь, если вы скажете мне, может быть, я мог бы помочь. - person Amitay Nachmani; 14.08.2016
comment
Я просто пытаюсь создать банк ориентированных полосовых фильтров. Исходный код Габора был просто примером. - person user366312; 14.08.2016
comment
stackoverflow .com/questions/37769350/ - person user366312; 14.08.2016
comment
Сам банк я просто набор фильтров. Если вы установите порог для каждого ответа фильтра, а затем используете операцию И, вы получите все пиксели с очень высоким откликом ориентации во всех направлениях, которые вы использовали. Если это ваша цель, да, вы можете применять их параллельно (используя поток для каждого из фильтров), а затем ограничивать результаты и использовать операцию AND. - person Amitay Nachmani; 14.08.2016
comment
Если бы вы предоставили мне пример кода, это было бы очень полезно. - person user366312; 14.08.2016
comment
Я не гей .net, поэтому не могу помочь с кодом. О том, как использовать потоки в C#, см. в msdn. microsoft.com/en-us/library/aa645740(v=vs.71).aspx. Удачи - person Amitay Nachmani; 14.08.2016