十四、聚類實戰——圖片壓縮

對同一像素點值的像素點歸為一類,通過平均值進行取代,從而將圖像進行壓縮并且保證圖像盡可能不失真,關鍵信息仍保留。

from PIL import Image
import numpy as np
from sklearn.cluster import KMeans
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef restore_image(cb, cluster, shape):row, col, dummy = shapeimage = np.empty((row, col, 3))index = 0for r in range(row):for c in range(col):image[r, c] = cb[cluster[index]]index += 1return imagedef show_scatter(a):N = 10print('原始數據:\n', a)density, edges = np.histogramdd(a, bins=[N,N,N], range=[(0,1), (0,1), (0,1)])density /= density.max()x = y = z = np.arange(N)d = np.meshgrid(x, y, z)fig = plt.figure(1, facecolor='w')ax = fig.add_subplot(111, projection='3d')ax.scatter(d[1], d[0], d[2], c='r', s=100*density, marker='o', depthshade=True)ax.set_xlabel(u'紅色分量')ax.set_ylabel(u'綠色分量')ax.set_zlabel(u'藍色分量')plt.title(u'圖像顏色三維頻數分布', fontsize=20)plt.figure(2, facecolor='w')den = density[density > 0]den = np.sort(den)[::-1]t = np.arange(len(den))plt.plot(t, den, 'r-', t, den, 'go', lw=2)plt.title(u'圖像顏色頻數分布', fontsize=18)plt.grid(True)plt.show()if __name__ == '__main__':matplotlib.rcParams['font.sans-serif'] = [u'SimHei']matplotlib.rcParams['axes.unicode_minus'] = Falsenum_vq = 256 #256個像素,最后想降維到256個維度im = Image.open('Lena.png')     # flower2.png(200)/lena.png(50)  讀取圖片image = np.array(im).astype(np.float) / 255 # 將圖像數據轉化為array類型,方便后續的操作image = image[:, :, :3]#所有行、列、前三個維度,因為png有四個屬性,RGBα,alpha為透明度,不需要,只用前三個維度信息即可image_v = image.reshape((-1, 3))#拉伸像素點,行不關心,列為3列===轉換為二維數據,每一列均為一個維度的全部數據,RGB變成了3列,每行為一個像素點model = KMeans(num_vq)#通過Kmeans對每一行進行處理,也就是每個像素點進行處理,對每個像素點進行分類,像素點相似度的歸類;創建聚類對象#每類都有一個中心像素點,將該中心像素點代替這一類,這里手動傳入的是分成256個類別。不管像素點位置,只考慮相似與否是否為一類show_scatter(image_v)#畫圖N = image_v.shape[0]    # 圖像像素總數# 選擇足夠多的樣本(如1000個),計算聚類中心idx = np.random.randint(0, N, size=1000)#從圖像中隨機選取1000個像素點image_sample = image_v[idx]model.fit(image_sample)#將這1000個像素點去訓練模型,聚類結果,從1000個像素點中找到最重要的256個像素點作為中心點c = model.predict(image_v)  # 將圖像全部的像素點進行預測,看看圖像中的所有像素點離這256個簇哪一個最近,把圖像的所有像素點進行分類print('聚類結果:\n', c)print('聚類中心:\n', model.cluster_centers_)plt.figure(figsize=(15, 8), facecolor='w')plt.subplot(121)plt.axis('off')plt.title(u'原始圖片', fontsize=18)plt.imshow(image)#plt.savefig('1.png')plt.subplot(122)vq_image = restore_image(model.cluster_centers_, c, image.shape)#聚類中心點、聚類結果、模型圖像的形狀   作為參數進行恢復圖像plt.axis('off')plt.title(u'矢量量化后圖片:%d色' % num_vq, fontsize=20)plt.imshow(vq_image)#plt.savefig('2.png')plt.tight_layout()plt.show()

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377739.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377739.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377739.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

步驟菜單使用css3實現

代碼庫:http://thecodeplayer.com/walkthrough/css3-breadcrumb-navigation 有興趣的可以看一下,看完絕對讓你大飽眼福。首先截圖,看效果看著很酷吧,其實實現起來也不是很難,里邊需要用的技術有:box-shadow,計數器&…

【嵌入式系統】STM32串口通信的四種方法(基于RTOS)

目錄1、串行通信的基本參數2、輪詢方式代碼效果3、中斷方式代碼效果4、中斷加上時間戳方式代碼及效果5、DMA空閑中斷方式接收數據1、串行通信的基本參數 串行端口的通信方式是將字節拆分成一個接一個的位再傳輸出去,接收方再將此一個一個的位組合成原來的字符&…

大數據 java 代碼示例_Java變量類型與示例

大數據 java 代碼示例Java變量 (Java variables) Variables are the user-defined names of the memory blocks, and their values can be changed at any time during program execution. They play an important role in a class/program as they help in to store, retrieve…

畢業設計

位置跟蹤系統工作原理(博聞網) http://science.bowenwang.com.cn/location-tracking.htm Azuma是這樣定義增強現實的 :虛實結合 ,實時交互 ,三維注冊 環境搭建: http://cvchina.net/thread-173-1-1.html http://blog.csdn.net/jdh99/article/…

十五、聚類的評估

一、Given Label 均一性homogeneity:一個簇中只包含一個類別樣本,Precision 完整性completeness:同類別樣本被歸到同一個簇中,Recall 將均一性h和完整性c進行結合(二者加權平均)得到V-Measure,,β為權重 …

SQL SERVER作業的Schedules淺析

SQL SERVER作業的計劃(Schedules),如果你沒仔細研究過或沒有應用一些復雜的計劃(Schedules),那么你覺得SQL SERVER作業的計劃(Schedules)非常好用,也沒啥問題,但是我要告訴你一個“殘…

leetcode 51. N 皇后 思考分析

目錄題目思考AC代碼題目 n 皇后問題研究的是如何將 n 個皇后放置在 nn 的棋盤上,并且使皇后彼此之間不能相互攻擊。 思考 首先以N4為例,畫出解空間樹的一部分: 根據模板: void backtracking(參數) {if(終止條件){存放結果…

Django實戰(18):提交訂單

前面的內容已經基本上涵蓋了Django開發的主要方面,我們從需求和界面設計出發,創建模型和修改模型,并通過scaffold作為開發的起點;在scaffold的基礎上重新定制模板,并且通過Model類和Form類對用戶輸入的數據進行校驗。我…

No module named ‘tensorflow.examples‘解決方案

想從tensorflow中導入mnist手寫數字數據集,結果報錯 from tensorflow.examples.tutorials.mnist import input_data import tensorflow.compat.v1 as tf tf.disable_v2_behavior()my_mnist input_data.read_data_sets("MNIST_data_bak/", one_hotTrue)&…

julia example_使用Julia中的Example的sign()函數

julia exampleJulia| sign()函數 (Julia | sign() function) sign() function is a library function in Julia programming language, it returns the sign of the given value in the form of -1/1. sign()函數是Julia編程語言中的庫函數,它以-1 / 1的形式返回給…

.NET通用基本權限系統

DEMO下載地址: http://download.csdn.net/detail/shecixiong/5372895 一、開發技術:B/S(.NET C# ) 1、Windows XP以上 (支援最新Win 8) 2、Microsoft Visual Studio 2010/2012 C#.NET 3、.NET Framework 4.0以上 (支援最新4.5版本) 4、SQL Server 2005以…

leetcode 37. 解數獨 思考分析

目錄題目核心思路的不斷細化1、核心框架2、考慮到每個位置的工作3、考慮到到達最后一列、該位置的數已經預置的情況4、判斷是否符合規則的函數5、確定遞歸終止條件確定函數返回值AC代碼題目 編寫一個程序,通過填充空格來解決數獨問題。 一個數獨的解法需遵循如下規…

快速完成兼職外包開發任務

做了很多年的開發相關的工作,做過兼職開發,也做過外包一些開發項目。 兼職人員角色時 正是經歷這些事情時,每次就要提前很費經的跟公司溝通,讓他們把公司內部的svn開發出去,但是就是很難,會涉及到安全各方的…

使用YOLOv5訓練NEU-DET數據集

一、下載YOLOv5源碼和NEU-DET(鋼材表面缺陷)數據集 YOLOv5源碼 NEU-DET(鋼材表面缺陷)數據集 這里的數據集已經經過處理了,下載即可 若通過其他途徑下載的原始數據集標簽為xml格式,需要轉化為txt格式XML轉txt格式腳本 二、數據集準備 NEU-DET(鋼材表…

kotlin獲取屬性_Kotlin程序獲取系統MAC地址

kotlin獲取屬性The task is to get system MAC address. 任務是獲取系統MAC地址。 package com.includehelpimport java.net.InetAddressimport java.net.NetworkInterface//Function to get System MACfun getSystemMac(): String? {return try {val OSName System.getProp…

帶分頁功能的SSH整合,DAO層經典封裝

任何一個封裝講究的是,使用,多狀態。Action:任何一個Action繼承分頁有關參數類PageManage,自然考慮的到分頁效果,我們必須定義下幾個分頁的參數。并根據這個參數進行查值。然后在繼承ServiceManage,Service…

在windows phone Mango中使用原生代碼開發程序

本文不討論創建可執行的exe程序,主要想說明怎么在silverlight程序里面調用由原生代碼所編寫的DLL(C / ARM). 原生代碼可以調用更多的API,但是這并不是說你就能隨意獲得那些你沒有權限的資源,比如,你可以使用CopyFile這個API,但是如果你試圖把文件Copy到\Windows文件夾,就會得到…

leetcode 198. 打家劫舍 思考分析

目錄1、題目2、求解思路3、代碼1、題目 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動…

找不到Windows照片查看器解決方法

桌面創建一個txt文本 復制這些命令,之后將后綴改為.reg,右擊管理員身份運行即可 Windows Registry Editor Version 5.00 ; Change Extensions File Type [HKEY_CURRENT_USER\Software\Classes\.jpg] "PhotoViewer.FileAssoc.Tiff" ; Change E…

數字拆分為斐波那契數列_檢查數字是否為斐波那契

數字拆分為斐波那契數列Description: 描述: We are often used to generate Fibonacci numbers. But in this article, we are going to learn about how to search Fibonacci numbers in an array? 我們經常被用來產生斐波那契數。 但是在本文中,我們…