Repository for OpenCV's extra modules
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

143 lines
3.9 KiB

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
#include "precomp.hpp"
#include "opencv2/hfs.hpp"
#include "hfs_core.hpp"
namespace cv{ namespace hfs{
class HfsSegmentImpl CV_FINAL : public cv::hfs::HfsSegment{
public:
void setSegEgbThresholdI(float c) CV_OVERRIDE
{
core->hfsSettings.egbThresholdI = c;
}
float getSegEgbThresholdI() CV_OVERRIDE {
return core->hfsSettings.egbThresholdI;
}
void setMinRegionSizeI(int n) CV_OVERRIDE
{
core->hfsSettings.minRegionSizeI = n;
}
int getMinRegionSizeI() CV_OVERRIDE
{
return core->hfsSettings.minRegionSizeI;
}
void setSegEgbThresholdII(float c) CV_OVERRIDE
{
core->hfsSettings.egbThresholdII = c;
}
float getSegEgbThresholdII() CV_OVERRIDE {
return core->hfsSettings.egbThresholdII;
}
void setMinRegionSizeII(int n) CV_OVERRIDE
{
core->hfsSettings.minRegionSizeII = n;
}
int getMinRegionSizeII() CV_OVERRIDE
{
return core->hfsSettings.minRegionSizeII;
}
void setSpatialWeight(float w) CV_OVERRIDE
{
core->hfsSettings.slicSettings.coh_weight = w;
core->reconstructEngine();
}
float getSpatialWeight() CV_OVERRIDE
{
return core->hfsSettings.slicSettings.coh_weight;
}
void setSlicSpixelSize(int n) CV_OVERRIDE
{
core->hfsSettings.slicSettings.spixel_size = n;
core->reconstructEngine();
}
int getSlicSpixelSize() CV_OVERRIDE
{
return core->hfsSettings.slicSettings.spixel_size;
}
void setNumSlicIter(int n) CV_OVERRIDE
{
core->hfsSettings.slicSettings.num_iters = n;
core->reconstructEngine();
}
int getNumSlicIter() CV_OVERRIDE
{
return core->hfsSettings.slicSettings.num_iters;
}
HfsSegmentImpl(int height, int width,
float segEgbThresholdI, int minRegionSizeI, float segEgbThresholdII, int minRegionSizeII,
float spatialWeight, int spixelSize, int numIter)
{
core = Ptr<HfsCore>(new HfsCore(height, width,
segEgbThresholdI, minRegionSizeI, segEgbThresholdII, minRegionSizeII,
spatialWeight, spixelSize, numIter));
}
Mat performSegmentGpu(InputArray src, bool ifDraw = true) CV_OVERRIDE;
Mat performSegmentCpu(InputArray src, bool ifDraw = true) CV_OVERRIDE;
private:
Ptr<HfsCore> core;
};
Mat HfsSegmentImpl::performSegmentGpu(InputArray src, bool ifDraw) {
Mat src_ = src.getMat();
CV_Assert(src_.rows == core->hfsSettings.slicSettings.img_size.y);
CV_Assert(src_.cols == core->hfsSettings.slicSettings.img_size.x);
Mat seg;
int num_css = core->processImageGpu(src_, seg);
if(ifDraw){
Mat res;
core->drawSegmentationRes( seg, src_, num_css, res );
return res;
}else{
return seg;
}
}
Mat HfsSegmentImpl::performSegmentCpu(InputArray src, bool ifDraw) {
Mat src_ = src.getMat();
CV_Assert(src_.rows == core->hfsSettings.slicSettings.img_size.y);
CV_Assert(src_.cols == core->hfsSettings.slicSettings.img_size.x);
Mat seg;
int num_css = core->processImageCpu(src_, seg);
if (ifDraw) {
Mat res;
core->drawSegmentationRes(seg, src_, num_css, res);
return res;
}
else {
return seg;
}
}
Ptr<HfsSegment> HfsSegment::create(int height, int width, float segEgbThresholdI, int minRegionSizeI,
float segEgbThresholdII, int minRegionSizeII,
float spatialWeight, int spixelSize, int numIter)
{
return Ptr<HfsSegmentImpl>(new HfsSegmentImpl(height, width,
segEgbThresholdI, minRegionSizeI, segEgbThresholdII, minRegionSizeII,
spatialWeight, spixelSize, numIter));
}
}}