实验的主要内容是将truecolor的图片通过一个优化算法得到其256色的最优表示。本实验采用kmean做算法对像素的色彩进行聚类的计算,分类得到一个色彩数为256的CodeBook,和一个包含有CodeBook索引的矩阵,原图片的颜色值都从CodeBook中获取,colorMap矩阵保存其中像素颜色的索引值,这样通过索引恢复出一个近似的图片文件,达到比传统的GIF图像更好的效果。

由上图可见,256色的GIF图像有明显的颗粒感,这是因为图像发色数过低造成的颜色不连贯。

上图是通过优化算法计算的256色的图片,从图片上可以看出,颜色过渡平滑,几乎看不出颗粒感,相较于256色的GIF图像有明显的优势。

从图片上可以很好的看出,GIF采用的ColorMap对图像有明显的失真,细节图中颗粒感明显,对比采用优化算法的细节图,同样是256色,优化算法处理之后的图片可以和采用24bitTrueColor的JPG图片相媲美,从图像中几乎看不出失真。

源代码:

main.py

from colorMap import *

fileName='lena.jpg'
clusterNum=256
codeBook,colorMap=kmeansImg(fileName,clusterNum)
rimg=recoveryImg(codeBook,colorMap)
cv2.imwrite('./r.jpg',rimg)
cv2.imshow('rimg',rimg)
img=cv2.imread('lena.jpg')
cv2.imshow('img',img)
cv2.waitKey()
from scipy.cluster.vq import *
from numpy import *
import cv2 def kmeansImg(fileName,clusterNum):
img=cv2.imread(fileName)
rl=img.shape[0]
cl=img.shape[1]
img=reshape(img,(img.shape[0]*img.shape[1],img.shape[2]))
codeBook,dis1=kmeans(img,clusterNum)
colorMap,dis2=vq(img,codeBook)
colorMap=reshape(colorMap,(rl,cl))
return codeBook,colorMap def recoveryImg(codeBook,colorMap):
img=[]
for r in range(colorMap.shape[0]):
for l in range(colorMap.shape[1]):
img.append(list(codeBook[colorMap[r,l]]))
img=array(img)
img=reshape(img,(colorMap.shape[0],colorMap.shape[1],3))
return img

【数字图像处理】使用kmeans算法对TrueColor图片进行优化的更多相关文章

  1. Win8 Metro(C#)数字图像处理--2.66FloodFill算法

    原文:Win8 Metro(C#)数字图像处理--2.66FloodFill算法  [函数名称]   洪水填充算法函数 WriteableBitmap FloodfillProcess(Write ...

  2. c语言数字图像处理(一):bmp图片格式及灰度图片转换

    本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...

  3. 作业:K-means算法应用:图片压缩

    from sklearn.datasets import load_sample_image from sklearn.cluster import KMeans import matplotlib. ...

  4. 第九次作业——K-means算法应用:图片压缩

    一.读取一张示例图片或自己准备的图片,观察图片存放数据特点. 根据图片的分辨率,可适当降低分辨率. 再用k均值聚类算法,将图片中所有的颜色值做聚类. 然后用聚类中心的颜色代替原来的颜色值. 形成新的图 ...

  5. K-means算法应用:图片压缩

    plt.imshow(china[:,:,2]) plt.show() from sklearn.datasets import load_sample_image china=load_sample ...

  6. k-means算法的优缺点以及改进

    大家接触的第一个聚类方法,十有八九都是K-means聚类啦.该算法十分容易理解,也很容易实现.其实几乎所有的机器学习和数据挖掘算法都有其优点和缺点.那么K-means的缺点是什么呢? 总结为下: (1 ...

  7. 数字图像处理:基于MATLAB的车牌识别项目 标签: 图像处理matlab算法 2017-06-24 09:17 98人阅读 评论(0)

    学过了数字图像处理,就进行一个综合性强的小项目来巩固一下知识吧.前阵子编写调试了一套基于MATLAB的车牌识别的项目的代码.今天又重新改进了一下代码,识别的效果好一点了,也精简了一些代码.这里没有使用 ...

  8. Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法

    原文:Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法 前面章节中介绍了二值图像的形态学算法,这里讲一下灰度图的形态学算法,主要是公式,代码略. 1,膨胀算法 2,腐蚀算法 3 ...

  9. Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法

    原文:Win8 Metro(C#)数字图像处理--2.64图像高斯滤波算法  [函数名称]   高斯平滑滤波器      GaussFilter(WriteableBitmap src,int r ...

随机推荐

  1. BeanUtils工具

    什么是BeanUtils工具 BeanUtils工具是一种方便我们对JavaBean进行操作的工具,是Apache组织下的产品. BeanUtils工具一般可以方便javaBean的哪些操作? 1)b ...

  2. android 获取sd卡根目录

    dir:/storage/emulated/0 也就是 sdcard目录 ====== android 获取sd卡根目录 public String getSDPath(){        File ...

  3. 国内代码托管git-osc基础使用教程

    git-osc是开源中国社区团队推出的基于Git的快速的.免费的.稳定的在线代码托管平台,不限制私有库和公有库数量.国内同类的有taocode.SVNchina等等 个人更喜欢git-osc的界面与操 ...

  4. C#——性能计数器

    简要Windows性能监视器: 打开Windows性能监视器的步骤如下: 开始→运行→perfmon→确定 在这里我们可以选择添加我们要监控的计数器,比如:cpu使用率.内存使用量等,作为asp.ne ...

  5. [Asp.net core]封装Layer ui checkbox 为taghelper

    摘要 在使用checkbox,为其绑定值的时候,有些麻烦,就想着能不能用taghelper将其封装一下.直接上demo. 一个例子 using Microsoft.AspNetCore.Mvc.Ren ...

  6. Continuous Integration for iOS Apps with Visual Studio Team Services

    原文引用自:https://blog.xamarin.com/continuous-integration-for-ios-apps-with-visual-studio-team-services/ ...

  7. lodash用法系列(3),使用函数

    Lodash用来操作对象和集合,比Underscore拥有更多的功能和更好的性能. 官网:https://lodash.com/引用:<script src="//cdnjs.clou ...

  8. 最简单的例子理解Javascript闭包

    理解Javascript的闭包非常关键,本篇试图用最简单的例子理解此概念. function greet(sth){ return function(name){ console.log(sth + ...

  9. poi excel导入导出

    pom <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artif ...

  10. sqlite 字符串 转 整型 cast 函数 (强制类型转换 )

    sqlite 字符串 转 整型使用 cast 函数 语法: cast(col_name as type) 例子: 表:JobInfo 表内字段:Salary  薪水 select * from Job ...