LBP纹理图的提取

LBP纹理通过像素点的八邻域元素和自身比较,大于自身取值为1,否则为0。将八邻域比较后的值以特殊的顺序排列,形成一个八位的二进制数,将该数作为纹理图的像素值。

程序如下:


LBP.h

#pragma once



//#pragma comment(lib, "cv.lib")
//#pragma comment(lib, "cxcore.lib")
//#pragma comment(lib, "highgui.lib")
#include "opencv/cv.h"
#include "opencv/cxcore.h"
#include "opencv/highgui.h"
#include <string>
using namespace std;


class CLBP
{
public:
CLBP(void);
public:
~CLBP(void);


private:
IplImage* m_cvImage;
IplImage* m_cvLBPImage;
IplImage* m_cvSubImage;
string m_strFilename;
string m_strLBPFilename;


public:
void LBP(string src_image_fl, string lbp_image_fl);
void SRC_LBP(IplImage* image1, IplImage* image2, IplImage* dst);

};




LBP.cpp


#include "LBP.h"


CLBP::CLBP(void)
{
}


CLBP::~CLBP(void)
{
if (m_cvImage) cvReleaseImage(&m_cvImage);
if (m_cvLBPImage) cvReleaseImage(&m_cvLBPImage);
if (m_cvSubImage) cvReleaseImage(&m_cvSubImage);
}


void CLBP::LBP(string src_image_fl, string lbp_image_fl)
{
IplImage* temp_image = cvLoadImage(src_image_fl.c_str(), 1);
m_cvImage = cvCreateImage(cvSize(temp_image->width, temp_image->height), 8, 1);
m_cvSubImage = cvCreateImage(cvSize(temp_image->width, temp_image->height), 8, 1);
if (temp_image->nChannels == 3)
{
cvCvtColor(temp_image, m_cvImage, CV_BGR2GRAY);
}
cvNamedWindow("src_image", 1);
cvShowImage("src_image", m_cvImage);
m_cvLBPImage = cvCreateImage(cvSize(m_cvImage->width, m_cvImage->height), 8, 1);


int center=0;
int center_lbp=0;
for (int row=1; row<m_cvImage->height-1; row++)
for (int col=1; col<m_cvImage->width-1; col++)
{
center = cvGetReal2D(m_cvImage, row, col);
center_lbp = 0;
if (center >= cvGetReal2D(m_cvImage, row-1, col-1))
{
center_lbp += 1;
}
if (center >= cvGetReal2D(m_cvImage, row-1, col))
{
center_lbp += 2;
}
if (center >= cvGetReal2D(m_cvImage, row-1, col+1))
{
center_lbp += 4;
}
if (center >= cvGetReal2D(m_cvImage, row, col-1))
{
center_lbp += 8;
}
if (center >= cvGetReal2D(m_cvImage, row, col+1))
{
center_lbp += 16;
}
if (center >= cvGetReal2D(m_cvImage, row+1, col-1))
{
center_lbp += 32;
}
if (center >= cvGetReal2D(m_cvImage, row+1, col))
{
center_lbp += 64;
}
if (center >= cvGetReal2D(m_cvImage, row+1, col+1))
{
center_lbp += 128;
}
cvSetReal2D(m_cvLBPImage, row, col, center_lbp);
}

cvNamedWindow("lbp_image", 1);
cvShowImage("lbp_image", m_cvLBPImage);
    
    SRC_LBP(m_cvImage, m_cvLBPImage, m_cvSubImage);
cvReleaseImage(&temp_image);
cvWaitKey(0);
cvDestroyAllWindows();


}


void CLBP::SRC_LBP(IplImage* image1, IplImage* image2, IplImage* dst)
{
for (int row=0; row<dst->height; row++)
for (int col=0; col<dst->width; col++)
{
cvSetReal2D(dst, row, col, abs(cvGetReal2D(image1, row, col)-cvGetReal2D(image2, row, col)));
}
cvNamedWindow("sub_image", 1);
cvShowImage("sub_image", dst);
}





main.cpp


#include "LBP.h"


int _tmain(int argc, _TCHAR* argv[])
{
CLBP mylbp;


mylbp.LBP("data/lena.bmp", "");
//mylbp.LBP("1.jpg", "");


return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值