实验的主要内容是将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. 【*】深入理解redis主从复制原理

    1.复制过程 从节点执行 slaveof 命令. 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制. 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点 ...

  2. 使用Xcode打包上传APP

    1.打开xcode,进入product->Scheme->EditScheme,找到Archive,最上面的设备选择IOSDevice,在BuildConfiguration中选中Rele ...

  3. Codeforces Round #394 (Div. 2) C. Dasha and Password 暴力

    C. Dasha and Password 题目连接: http://codeforces.com/contest/761/problem/C Description After overcoming ...

  4. TCP三次握手&四次挥手(示意图)

    经典的三次握手示意图:(#add,“握手”即图中左边到右边的连线)    经典的四次握手关闭图:    TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即t ...

  5. sublime text2 用ctags插件实现方法定位(转)

    我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安装其他插件就方便了. 点击sublime的菜单栏 view->show console :现在打开了控制台, ...

  6. Oracle初始化参数之memory_target

    一.引言: Oracle 9i引入pga_aggregate_target,可以自动对PGA进行调整: Oracle 10g引入sga_target,可以自动对SGA进行调整: Oracle 11g则 ...

  7. WebLogic使用总结(七)——WebLogic部署Web应用并绑定域名

    一.在WebLogic中创建一个虚拟主机 找到虚拟主机面板,如下图所示:

  8. 使用log4jdbc记录SQL信息

    一.log4jdbc的简单介绍 使用log4jdbc在不改变原有代码的情况下,就可以收集执行的SQL文和JDBC执行情况. 平时开发使用的ibatis,hibernate,spring jdbc的sq ...

  9. EditPlus(4.0.0.395)中文免激活绿色版

    EditPlus一套功能强大,可取代记事本的文字编辑器,拥有无限制的撤消与重做.英文拼字检查.自动换行.列数标记.搜寻取代.同时编辑多文件.全屏幕浏览功能.而它还有一个好用的功能,就是它有监视剪贴板的 ...

  10. 使用Axure RP原型设计实践04,了解全局变量

    变量是一个可以变的数,可以看作是一个数据的容器.变量有2个操作,一个是读,一个是写.Axure的全局变量是指任何时候都可以对这个变量进行读写操作. 点击工具栏Project下的Global Varia ...