代码链接:图像的增强与合成
最近做了一个小实验,内容是图像的增强与合成,觉着挺有意思,记录一下。 首先效果是这样的: 利用Python和Opencv算法,实现下述功能: 1、 准备本人在纯色背景前的照片,并且要求背景颜色与皮肤、衣服的颜色区别较大。 2、 准备一张与上述人像图像大小相同的风景图片。(或者使用reshape) 3、 利用图像增强算法处理人像照片,以提升照片的品质。 4、 利用图像处理算法将步骤3得到的照片中背景部分置为黑色,人像部分保持不变。 5、 利用图像处理算法处理风景图片,使风景图片变得模糊,实现背景虚化。 6、 利用图像处理算法将步骤4得到的人像图像进行二值化处理,人像部分为0,背景部分为1。 7、 利用步骤6得到的二值图像将步骤5得到的风景图像中用于合成人像区域的像素置为黑色后,与步骤4得到的人像图像进行合成,实现人像迁移。
在做这个实验的过程中,主要学到的一些知识有:
- 利用 [0,-1,0],[-1,5,-1],[0,-1,0] 这个卷积核可以实现图像的锐化,增加图像的清晰度,提升图片品质;
- 利用 kmeans (cv.kmeans)实现背景与人像的分割;
- 在对一个感兴趣区域做特殊处理时,掩膜可以起到很大的作用;
- 使用高斯滤波使边界模糊;
这里主要想记录opencv中kmeans的参数以及掩膜的作用:
1. cv.kmeans
criteria=(cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER, 10, 0.1)
ret,label,center=cv.kmeans(points,clusternum,None,criteria,10,cv.KMEANS_PP_CENTERS)
输入参数: sample:它应该是np.float32数据类型,并且每个功能都应该放在单个列中。 nclusters(K):结束条件所需的簇数 criteria:这是迭代终止条件。满足此条件后,算法迭代将停止。实际上,它应该是3个参数的元组。它们是(type,max_iter,epsilon):
- 终止条件的类型。它具有3个标志,如下所示:
- cv.TERM_CRITERIA_EPS-如果达到指定的精度epsilon,则停止算法迭代。
- cv.TERM_CRITERIA_MAX_ITER-在指定的迭代次数max_iter之后停止算法。
- cv.TERM_CRITERIA_EPS + cv.TERM_CRITERIA_MAX_ITER-当满足上述任何条件时,停止迭代。
- max_iter-一个整数,指定最大迭代次数。
- . epsilon-要求的精度 1. attempts:该标志用于指定使用不同的初始标签执行算法的次数。该算法返回产生最佳紧密度的标签。该紧凑性作为输出返回。 2. flags:此标志用于指定初始中心的获取方式。通常,为此使用两个标志:cv.KMEANS_PP_CENTERS和cv.KMEANS_RANDOM_CENTERS。
输出参数:
- 紧凑度:它是每个点到其相应中心的平方距离的总和。
- 标签:这是标签数组,其中每个元素标记为“0”,“ 1” …
- 中心:这是群集中心的阵列。 现在,我们将通过三个示例了解如何应用K-Means算法。
2. 掩膜的作用
提取感兴趣区:用预先制作的感兴趣区掩膜与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;
- 屏蔽作用:用掩膜对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计;
- 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征;
- 特殊形状图像的制作。
代码较长,我将链接放在下方: 代码链接:图像的增强与合成
|