مدل کانتور فعال

مدل کانتور فعال، که مدل مارها نیز نامیده می‌شود، یک چارچوب در بینایی رایانه ای است که توسط مایکل کاس، اندرو ویتکین و دمتری ترزوپولوس معرفی شده، و برای ترسیم خطوط خارجی یک شیء، از یک تصویر دو بعدی احتمالاً پر نویز تعریف شده‌است. مدل مارها در دیدگاه رایانه‌ای محبوب است و این مدل به‌طور گسترده در برنامه‌های کاربردی مانند ردیابی شی، تشخیص شکل، تقسیم‌بندی، آشکارسازی لبه و تطبیق استریو مورد استفاده قرار می‌گیرد.
مدل مار یک انرژی کمینه کننده و اسپلاین قابل اصلاح است که تحت تأثیر محدودیت‌ها و نیروهای تصویر است که آن را به سمت کانتورها و نیروهای داخلی متصل می‌کند که مقاومت در برابر تغییر شکل را دارند. مدل مارها ممکن است به عنوان یک مورد خاص از روش کلی تطبیق یک مدل ناپایدار به یک تصویر با استفاده از به حداقل رساندن انرژی درک شوند. در دو بعد، مدل شکل فعال، یک نسخه گسسته این رویکرد را نشان می‌دهد، با استفاده از مدل توزیع نقطه برای محدود کردن محدوده شکل به یک دامنه صریح از یک مجموعه آموزشی یاد می‌شود.
مارها کل مشکل پیدا کردن خطوط در تصاویر را حل نمی‌کنند، زیرا این روش نیاز به دانش قبلی شکل کانتورهای طرحی شده دارد. در عوض، آنها به مکانیزم‌های دیگر مانند تعامل با یک کاربر، تعامل با برخی از فرآیندهای درک تصویری سطح بالاتر یا اطلاعاتی از داده‌های تصویر مجاور در زمان یا فضا بستگی دارد.

انرژی محدود

بعضی از سیستم‌ها، از جمله پیاده‌سازی مارها اصلی، برای تعامل کاربر برای هدایت مارها، نه تنها در موقعیت اولیه، بلکه در شرایط انرژی آنها، امکان‌پذیر است. چنین محدودیتی انرژی  می‌تواند به‌طور تعاملی هدایت مار به سمت یا دور از ویژگی‌های خاص مورد استفاده قرار گیرد.

بی‌ثباتی عددی به دلیل فضای گسسته

انرژی در یک تصویر مداوم ممکن است عبور صفر داشته باشد که به عنوان یک پیکسل در تصویر وجود ندارد. در این مورد، یک نقطه در مار بین دو پیکسل که همسایه آن عبور صفر است، نوسان می‌کند. این نوسان را می‌توان با استفاده از درون یابی بین پیکسل به جای نزدیکترین همسایه اجتناب کرد.

پیاده‌سازی

pseudocode زیر روش مار را به صورت کلی اجرا می‌کند:
function v = snakes (I, v)  % INPUT: N by M image I, a contour v of n control points
  % OUTPUT: converged contour v of n control points

  E_image = generateImageEnergy (I);

  while not converged
    F_cont = weight.alpha * contourDerivative(v, 2);
    F_curv = weight.beta * contourDerivative(v, 4);
    F_image = interp2 (E_image, v(:,2), v(:,1));
    F_image_norm = weight.k * F_image ./ norm (F_image);
    F_con = inputForces();

    F_internal = F_cont + weight.external * F_curv;
    F_external = weight.external * (F_image + F_con);

    v = updateSnake(v, F_internal, F_external);

    checkConvergence ();
  endend
جایی که generateImageEnergy (I) را می‌توان به عنوان نوشته کرد
function E_image = generateImageEnergy (I)  [C, Cx, Cy, Cxx, Cxy, Cyy] = generateGradients (I);

  E_line = I;
  E_edge = -(Cx.^2 + Cy.^2)^0.5;
  E_term = (Cyy.*Cx.^2 - 2*Cxy.*Cx.*Cy + Cxx.*Cy.^2)./((1 + Cx.^2 + Cy.^2).^(1.5));

  E_image = weight.line * E_line + weight.edge * E_edge + weight.term * E_term;end

برخی از انواع مارها

روش پیش فرض مارها دارای محدودیت‌های مختلف و موارد گوشه ای است که همگرایی عملکرد ضعیفی دارد. چندین جایگزین وجود دارد که مسائل مربوط به روش پیش فرض را در بر می‌گیرد، هرچند با مشارکت خودشان. چند نفر در اینجا لیست شده‌اند.

ارتباط با کاهش گراف‌ها

برش گراف یا حداکثر جریان / دقیقه برش یک روش عمومی برای به حداقل رساندن یک شکل خاص انرژی به نام میدان مغناطیسی مارکوف (MRF) است. روش تقسیم گراف نیز به تقسیم‌بندی تصویر اعمال شده‌است و گاهی اوقات از روش تعیین سطح در زمانی که مدل MRF استفاده می‌کند یا می‌تواند توسط MRF تقریب یابد، بهتر عمل می‌کند.