纹理特征提取
Extraction Texture Feature c++
我试图通过使用周围像素的灰度值来提取图像的每个像素的特征向量:http://img59.imageshack.us/img59/7398/texturemap.png标记为黑色的像素是使用的像素,因为其他像素对于稍后使用的SVM结果是冗余的。
当前使用的代码:
vector<Histogram*> texture_based(image_file* image) {
int cat;
Mat img = cvLoadImage(image->getName().c_str(), CV_LOAD_IMAGE_GRAYSCALE);
Mat img_b(img.rows + 12, img.cols + 12, img.depth());
copyMakeBorder(img, img_b, 6, 6, 6, 6, IPL_BORDER_CONSTANT, cvScalarAll(0));
vector<Histogram*> result;
for(int i = 6; i < img_b.rows - 6; ++i) {
for(int j = 6; j < img_b.cols - 6; ++j) {
Mat hist = Mat::zeros(1, 49, CV_32FC1);
cat = 0;
hist.at<float>(0, 0) = (float)img_b.at<char>(i - 6, j - 6);
hist.at<float>(0, 1) = (float)img_b.at<char>(i - 5, j - 5);
hist.at<float>(0, 2) = (float)img_b.at<char>(i - 4, j - 4);
hist.at<float>(0, 3) = (float)img_b.at<char>(i - 3, j - 3);
hist.at<float>(0, 4) = (float)img_b.at<char>(i - 2, j - 2);
hist.at<float>(0, 5) = (float)img_b.at<char>(i - 1, j - 1);
hist.at<float>(0, 6) = (float)img_b.at<char>(i, j);
hist.at<float>(0, 7) = (float)img_b.at<char>(i + 1, j + 1);
hist.at<float>(0, 8) = (float)img_b.at<char>(i + 2, j + 2);
hist.at<float>(0, 9) = (float)img_b.at<char>(i + 3, j + 3);
hist.at<float>(0, 10) = (float)img_b.at<char>(i + 4, j + 4);
hist.at<float>(0, 11) = (float)img_b.at<char>(i + 5, j + 5);
hist.at<float>(0, 12) = (float)img_b.at<char>(i + 6, j + 6);
hist.at<float>(0, 13) = (float)img_b.at<char>(i + 6, j - 6);
hist.at<float>(0, 14) = (float)img_b.at<char>(i + 5, j - 5);
hist.at<float>(0, 15) = (float)img_b.at<char>(i + 4, j - 4);
hist.at<float>(0, 16) = (float)img_b.at<char>(i + 3, j - 3);
hist.at<float>(0, 17) = (float)img_b.at<char>(i + 2, j - 2);
hist.at<float>(0, 18) = (float)img_b.at<char>(i + 1, j - 1);
hist.at<float>(0, 19) = (float)img_b.at<char>(i - 1, j + 1);
hist.at<float>(0, 20) = (float)img_b.at<char>(i - 2, j + 2);
hist.at<float>(0, 21) = (float)img_b.at<char>(i - 3, j + 3);
hist.at<float>(0, 22) = (float)img_b.at<char>(i - 4, j + 4);
hist.at<float>(0, 23) = (float)img_b.at<char>(i - 5, j + 5);
hist.at<float>(0, 24) = (float)img_b.at<char>(i - 6, j + 6);
hist.at<float>(0, 25) = (float)img_b.at<char>(i, j - 6);
hist.at<float>(0, 26) = (float)img_b.at<char>(i, j - 5);
hist.at<float>(0, 27) = (float)img_b.at<char>(i, j - 4);
hist.at<float>(0, 28) = (float)img_b.at<char>(i, j - 3);
hist.at<float>(0, 29) = (float)img_b.at<char>(i, j - 2);
hist.at<float>(0, 30) = (float)img_b.at<char>(i, j - 1);
hist.at<float>(0, 31) = (float)img_b.at<char>(i, j + 1);
hist.at<float>(0, 32) = (float)img_b.at<char>(i, j + 2);
hist.at<float>(0, 33) = (float)img_b.at<char>(i, j + 3);
hist.at<float>(0, 34) = (float)img_b.at<char>(i, j + 4);
hist.at<float>(0, 35) = (float)img_b.at<char>(i, j + 5);
hist.at<float>(0, 36) = (float)img_b.at<char>(i, j + 6);
hist.at<float>(0, 37) = (float)img_b.at<char>(i - 6, j);
hist.at<float>(0, 38) = (float)img_b.at<char>(i - 5, j);
hist.at<float>(0, 39) = (float)img_b.at<char>(i - 4, j);
hist.at<float>(0, 40) = (float)img_b.at<char>(i - 3, j);
hist.at<float>(0, 41) = (float)img_b.at<char>(i - 2, j);
hist.at<float>(0, 42) = (float)img_b.at<char>(i - 1, j);
hist.at<float>(0, 43) = (float)img_b.at<char>(i + 1, j);
hist.at<float>(0, 44) = (float)img_b.at<char>(i + 2, j);
hist.at<float>(0, 45) = (float)img_b.at<char>(i + 3, j);
hist.at<float>(0, 46) = (float)img_b.at<char>(i + 4, j);
hist.at<float>(0, 47) = (float)img_b.at<char>(i + 5, j);
hist.at<float>(0, 48) = (float)img_b.at<char>(i + 6, j);
if(image->inAnyRec(i, j))
cat = 1;
Mat_<float> new_hist = hist;
Histogram* t = new Histogram(&new_hist, cat);
result.push_back(t);
}
}
return result;
}
其中image_file* a指针指向一个包含图像信息的类。我想知道是否有更快的方法来做到这一点。
你可以计算4次操作;每个都将初始化一个包含12(或13)个元素的向量,向东、向南、向东北或向东南移动一个像素,并替换向量中的一个像素。这还需要一次初始化所有直方图向量(width-12)*(height-12), 49。
一个支持的选项是将原始图像旋转/倾斜成四个数组——您必须在此时执行char->float转换是否有意义。
a b c d --> a e i --> a f k > i f c
e f g h b f j b g l j g d
i j k l c g k
d h l
相关文章:
- 从特征::等距3d提取旋转时出错
- 特征:如何从数组中的稀疏矩阵中提取行
- 提取特征.一个班级里有很多getter/setters正常吗?
- 图像和图像处理中的特征提取
- 情绪识别或特征提取
- 用于从back_insert_iterator中提取容器value_type的特征类
- 每隔一行或每一列提取一个特征矩阵作为一个新矩阵
- 计算机视觉,提取有关桌子,椅子,床的特征.家具
- 人脸特征提取和识别
- 基于FlannBasedMatcher的SURF特征提取和关键点匹配
- C++类型特征以提取模板参数类
- OpenGL ES 2 如何渲染到纹理并提取用于 GPGPU 测试的数据
- 如何从手部轮廓中提取特征
- 如何使用 opencv c++ 从手部轮廓中提取 LBP 特征
- 最快的HOG特征提取实现
- Gabor特征提取用于检测人
- 从给定的点云数据中提取一组特征和聚类数据
- 纹理特征提取
- 二值图像的特征提取
- 从咖啡中提取特征