HOG özelliklerini yalnızca blok için hesaplamaya çalışıyorum. opencv/module/gpu/src/
altında listelenen hog.cpp
'u araştırdım. Aşağıda sadece blok özelliklerine göre değiştirdiğim kod var.Yalnızca özellikler için HG özellikleri
void cv::gpu::HOGDescriptor::getDescriptors(const GpuMat& img, Size win_stride, GpuMat& descriptors, int descr_format)
{
CV_Assert(win_stride.width % block_stride.width == 0 && win_stride.height % block_stride.height == 0);
computeBlockHistograms(img);
// give block back
/*
const size_t block_hist_size = getBlockHistogramSize();
Size blocks_per_win = numPartsWithin(win_size, block_size, block_stride);
Size wins_per_img = numPartsWithin(img.size(), win_size, win_stride);
descriptors.create(wins_per_img.area(), static_cast<int>(blocks_per_win.area() * block_hist_size), CV_32F); */
switch (descr_format)
{
case DESCR_FORMAT_ROW_BY_ROW:
hog::extract_descrs_by_rows(win_size.height, win_size.width, block_stride.height, block_stride.width,
win_stride.height, win_stride.width, img.rows, img.cols, block_hists.ptr<float>(), descriptors);
break;
case DESCR_FORMAT_COL_BY_COL:
hog::extract_descrs_by_cols(win_size.height, win_size.width, block_stride.height, block_stride.width,
win_stride.height, win_stride.width, img.rows, img.cols, block_hists.ptr<float>(), descriptors);
break;
default:
CV_Error(CV_StsBadArg, "Unknown descriptor format");
}
}
İşte computeBlockHistograms
kodudur.
void cv::gpu::HOGDescriptor::computeBlockHistograms(const GpuMat& img)
{
computeGradient(img, grad, qangle);
size_t block_hist_size = getBlockHistogramSize();
Size blocks_per_img = numPartsWithin(img.size(), block_size, block_stride);
// block_hists.create(1, block_hist_size * blocks_per_img.area(), CV_32F);
block_hists = getBuffer(1, static_cast<int>(block_hist_size * blocks_per_img.area()), CV_32F, block_hists_buf);
hog::compute_hists(nbins, block_stride.width, block_stride.height, img.rows, img.cols,
grad, qangle, (float)getWinSigma(), block_hists.ptr<float>());
hog::normalize_hists(nbins, block_stride.width, block_stride.height, img.rows, img.cols,
block_hists.ptr<float>(), (float)threshold_L2hys);
}
DÜZENLEME: hog.cpp
yanı getDescriptor fonksiyonunu dahil ediyorum
void cv::gpu::HOGDescriptor::getDescriptors(const GpuMat& img, Size win_stride, GpuMat& descriptors, int descr_format)
{
CV_Assert(win_stride.width % block_stride.width == 0 && win_stride.height % block_stride.height == 0);
computeBlockHistograms(img);
const size_t block_hist_size = getBlockHistogramSize();
Size blocks_per_win = numPartsWithin(win_size, block_size, block_stride);
Size wins_per_img = numPartsWithin(img.size(), win_size, win_stride);
descriptors.create(wins_per_img.area(), static_cast<int>(blocks_per_win.area() * block_hist_size), CV_32F);
switch (descr_format)
{
case DESCR_FORMAT_ROW_BY_ROW:
hog::extract_descrs_by_rows(win_size.height, win_size.width, block_stride.height, block_stride.width,
win_stride.height, win_stride.width, img.rows, img.cols, block_hists.ptr<float>(), descriptors);
break;
case DESCR_FORMAT_COL_BY_COL:
hog::extract_descrs_by_cols(win_size.height, win_size.width, block_stride.height, block_stride.width,
win_stride.height, win_stride.width, img.rows, img.cols, block_hists.ptr<float>(), descriptors);
break;
default:
CV_Error(CV_StsBadArg, "Unknown descriptor format");
}
}
birisi bloğu yalnızca HOG özellikleri almak için bana yardımcı olabilir. EDITED: Sadece hücre için farklı pencere boyutu tutma özelliklerini ve blok aynı HOG özelliklerini hesaplamak istiyorum.
Eğer ulaşmak istediğiniz hedefe bir örnek verebilirim/gpu.hpp ? HoG ile çok aşina değilim ama afaik ÖZELLİKLERİ ancak DESCRIPTORS hesaplamıyor. Örneğin, bir HoG tanımlayıcısı 64x128 piksel pencereden hesaplanabilir. Bu pencerede, bloklar algoritma tarafından değerlendirilir. 64x128 boyutlu pencereyi farklı bir şeye değiştirmek ister misiniz? Aynı blok boyutunu kullanmak ister misiniz? (Bu, tanımlayıcı öğesinin boyutunu değiştirmiyor mu?) – Micka
Yanıt verdiğiniz için teşekkür ederiz. Aslında üç farklı pencereye sahip olduğum için sadece bloklar için HoG tanımlayıcılarını hesaplamak istiyorum, bu yüzden sadece bir kez bloklar için HoG tanımlayıcılarını hesaplamak istiyorum. Üç farklı rüzgar için HoG tanımlayıcılarını hesaplarsam, üç kez blok için HoG tanımlayıcısını hesaplıyorum. Umarım şimdi aldın – shah
ah. gpu sürümünü kullanmak zorunda mısın yoksa cpu da iyi olur mu? – Micka