gSLicr:nfydream gSLICr: SLIC superpixels at over 250Hz (using cuda)

Posted guoben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gSLicr:nfydream gSLICr: SLIC superpixels at over 250Hz (using cuda)相关的知识,希望对你有一定的参考价值。

一般的SLIC算法在CPU上运行处理一张图片大概需要300ms
本算法只需要10ms;
主页
github代码

中心思想:K-mean, 先将每个cluster均匀分布, 然后对每个像素找最近的cluster, 然后更新每个cluster.最终的cluster就是超像素

代码解析

主类:
SLic_enegine

class core_engine
{
private:
      seg_engine* slic_seg_engine;

public:
	core_engine(const objects::settings& in_settings);
	~core_engine();

	// 图片分割函数
	void Process_Frame(UChar4Image* in_img);

	// 获取图片分割结果的函数
	const IntImage * Get_Seg_Res();

	// 在输出图片上画轮廓的函数
	void Draw_Segmentation_Result(UChar4Image* out_img);

	//把分割结果保存到一个图片中
	void Write_Seg_Res_To_PGM(const char* fileName);
};

seg_engnie

class seg_engine
{
protected:

	// normalizing distances
	// 归一化距离
	float max_color_dist; //颜色距离
	float max_xy_dist; //像素点距离

	// images
	UChar4Image *source_img;
	Float4Image *cvt_img;
	IntImage *idx_img;

	// superpixel map
	// 超像素的地图
	SpixelMap* spixel_map;
	int spixel_size; //超像素大小

	objects::settings gSLICr_settings; //slic设置

	virtual void Cvt_Img_Space(UChar4Image* inimg, Float4Image* outimg, COLOR_SPACE color_space) = 0;
	virtual void Init_Cluster_Centers() = 0;//初始化聚类中心
	virtual void Find_Center_Association() = 0;
	virtual void Update_Cluster_Center() = 0;//更新聚类中心
	virtual void Enforce_Connectivity() = 0;//强制联通

public:

	seg_engine(const objects::settings& in_settings );//通过setting结构体初始化
	virtual ~seg_engine();

	const IntImage* Get_Seg_Mask() const {
		idx_img->UpdateHostFromDevice();
		return idx_img;
	};

	void Perform_Segmentation(UChar4Image* in_img);
	virtual void Draw_Segmentation_Result(UChar4Image* out_img){};
};




以上是关于gSLicr:nfydream gSLICr: SLIC superpixels at over 250Hz (using cuda)的主要内容,如果未能解决你的问题,请参考以下文章

+-r, +-s 的所有排列

象棋相关

象棋相关

s-s-rS 报告 - 从没有 s-s-rS 服务器的 C# 导出

字符串常用操作

s-s-rS 报告需要在 s-s-rS 2008 (VS 2008) 中重用来自 s-s-rS 2005 (VS 2005) 的 rdl 文件