2018-10-16 08:27:01 qq_33810188 阅读数 371
  • Tensorflow-图像处理视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程以图像处理软件Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。

    1313 人正在学习 去看看 唐宇迪

· 能从硬件结构方面消除不利影响,最好不要从图像算法方面消除不利影响(预防隐患法则)

· 截至目前为止,图像算法没有一个标准的算法流程适合所有的图像处理,所以具体问题具体分析

· 图像算法处理的实际应用遵循海森堡不确定性原则,所以在实际应用中不断优化算法十分必要

· 图像算法处理的实际应用符合墨菲定律,所以图像算法前期的设计隐患一定会在实际应用中产生

· 图像处理算法一定是定量分析算法,模糊不定的处理方式必然会导致问题

· 图像处理问题归根结底是一个数学问题,所以扎实的数学功底必不可少!

---------------------------------------------------------------------------------------------------------------

1.图像算法的设计一定要考虑数据结构类型,不友好的数据结构会使后续的代码结构十分繁琐冗余!

2.无论函数名,还是参数名,在取名的时候千万避免名称相似(例如,如果有一个camsPixels,不可再取一个camPixels,否则在查看代码时,直观上很容易分辨错误!浪费解读代码时间!);

3.不要重复命名函数,否则哪天封装多个带有重复名称的函数时,会出现命名冲突!

4.尽量不要重复造轮子,能够借鉴的代码要借鉴并优化,不断学习别人的代码风格和代码逻辑;

5.一位优秀的算法工程师,也必须是一位不错的软件工程师!

6.

 

 

2017-11-24 22:42:45 xxxqcbQ 阅读数 255
  • Tensorflow-图像处理视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程以图像处理软件Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。

    1313 人正在学习 去看看 唐宇迪

        一直想记录自己图像处理算法修炼心路历程,今天终于鼓足勇气写下第一篇,万事开头难。

        算法写了快4个月了,目前写的比较多的是基础算法,比如通用的圆、直线检测算法,还真不能小瞧这类算法,想在工程上做到又快又准,真的不是一件容易的事情。这里应该算是有bug的,又快又好应当有个明确的量化指标。

        对于圆检测的基本逻辑是:Sobel/Canny算子处理→拿出边界→边界筛选→最小二乘拟合(对噪声很敏感)。


2014-06-07 10:46:19 zhuangxiaobin 阅读数 2443
  • Tensorflow-图像处理视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程以图像处理软件Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。

    1313 人正在学习 去看看 唐宇迪

这是利用数学算法,进行高难度图像处理的一个例子。事实上,图像处理的数学算法,已经发展到令人叹为观止的地步。

Scriptol列出了几种神奇的图像处理算法,让我们一起来看一下。

一、像素图生成向量图的算法

数字时代早期的图片,分辨率很低。尤其是一些电子游戏的图片,放大后就是一个个像素方块。Depixelizing算法可以让低分辨率的像素图转化为高质量的向量图。

二、黑白图片的着色算法

让老照片自动变成彩色的算法

三、消除阴影的算法

不留痕迹地去掉照片上某件东西的阴影的算法

四、HDR照片的算法

  

 

 

 

所谓"HDR照片",就是扩大亮部与暗部的对比效果,亮的地方变得非常亮,暗的地方变得非常暗,亮暗部的细节都很明显。

实现HDR的软件有很多,这里推荐G'MIC。它是GIMP图像编辑软件的一个插件,代码全部开源。

五、消除杂物的算法

所谓"消除杂物",就是在照片上划出一块区域,然后用背景自动填补。Resynthesizer可以做到这一点,它也是GIMP的一个插件。

六、自动合成照片的算法

根据一张草图,选择原始照片,然后把它们合成在一起,生成新照片。这是清华大学的科研成果

七、美容算法

自动对容貌进行"美化"的算法

 

转载自:http://www.ruanyifeng.com/blog/2011/08/amazing_algorithms_of_image_processing.html

2018-08-26 14:27:40 fanyun_01 阅读数 5170
  • Tensorflow-图像处理视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程以图像处理软件Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。

    1313 人正在学习 去看看 唐宇迪

图像处理算法1总结如下:

//添加椒盐噪声
void salt(Mat& src,int number)
{
	for (int i = 0; i < number; i++)
	{
		int r = static_cast<int>(rng.uniform(0, src.rows));
		int c = static_cast<int>(rng.uniform(0, src.cols));
		int k = (static_cast<int>(rng.uniform(0, 1000))&1);
		if(k==1)
		    src.at<uchar>(r, c) = 255;
		else
			src.at<uchar>(r, c) = 0;
	}
	return;
}
/*
* @ drt :高斯方差
* @ Medium :高斯均值
*/
int Get_Gauss(int Medium, int drt)
{
	//产生高斯样本,以U为均值,D为均方差
	double sum = 0;
	for (int i = 0; i<12; i++) sum += rand() / 32767.00;
	//计算机中rand()函数为-32767~+32767(2^15-1)
	//故sum+为0~1之间的均匀随机变量
	return int(Medium + drt*(sum - 6));
	//产生均值为U,标准差为D的高斯分布的样本,并返回
}
/*
* variance :高斯噪声的方差
*/
 
//添加高斯噪声
void ImgAddGaussNoise1(const uchar *srcimgbuff, uchar * dstImgbuff, int srcwith, int srcheigh, int chanels)
{
	assert(srcimgbuff != NULL && srcwith > 0 && srcheigh > 0);
	int bytecount = srcwith * srcheigh * chanels;
 
	for (size_t i = 0; i < bytecount; i++)
	{
		dstImgbuff[i] += Get_Gauss(20, 0.02);
	}
}
//中值求取
void Media(Mat* src, int indexrows, int indexcols, int* meanv, int ker)
{
	int lo = (ker - 1) / 2;
	vector<int>moreo;
	for (int i = indexrows - lo; i <= indexrows + lo; i++)
	{
		for (int j = indexcols - lo; j <= indexcols + lo; j++)
		{
			moreo.push_back(src->at<uchar>(i, j));
		}
	}
	sort(moreo.begin(), moreo.end());
	*meanv = moreo.at(ker * ker / 2);
	return;
}
//均值求取
void Meanvalue(Mat* src, int indexrows, int indexcols, float* meanv, int ker)
{
	int lo = (ker - 1) / 2;
	float total = 0;
	for (int i = indexrows - lo; i <= indexrows + lo; i++)
	{
		for (int j = indexcols - lo; j <= indexcols + lo; j++)
		{
			total += src->at<uchar>(i, j);
		}
	}
	*meanv = total / (ker * ker);
	return;
}
//像素方差
void Variance(Mat& src, vector<test>& hierachy, int ker)
{
	int row = src.rows;
	int col = src.cols;
	int lo = (ker - 1) / 2;
	for (int ir = lo; ir < row - lo; ir++)
	{
		for (int jc = lo; jc < col - lo; jc++)
		{
			float means;
			int var;
			//计算均值
			Meanvalue(&src, ir, jc, &means, ker);
			Vvalue(&src, ir, jc, &var, ker, means);
			test temp;
			temp.menval = var;
			temp.x = ir;
			temp.y = jc;
			hierachy.push_back(temp);
		}
	}
	return;
}
//局部方差求取
void Vvalue(Mat* src, int indexrows, int indexcols, int* vall, int ker, float mean)
{
	int lo = (ker - 1) / 2;
	float total = 0;
	for (int i = indexrows - lo; i <= indexrows + lo; i++)
	{
		for (int j = indexcols - lo; j <= indexcols + lo; j++)
		{
			total += pow((src->at<uchar>(i, j) - mean), 2);
		}
	}
	*vall = static_cast<int>(total);
	return;
}
//STL排序方式
bool SortByM1(const test &v1, const test &v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致  
{
	return v1.menval < v2.menval;//升序排列  
}
//SSIM 结构相似比
Scalar getMSSIM(const Mat& i1, const Mat& i2)
{
	const double C1 = 6.5025, C2 = 58.5225;
	/***************************** INITS **********************************/
	int d = CV_32F;
 
	Mat I1, I2;
	i1.convertTo(I1, d);           // cannot calculate on one byte large values
	i2.convertTo(I2, d);
 
	int num = I1.channels();
	//cv::imshow("123", I1);
	//cv::waitKey();
 
	Mat I2_2 = I2.mul(I2);        // I2^2
	Mat I1_2 = I1.mul(I1);        // I1^2
	Mat I1_I2 = I1.mul(I2);        // I1 * I2
 
								   /*************************** END INITS **********************************/
 
	Mat mu1, mu2;   // PRELIMINARY COMPUTING
	GaussianBlur(I1, mu1, Size(11, 11), 1.5);
	GaussianBlur(I2, mu2, Size(11, 11), 1.5);
 
	Mat mu1_2 = mu1.mul(mu1);
	Mat mu2_2 = mu2.mul(mu2);
	Mat mu1_mu2 = mu1.mul(mu2);
 
	Mat sigma1_2, sigma2_2, sigma12;
 
	GaussianBlur(I1_2, sigma1_2, Size(11, 11), 1.5);
	sigma1_2 -= mu1_2;
 
	GaussianBlur(I2_2, sigma2_2, Size(11, 11), 1.5);
	sigma2_2 -= mu2_2;
 
	GaussianBlur(I1_I2, sigma12, Size(11, 11), 1.5);
	sigma12 -= mu1_mu2;
 
	///////////////////////////////// FORMULA ////////////////////////////////
	Mat t1, t2, t3;
 
	t1 = 2 * mu1_mu2 + C1;
	t2 = 2 * sigma12 + C2;
	t3 = t1.mul(t2);              // t3 = ((2*mu1_mu2 + C1).*(2*sigma12 + C2))
 
	t1 = mu1_2 + mu2_2 + C1;
	t2 = sigma1_2 + sigma2_2 + C2;
	t1 = t1.mul(t2);               // t1 =((mu1_2 + mu2_2 + C1).*(sigma1_2 + sigma2_2 + C2))
 
	Mat ssim_map;
	divide(t3, t1, ssim_map);      // ssim_map =  t3./t1;
 
	Scalar mssim = mean(ssim_map); // mssim = average of ssim map
	return mssim;
}

 

2016-07-03 21:03:51 qq_26499769 阅读数 10188
  • Tensorflow-图像处理视频教程

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 课程以图像处理软件Tensorflow作为核心武器,基于图像处理热点话题进行案例实战。选择当下热门模型,使用真实数据集进行实战演示,通俗讲解整个算法模型并使用tensorflow进行实战,详解其中的原理与代码实现。

    1313 人正在学习 去看看 唐宇迪
之前见了一些文章讨论了一些有趣的图像处理算法
下面总结列出:

在研究的过程中,有时候会碰到很多有意思的图像处理算法,算法极具新意,并且能够产生非常有意思的结果。

算法简介
1、图像镶嵌

图像镶嵌也叫图像混合(Image Blending)、图像剪接(Image Editing),是通过特定的图像处理方法将本来毫无关系的两幅图无缝剪辑到一起,并能够很好地融合两者之间的剪接处,产生以假乱真的效果,不信我们就来看看。

上图左边的手和嘴巴在两幅不同的图中,只要给定一个模板,就可以把一幅图中模板指定的部分无缝拼接到另外一幅图中去,从右边的结果来看是不是看上去毫无违和感?比某些人的PS技术强多了。

类似剪接效果的还有下面这种技术,该算法同样也是划定一个区域,能够将两幅图中的指定区域图像都拿出来,拼接到第三幅图上去,结果简直天衣无缝。这两个算法的技术细节可看参考文献[1][2]。同样也可以参考这位小哥的代码

2、黑白图像着色

家里有黑白的老照片,想把它变成彩色照片,看看老一辈人真实的模样,那你可以试试下面这个图像着色(Colorization)算法。你只要拿彩笔在图像上画几笔,剩下的事情就交给算法啦。这个算法除了给黑白图片着色,还能够给视频着色呢!不信就去文献[3]看看。

3、图像超分辨

还记得小时候的红白机画面么,分辨率很低,如果放大的话,渣渣的马赛克就来了,想不起来了?想想《愤怒的小鸟》那个游戏里面马赛克小鸟,实在让人心塞,如果用了这个算法效果绝对就不一样了。该超分辨算法能够将分辨率非常低的图像提取与分辨率无关的向量,最后的高分辨率图像真是碉堡了,完虐普通的最近邻插值法放大的图像。还有人提供了Python源代码呢。

4、图像去模糊

拍照片的时候手抖,拍出来的照片模糊了怎么办?可以背个三脚架,或者花钱升级相机,变成防抖的。或者你也可以使用以下的图像处理方法,拍完之后处理,就可以得到清晰的图像了。说不定哪一天珍贵的一瞬间拍模糊了,还能用来救救急。

5、图像编辑

要是拍照的时候把不需要的物体拍进来了,破坏了照片美好的意境怎么办?此时,你可能需要这种图像处理技术[6][7]:将图像中意外出现的东西去掉!看下图,前提是要指定需要去掉的区域(中间一幅Mask图像)。

如果拍上去的建筑物看上去破破烂烂的,想填补一下这个破洞,或者想干脆在图像中再复制同一个物体,可以试试下面这个方法[7][8]。顺便说一句,这两个方法都应用到了PhotoShop上了。


参考文献

[1] Peter J. Burt and Edward H. Adelson. 1983. A multiresolution spline with application to image mosaics. ACM Trans. Graph. 2, 4 (October 1983)

[2] Patrick Pérez, Michel Gangnet, and Andrew Blake. 2003. Poisson image editing. ACM Trans. Graph. 22, 3 (July 2003)

[3] Anat Levin, Dani Lischinski, and Yair Weiss. 2004. Colorization using optimization. ACM Trans. Graph. 23, 3 (August 2004)

[4] Johannes Kopf and Dani Lischinski. 2011. Depixelizing Pixel ArtACM Transactions on Graphics (Proceedings of SIGGRAPH 2011).

[5] Xu, Li, and Jiaya Jia. 2010. Two-phase kernel estimation for robust motion deblurring.ECCV. Springer Berlin Heidelberg, 2010. 157-170.

[6] Image Completion

[7] Y. Wexler, E. Shechtman and M. Irani "Space-Time Video Completion" Computer Vision and Pattern Recognition (CVPR), Washington, June 2004.

[8] Connelly Barnes, Eli Shechtman, Adam Finkelstein, and Dan B Goldman. 2009.PatchMatch: a randomized correspondence algorithm for structural image editing. ACM Trans. Graph. 28, 3, Article 24 (July 2009)

[9] Connelly Barnes, Eli Shechtman, Dan B Goldman, The Generalized PatchMatch Correspondence Algorithm, ECCV, 2010





还有一篇:


一、像素图生成向量图的算法

数字时代早期的图片,分辨率很低。尤其是一些电子游戏的图片,放大后就是一个个像素方块。
Depixelizing(http://research.microsoft.com/en-us/um/people/kopf/pixelart/)算法可以让低分辨率的像素图转化为高质量的向量图。

二、黑白图片的着色算法

让老照片自动变成彩色的算法(http://www.cs.huji.ac.il/~yweiss/Colorization/)。

三、消除阴影的算法

不留痕迹地去掉照片上某件东西的阴影的算法(http://www.cs.huji.ac.il/~danix/ShadowRemoval/index.html)。

四、HDR照片的算法

所谓"HDR照片",就是让明亮处变得更亮、让阴暗处变得更暗,从而让照片产生强烈的对比效果。

实现HDR的软件有很多,这里推荐G'MIC(http://gmic.eu/)。它是GIMP图像编辑软件的一个插件,代码全部开源。

五、消除杂物的算法

所谓"消除杂物",就是在照片上划出一块区域,然后用背景自动填补。Resynthesizer可以做到这一点,它也是GIMP的一个插件。

六、自动合成照片的算法


根据一张草图,选择原始照片,然后把它们合成在一起,生成新照片(http://www.scriptol.com/design/sketchtophoto.php)。

七、美容算法

自动对容貌进行"美化"的算法(http://www.scriptol.com/programming/algorithm-pretty-face.php)





图像处理算法工程师

阅读数 13983

没有更多推荐了,返回首页