图像像素差异:图像量化和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簇聚类效果:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值