• 大小: 95KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: C/C++
  • 标签: MRF  分割  

资源简介

VC++实现马尔科夫随机场的图像分割算法。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include “BP-S.h“

#define private public
#include “typeTruncatedQuadratic2D.h“
#undef private


#define m_D(pixl)  m_D[(pix)*m_nLabels+(l)]
#define m_V(l1l2)  m_V[(l1)*m_nLabels+(l2)]


#define MIN(ab)  (((a) < (b)) ? (a) : (b))
#define MAX(ab)  (((a) > (b)) ? (a) : (b))
#define TRUNCATE_MIN(ab) { if ((a) > (b)) (a) = (b); }
#define TRUNCATE_MAX(ab) { if ((a) < (b)) (a) = (b); }
#define TRUNCATE TRUNCATE_MIN

/////////////////////////////////////////////////////////////////////////////
//                  Operations on vectors (arrays of size K)               //
/////////////////////////////////////////////////////////////////////////////

inline void CopyVector(BPS::REAL* to MRF::CostVal* from int K)
{
    BPS::REAL* to_finish = to + K;
    do
{
    *to ++ = *from ++;
} while (to < to_finish);
}

inline void AddVector(BPS::REAL* to BPS::REAL* from int K)
{
    BPS::REAL* to_finish = to + K;
    do
{
    *to ++ += *from ++;
} while (to < to_finish);
}

inline BPS::REAL SubtractMin(BPS::REAL *D int K)
{
    int k;
    BPS::REAL delta;

    delta = D[0];
    for (k=1; k    for (k=0; k
    return delta;
}

// Functions UpdateMessageTYPE (see the paper for details):
//
// - Set Di[ki] := gamma*Di_hat[ki] - M[ki]
// - Set M[kj] := min_{ki} (Di[ki] + V[kikj])
// - Normalize message: 
//        delta := min_{kj} M[kj]
//        M[kj] := M[kj] - delta
//        return delta
//
// If dir = 1 then the meaning of i and j is swapped.

///////////////////////////////////////////
//                  L1                   //
///////////////////////////////////////////

inline BPS::REAL UpdateMessageL1(BPS::REAL* M BPS::REAL* Di_hat int K BPS::REAL gamma MRF::CostVal lambda MRF::CostVal smoothMax)
{
    int k;
    BPS::REAL delta;

    delta = M[0] = gamma*Di_hat[0] - M[0];
    for (k=1; k {
    M[k] = gamma*Di_hat[k] - M[k];
    TRUNCATE(delta M[k]);
    TRUNCATE(M[k] M[k-1] + lambda);
}

    M[--k] -= delta;
    TRUNCATE(M[k] lambda*smoothMax);
    for (k--; k>=0; k--)
{
    M[k] -= delta;
    TRUNCATE(M[k] M[k+1] + lambda);
    TRUNCATE(M[k] lambda*smoothMax);
}

    return delta;
}

////////////////////////////////////////
//               L2                   //
////////////////////////////////////////

inline BPS::REAL UpdateMessageL2(BPS::REAL* M BPS::REAL* Di_hat int K BPS::REAL gamma MRF::CostVal lambda MRF::CostVal smoothMax void *buf)
{
    BPS::REAL* Di = (BPS::REAL*) buf;
    int* parabolas = (int*) ((char*)buf + K*sizeof(BPS::REAL));
    int* intersections = parabolas + K;
    TypeTruncatedQuadratic2D::REAL* Di_tmp = (TypeTruncatedQuadratic2D::REAL*) (intersections + K + 1);
    TypeTruncatedQuadratic2D::REAL* M_tmp = Di_tmp + K;
    TypeTruncatedQuadratic2D::Edge* tmp = NULL;

    int k;
    BPS::REAL delta;

    assert(lambda >= 0);

    Di[0] = 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       8878  2006-11-14 22:27  MRF2.1\block.h

     文件      26050  2006-11-14 22:27  MRF2.1\BP-S.cpp

     文件       2390  2006-11-14 22:27  MRF2.1\BP-S.h

     文件      11663  2007-09-15 22:16  MRF2.1\energy.h

     文件       9782  2007-10-22 15:45  MRF2.1\example.cpp

     文件       4069  2009-09-06 21:39  MRF2.1\example.dsp

     文件        539  2009-09-06 21:39  MRF2.1\example.dsw

     文件      58368  2009-09-06 21:39  MRF2.1\example.ncb

     文件      50688  2009-09-06 21:39  MRF2.1\example.opt

     文件        991  2009-09-06 13:37  MRF2.1\example.plg

     文件      45421  2007-03-18 18:39  MRF2.1\GCoptimization.cpp

     文件      13974  2007-03-18 18:53  MRF2.1\GCoptimization.h

     文件      12192  2006-11-14 22:27  MRF2.1\graph.cpp

     文件       9632  2006-11-14 22:27  MRF2.1\graph.h

     文件       8668  2006-11-14 22:27  MRF2.1\ICM.cpp

     文件       1490  2006-11-14 22:27  MRF2.1\ICM.h

     文件       1425  2006-11-14 22:27  MRF2.1\linkedBlockList.cpp

     文件       1786  2006-11-14 22:27  MRF2.1\linkedBlockList.h

     文件       1183  2007-10-22 15:24  MRF2.1\Makefile

     文件      27436  2006-11-14 22:27  MRF2.1\maxflow.cpp

     文件       7897  2006-11-27 10:14  MRF2.1\MaxProdBP.cpp

     文件       2351  2006-11-14 22:27  MRF2.1\MaxProdBP.h

     文件       3126  2006-11-14 22:27  MRF2.1\mrf.cpp

     文件      12201  2006-11-27 10:15  MRF2.1\mrf.h

     文件      14065  2007-10-22 15:26  MRF2.1\README.txt

     文件      17968  2006-11-27 10:14  MRF2.1\regions-maxprod.cpp

     文件       1577  2006-11-14 22:27  MRF2.1\regions-new.h

     文件      26591  2006-11-14 22:27  MRF2.1\TRW-S.cpp

     文件       2756  2006-11-14 22:27  MRF2.1\TRW-S.h

     文件        896  2007-03-19 23:22  MRF2.1\typeTruncatedQuadratic2D.h

............此处省略5个文件信息

评论

共有 条评论