بخش بندی تصویر با EXPECTATION MAXIMIZATION - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۱۱۶ نفر آنلاین
۲ عضو و ۱۱۴ مهمان در سایت حاضرند

بخش بندی تصویر با EXPECTATION MAXIMIZATION

0 امتیاز
14 بازدید

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

cv::Mat img("d:/sample1.bmp");
EM em( 2);
em.train( img);

 

سوال شده آبان 11  بوسیله ی ابید (امتیاز 263)   1 4 29

1 پاسخ

0 امتیاز
ابتدا تصویر خود را به vector of vec3b تبدیل کنید(تبدیل 2 بعدی به یک بعدی). سپس از em استفاده کنید و نهایت vector را به تصویر تبدیل کنید.
 


/**
* Create a sample vector out of RGB image
*/
Mat asSamplesVectors( Mat& img ) {
    Mat float_img;
    img.convertTo( float_img, CV_32F );
 
    Mat samples( img.rows * img.cols, 3, CV_32FC1 );
 
    /* Flatten  */
    int index = 0;
    for( int y = 0; y < img.rows; y++ ) {
        Vec3f * row = float_img.ptr(y);
        for( int x = 0; x < img.cols; x++ )
            samples.at<Vec3f>(index++, 0) = row[x];
        }
        return samples;
    }
 
/**
Perform segmentation (clustering) using EM algorithm
**/
vector EMSegmentation( Mat& image, int no_of_clusters = 2 ){
    Mat samples = asSamplesVectors( image );
 
    cout << "Starting EM training" << endl;
    EM em( no_of_clusters );
    em.train( samples );
    cout << "Finished training EM" << endl;
 
    vector<Mat> segmented;
    for( int i = 0; i < no_of_clusters; i++ )
        segmented.push_back( Mat::zeros( image.rows, image.cols, CV_8UC3 ) );
 
    int index = 0;
    for( int y = 0; y < image.rows; y++ ) {
        for( int x = 0; x < image.cols; x++ ) {
            int result = em.predict( samples.row(index++) )[1];
            segmented[result].at<Point3i>(y, x, 0) = image.at<Point3i>(y, x, 0);
        }
    }
 
    return segmented;
}

 

 

 

 

 

 

 

 

 

پاسخ داده شده آبان 11 بوسیله ی مصطفی ساتکی (امتیاز 16,777)   17 25 66
...