亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? icm.cpp

?? markov random field in matlab code
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "ICM.h"

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


        


ICM::ICM(int width, int height, int nLabels,EnergyFunction *eng):MRF(width,height,nLabels,eng)
{
    m_needToFreeV = 0;
    initializeAlg();
}
ICM::ICM(int nPixels, int nLabels,EnergyFunction *eng):MRF(nPixels,nLabels,eng)
{
    m_needToFreeV = 0;
    initializeAlg();
}

ICM::~ICM()
{ 
    delete[] m_answer;
    if (!m_grid_graph) delete[] m_neighbors;
    if ( m_needToFreeV ) delete[] m_V;
}


void ICM::initializeAlg()
{
    m_answer = (Label *) new Label[m_nPixels];
    if ( !m_answer ){printf("\nNot enough memory, exiting");exit(0);}

    if (!m_grid_graph)
    {
        m_neighbors = (LinkedBlockList *) new LinkedBlockList[m_nPixels];
        if (!m_neighbors) {printf("Not enough memory,exiting");exit(0);};
    }
}

void ICM::clearAnswer()
{
    memset(m_answer, 0, m_nPixels*sizeof(Label));
}

void ICM::setNeighbors(int pixel1, int pixel2, CostVal weight)
{
    assert(!m_grid_graph);
    assert(pixel1 < m_nPixels && pixel1 >= 0 && pixel2 < m_nPixels && pixel2 >= 0);


    Neighbor *temp1 = (Neighbor *) new Neighbor;
    Neighbor *temp2 = (Neighbor *) new Neighbor;

    if ( !temp1 || ! temp2 ) {printf("\nNot enough memory, exiting");exit(0);}

    temp1->weight  = weight;
    temp1->to_node = pixel2;

    temp2->weight  = weight;
    temp2->to_node = pixel1;

    m_neighbors[pixel1].addFront(temp1);
    m_neighbors[pixel2].addFront(temp2);
}


MRF::EnergyVal ICM::smoothnessEnergy()
{
    EnergyVal eng = (EnergyVal) 0;
    EnergyVal weight;
    int x,y,pix,i;

    if ( m_grid_graph )
    {
        if ( m_smoothType != FUNCTION  )
        {
            for ( y = 0; y < m_height; y++ )
                for ( x = 1; x < m_width; x++ )
                {
                    pix    = x+y*m_width;
                    weight = m_varWeights ? m_horizWeights[pix-1] :  1;
                    eng = eng + m_V(m_answer[pix],m_answer[pix-1])*weight;
                }

            for ( y = 1; y < m_height; y++ )
                for ( x = 0; x < m_width; x++ )
                {
                    pix = x+y*m_width;
                    weight = m_varWeights ? m_vertWeights[pix-m_width] :  1;
                    eng = eng + m_V(m_answer[pix],m_answer[pix-m_width])*weight;
                }
        }
        else
        {
            for ( y = 0; y < m_height; y++ )
                for ( x = 1; x < m_width; x++ )
                {
                    pix = x+y*m_width;
                    eng = eng + m_smoothFn(pix,pix-1,m_answer[pix],m_answer[pix-1]);
                }

            for ( y = 1; y < m_height; y++ )
                for ( x = 0; x < m_width; x++ )
                {
                    pix = x+y*m_width;
                    eng = eng + m_smoothFn(pix,pix-m_width,m_answer[pix],m_answer[pix-m_width]);
                }
        }
    }
    else
    {
        
        Neighbor *temp; 

        if ( m_smoothType != FUNCTION  )
        {
            for ( i = 0; i < m_nPixels; i++ )
                if ( !m_neighbors[i].isEmpty() )
                {
                    m_neighbors[i].setCursorFront();
                    while ( m_neighbors[i].hasNext() )
                    {
                        temp = (Neighbor *) m_neighbors[i].next();

                        if ( i < temp->to_node )
                            eng = eng + m_V(m_answer[i],m_answer[temp->to_node])*(temp->weight);
                    }
                }
        }
        else
        {
            for ( i = 0; i < m_nPixels; i++ )
                if ( !m_neighbors[i].isEmpty() )
                {
                    m_neighbors[i].setCursorFront();
                    while ( m_neighbors[i].hasNext() )
                    {
                        temp = (Neighbor *) m_neighbors[i].next();
                        if ( i < temp->to_node )
                            eng = eng + m_smoothFn(i,temp->to_node, m_answer[i],m_answer[temp->to_node]);
                }
            }
        }
        
    }

    return(eng);
}



MRF::EnergyVal ICM::dataEnergy()
{
    EnergyVal eng = (EnergyVal) 0;

    
    if ( m_dataType == ARRAY) 
    {
        for ( int i = 0; i < m_nPixels; i++ )
            eng = eng + m_D(i,m_answer[i]);
    }
    else
    {
        for ( int i = 0; i < m_nPixels; i++ )
            eng = eng + m_dataFn(i,m_answer[i]);
    }
    return(eng);

}


void ICM::setData(DataCostFn dcost)
{
    m_dataFn = dcost;
}

void ICM::setData(CostVal* data)
{
    m_D = data;
}


void ICM::setSmoothness(SmoothCostGeneralFn cost)
{
    m_smoothFn = cost;
}
void ICM::setSmoothness(CostVal* V)
{
    m_V = V;
}


void ICM::setSmoothness(int smoothExp,CostVal smoothMax, CostVal lambda)
{
    int i, j;
    CostVal cost;


    m_needToFreeV = 1;

    m_V = (CostVal *) new CostVal[m_nLabels*m_nLabels*sizeof(CostVal)];
    if (!m_V) { fprintf(stderr, "Not enough memory!\n"); exit(1); }


    for (i=0; i<m_nLabels; i++)
        for (j=i; j<m_nLabels; j++)
        {
            cost = (CostVal) ((smoothExp == 1) ? j - i : (j - i)*(j - i));
            if (cost > smoothMax) cost = smoothMax;
            m_V[i*m_nLabels + j] = m_V[j*m_nLabels + i] = cost*lambda;
        }

}


void ICM::setCues(CostVal* hCue, CostVal* vCue)
{
    m_horizWeights = hCue;
    m_vertWeights  = vCue;
}


void ICM::optimizeAlg(int nIterations)
{
    int x, y, i, j, n;
    Label* l;
    CostVal* dataPtr;
    CostVal *D = (CostVal *) new CostVal[m_nLabels];
    if ( !D ) {printf("\nNot enough memory, exiting");exit(0);}

    if ( !m_grid_graph) {printf("\nICM is not implemented for nongrids yet!");exit(1);}

    for ( ; nIterations > 0; nIterations --)
    {
        n = 0;
        l = m_answer;
        dataPtr = m_D;

        for (y=0; y<m_height; y++)
        for (x=0; x<m_width; x++, l++, dataPtr+=m_nLabels, n++)
        {
            // set array D
            if (m_dataType == FUNCTION)
            {
                for (i=0; i<m_nLabels; i++)
                {
                    D[i] = m_dataFn(x+y*m_width, i);
                }
            }
            else memcpy(D, dataPtr, m_nLabels*sizeof(CostVal));
            

            // add smoothness costs
            if (m_smoothType == FUNCTION)
            {
                if (x > 0)
                {
                    j = *(l-1);
                    for (i=0; i<m_nLabels; i++) D[i] += m_smoothFn(x+y*m_width-1, x+y*m_width, j, i);
                }
                if (y > 0)
                {
                    j = *(l-m_width);
                    for (i=0; i<m_nLabels; i++) D[i] += m_smoothFn(x+y*m_width-m_width,x+y*m_width , j, i);
                }
                if (x < m_width-1)
                {
                    j = *(l+1);
                    for (i=0; i<m_nLabels; i++) D[i] += m_smoothFn(x+y*m_width+1, x+y*m_width, i, j);
                }
                if (y < m_height-1)
                {
                    j = *(l+m_width);
                    for (i=0; i<m_nLabels; i++) D[i] += m_smoothFn(x+y*m_width+m_width, x+y*m_width, i, j);
                }
            }
            else
            {
                if (x > 0)
                {
                    j = *(l-1);
                    CostVal lambda = (m_varWeights) ? m_horizWeights[n-1] : 1;
                    for (i=0; i<m_nLabels; i++) D[i] += lambda * m_V[j*m_nLabels + i];
                }
                if (y > 0)
                {
                    j = *(l-m_width);
                    CostVal lambda = (m_varWeights) ? m_vertWeights[n-m_width] : 1;
                    for (i=0; i<m_nLabels; i++) D[i] += lambda * m_V[j*m_nLabels + i];
                }
                if (x < m_width-1)
                {
                    j = *(l+1);
                    CostVal lambda = (m_varWeights) ? m_horizWeights[n] : 1;
                    for (i=0; i<m_nLabels; i++) D[i] += lambda * m_V[j*m_nLabels + i];
                }
                if (y < m_height-1)
                {
                    j = *(l+m_width);
                    CostVal lambda = (m_varWeights) ? m_vertWeights[n] : 1;
                    for (i=0; i<m_nLabels; i++) D[i] += lambda * m_V[j*m_nLabels + i];
                }
            }

            // compute minimum of D, set new label for (x,y)
            CostVal D_min = D[0];
            *l = 0;
            for (i=1; i<m_nLabels; i++)
            {
                if (D_min > D[i])
                {
                    D_min = D[i];
                    *l = i;
                }
            }
        }
    }

    delete[] D;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久久久| 亚洲免费观看高清在线观看| 亚洲日本在线a| 天天色天天爱天天射综合| 国产91丝袜在线18| 欧美电影影音先锋| 亚洲综合激情网| 高清国产一区二区| 欧美一区欧美二区| 亚洲精品自拍动漫在线| 国产在线精品一区在线观看麻豆| 在线观看欧美日本| 亚洲欧洲一区二区在线播放| 激情综合色播五月| 91精品国产免费| 亚洲第一福利一区| 91啪亚洲精品| 国产精品久久久久久福利一牛影视| 美女视频黄 久久| 欧美日韩国产a| 亚洲成人中文在线| 日本精品视频一区二区三区| 国产精品久99| 丁香亚洲综合激情啪啪综合| 欧美精品一区二区蜜臀亚洲| 蜜臀av一区二区在线观看| 欧美亚洲国产一卡| 亚洲一区二区精品视频| 欧美一级片在线| 中文字幕在线一区| 国内精品伊人久久久久av影院 | 日韩**一区毛片| 欧美性感一区二区三区| 亚洲激情在线激情| 一本色道久久综合亚洲91| 中文字幕不卡的av| 国产激情视频一区二区在线观看| 日韩欧美国产综合在线一区二区三区 | 免费看日韩精品| 日韩欧美中文字幕公布| 久久精品国产免费| 精品福利二区三区| 国产福利一区二区三区| 国产欧美日本一区视频| 成人精品电影在线观看| 亚洲天天做日日做天天谢日日欢| 成人中文字幕在线| 中文字幕综合网| 欧美亚洲综合久久| 日韩精品欧美成人高清一区二区| 欧美一卡在线观看| 国内一区二区视频| 中文字幕一区在线观看| 在线观看一区二区视频| 日本三级韩国三级欧美三级| 欧美不卡视频一区| jiyouzz国产精品久久| 亚洲激情图片小说视频| 91精品国产综合久久福利| 久久 天天综合| 国产精品久久毛片av大全日韩| 91日韩精品一区| 亚洲成av人片在www色猫咪| 欧美日韩在线三级| 精品无人码麻豆乱码1区2区| 欧美日韩激情一区二区三区| 在线不卡一区二区| 中文字幕一区二区三| 国产欧美日韩另类视频免费观看| 久久久www成人免费无遮挡大片| 国产综合久久久久久久久久久久 | 在线免费观看一区| 亚洲电影一区二区| 久久er精品视频| 欧美亚洲另类激情小说| 日本一区二区综合亚洲| 五月开心婷婷久久| 精品视频123区在线观看| 国产伦精品一区二区三区视频青涩 | 91蜜桃免费观看视频| 婷婷综合久久一区二区三区| 久久网站最新地址| 欧美日韩免费在线视频| 高清成人免费视频| 青草av.久久免费一区| 专区另类欧美日韩| 久久免费视频一区| 8x8x8国产精品| 在线看国产一区| 成人午夜视频免费看| 免费xxxx性欧美18vr| 亚洲国产日韩a在线播放性色| 国产欧美一区二区精品性| 欧美一区二区视频在线观看| 色综合久久99| 99视频精品全部免费在线| 成人毛片视频在线观看| 男人的天堂亚洲一区| 亚洲国产精品视频| 亚洲欧美日韩久久| 亚洲国产成人在线| 久久久久久亚洲综合| 日韩精品一区二区三区视频| 欧美精品777| 欧美专区亚洲专区| 色综合久久综合| 97久久精品人人做人人爽50路| 国产成人免费视频网站高清观看视频 | 99久久精品情趣| 国产精品一区二区久久不卡| 久久99国内精品| 乱一区二区av| 韩国毛片一区二区三区| 精品亚洲免费视频| 国产米奇在线777精品观看| 国产一区日韩二区欧美三区| 精品一区二区三区在线观看| 免费看欧美女人艹b| 久久精品国产一区二区三| 久久国产免费看| 国产一区二区三区免费观看| 国产电影一区在线| 成人美女视频在线看| 91蜜桃网址入口| 欧美日韩色一区| 欧美一级黄色片| 精品久久久久久久久久久久久久久久久 | 日韩成人免费电影| 美国三级日本三级久久99| 麻豆传媒一区二区三区| 国产一区欧美二区| 成人avav影音| 欧美三级中文字| 日韩美一区二区三区| 国产亚洲精品bt天堂精选| 国产精品你懂的在线欣赏| 一区二区三区欧美日| 日本欧美在线看| 大尺度一区二区| 在线观看不卡一区| 欧美mv日韩mv国产| 久久久国产精品麻豆| 26uuu另类欧美亚洲曰本| 欧美极品xxx| 午夜视黄欧洲亚洲| 国产美女视频一区| 91国模大尺度私拍在线视频| 欧美精品1区2区| 国产精品入口麻豆原神| 亚洲成人第一页| 国产91清纯白嫩初高中在线观看| 91在线精品一区二区三区| 欧美一区二区三区四区在线观看| 久久品道一品道久久精品| 亚洲一区二区三区中文字幕在线| 奇米亚洲午夜久久精品| 99精品久久久久久| 日韩欧美一二三区| 亚洲欧美日韩电影| 激情文学综合插| 欧美性猛交xxxx乱大交退制版 | 日韩av一区二区在线影视| 国产激情一区二区三区四区 | 欧美视频你懂的| 久久精品视频免费观看| 亚洲成人免费影院| 成人av高清在线| 精品国产免费人成电影在线观看四季 | 成人激情黄色小说| 欧美成人精品二区三区99精品| 亚洲三级理论片| 国产一区二区三区免费看| 欧美美女一区二区三区| 中文字幕一区二区在线播放| 精品亚洲国内自在自线福利| 精品婷婷伊人一区三区三| 欧美国产精品一区二区三区| 久久激情五月婷婷| 欧美日韩国产精选| 亚洲精品欧美激情| 丁香六月综合激情| 2021国产精品久久精品| 日韩在线一区二区| 欧美艳星brazzers| 亚洲激情成人在线| 91日韩一区二区三区| 中文字幕精品一区二区三区精品| 久久精品免费看| 欧美一区二区三区免费大片| 亚洲人成小说网站色在线| 狠狠色狠狠色合久久伊人| 久久精品一区四区| 国产揄拍国内精品对白| 日韩欧美中文字幕公布| 日韩和欧美一区二区三区| 欧美男人的天堂一二区| 午夜精品视频一区| 欧美日韩在线播放一区| 亚洲一区二区在线免费看| 91福利在线免费观看|