Bir görüntünün integralini alarak hızlı bir şekilde alt bölgeleri üzerinden toplamlarını hesaplayabiliriz. Bunu yaparken genel olarak Viola-Jones algoritması kullanılır.
İntegral Görüntü Toplama Nasıl Çalışır?
Bütünleşik bir resimdeki her piksel yukarıdaki ve solundaki piksellerin toplamıdır.
Bir görüntünün alt bölümünün toplamını hesaplamak için, integral görüntüsünün karşılık gelen bölgesini kullanabilirsiniz. Örneğin, aşağıdaki giriş görüntüsünde, gölgeli bölgenin toplamı, karşılık gelen integral görüntüsündeki dikdörtgen bölgenin dört referans değerini kullanarak basit bir hesap haline gelir. Hesaplama 46 - 22 - 20 + 10 = 14 olur. Hesaplama, gölgeli bölgenin üstündeki ve solundaki bölgeleri çıkarır. Örtüşme alanı, çift çıkarmayı telafi etmek için geri eklenir.
Bu şekilde, filtre boyutundan bağımsız olarak, dikdörtgen bölgelerdeki toplamları hızla hesaplayabilirsiniz.
UYGULAMA:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public partial class MainForm : Form | |
{ | |
private Image<Bgr, byte> m_originalImage; | |
private static void fillSizeInfo(Label label, Mat m) | |
{ | |
label.Text = m.Height + "x" + m.Width; | |
} | |
public MainForm() | |
{ | |
InitializeComponent(); | |
} | |
private void m_buttonOK_Click(object sender, EventArgs e) | |
{ | |
try | |
{ | |
OpenFileDialog dlg = new OpenFileDialog(); | |
if (dlg.ShowDialog() != DialogResult.OK) | |
return; | |
m_originalImage = new Image<Bgr, byte>(dlg.FileName); | |
m_pictureBoxOriginalImage.Image = m_originalImage.ToBitmap(); | |
fillSizeInfo(m_labelOriginalSize, m_originalImage.Mat); | |
} | |
catch (Exception ex) { | |
MessageBox.Show(ex.GetType().Name + " " + ex.Message); | |
} | |
} | |
private void m_buttonIntegral_Click(object sender, EventArgs e) | |
{ | |
try | |
{ | |
if (m_originalImage == null) | |
{ | |
MessageBox.Show("You should choose an image"); | |
return; | |
} | |
var img = m_originalImage.Integral(); | |
m_pictureBoxOriginalImage.Image = img.ToBitmap(); | |
} | |
catch (Exception ex) | |
{ | |
MessageBox.Show(ex.GetType().Name + " " + ex.Message); | |
} | |
} | |
} |