实验的主要内容是将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. css细节:尖角处理

    在各种网站里面,我们会经常看到类似于这样的尖角:(示例:新浪微博) 它实现的方式有多种,哪种才是最简单的?哪种才是最优秀的?首先我声明一下,我还不清楚这个东西具体叫什么名字(哪位知道还望告知),暂且叫 ...

  2. 24.python中类的方法

    类中的方法,其实就是类中的函数,可以分为:实例方法,类方法,静态方法.方法和字段一样,也是属于类的属性,所以也具有运行中修改的特效, 但一般不推荐这样做. 我在类的基本语法中,介绍了构造器方法:__i ...

  3. Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力

    B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...

  4. Java+Windows+ffmpeg实现视频转换

    最近由于项目需要,研究了一下如何用Java实现视频转换,“着实”废了点心思,整理整理,写出给自己备忘下. 思路 由于之前没有没法过相关功能的经验,一开始来真不知道从哪里入手.当然,这个解决,googl ...

  5. 在Asp.net core中使用WebScocket

    今天小试了一下在Asp.net core中使用websocket,这里记录一下: 在 Startup 类的 Configure 方法中添加 WebSocket 中间件. app.UseWebSocke ...

  6. HDU 4758 Walk Through Squares (2013南京网络赛1011题,AC自动机+DP)

    Walk Through Squares Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Oth ...

  7. HOWTO: Use STM32 SPI half duplex mode

    HOWTO: Use STM32 SPI half duplex mode I’ve got my hands onto some STM32F030F4P6 ARM-Cortex M0 proces ...

  8. Versaloon -- Connect To Targets

    Versaloon Full open-source(GPLv3) platform for multiple applications, including programmer, debugger ...

  9. 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集

    相关资料 微信emoji表情编码 微信用户名显示「emoji表情」 PHP处理微信中带Emoji表情的消息发送和接收(Unicode字符转码编码) MySQL 存储emoji表情 MySQL 存储 e ...

  10. 收集的MySQL的面试题分享给大家

    1.怎样登陆mysql数据库 mysql -u username -p 2.怎样开启/关闭mysql服务 service mysql start/stop 3.查看mysql的状态 service m ...