栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图像像素差异:图像量化和K-Means

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图像像素差异:图像量化和K-Means

图像像素差异:图像量化和K-Means

所谓图像量化就是将在空间上连续的图像像素值,转换为区间单个特定值的过程,举个例子,就是把0,1,2,3,4,5 表示为 0-5这样的区间过程。我们通过图像感受一下:

1.图像量化 原始图像:

原始图像

绘图等级为2:

灰度等级为16:

那么具体怎么实现的呢?方法很简单:

def quality_sampling(cv2_img, level = 4):
    """ 采样:灰度分级 """
    h,w , channel = cv2_img.shape
    img_new = np.zeros(cv2_img.shape, np.uint8) ### 空白图像
    levels = [int(x*256/level) for x in range(256) if int(x*256/level) < 256] ### 根据灰度等级确定灰度区间数值
    
    ##### 图像灰度分类
    for i in range(h):
        for j in range(w):
            for c in range(channel):
                value = cv2_img[i, j][c]  
                current_level = [levels[idx] for idx, next_level in enumerate(levels[1:]) if value >= levels[idx] and next_level > value]
                if len(current_level)==0:
                    current_level = max(levels)
                img_new[i,j][c] = np.uint8(current_level)
    del cv2_img
    return img_new   
    

img_levels = []
img1 = quality_sampling(ori_img, level=2)
img2 = quality_sampling(ori_img, level=4)
img3 = quality_sampling(ori_img, level=8)
img4 = quality_sampling(ori_img, level=12)
img5 = quality_sampling(ori_img, level=16)
img6 = quality_sampling(ori_img, level=32)
img7 = quality_sampling(ori_img, level=64)
img8 = quality_sampling(ori_img, level=128)
img7 = quality_sampling(ori_img, level=64)
img8 = quality_sampling(ori_img, level=128)

原始图像:

不同灰度等级的图像:

        灰度等级=256:

我们可以看到,随着灰度等级变大(灰度等级为2,表示将256的像素值分为2份,即0~128位一份,其余为一份),图像越来越接近原始图像,其实就是把灰度值接近的放到一起,这也类似k-means。 只不过后者是根据灰度值进行分组(分组间距可能是不等距的),分组是根据各像素值之间的接近程度划分的,而前者是强制的等间距分组。

2. kmeans

kmeans 效果如下:

原始图像:

kmeans 4簇聚类效果:

kmeans 8簇聚类效果:

为了区分两种差异,我们再看一组图像:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994968.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号