means聚类进行图像识别色彩压缩?
1、创建一个python文件,并导入库文件:
import argparse
import numpy as np
from scipy import misc
import matplotlib.pyplot as plt
from sklearn import cluster
2、创建一个函数,用于解析输入参数。我们需要把图片和每个像素被压缩的 比特数传进去作为输入参数:
def build_arg_parser():
parser = argparse.ArgumentParser(description = 'Compress the
input image \using clustering')
parser.add_argument("--input-file",dest="input_file",required =True,help="Input image")
parser.add_argument("--num-bits",dest="num_bits",required =False,type=int,help="Number of bits
used to repressent each pixel")
return parser
下图为pycharm编译器配置加载文件的操作
3、创建一个函数,用来压缩输入图片:
def compress_image(img,num_clusters):
# 将输入的图片转换成(样本量,特征量)数组,以运行k-means聚类算法
X = img.reshape((-1,1))
kmeans = cluster.KMeans(n_clusters=num_clusters,n_init=4,
random_state=5)
kmeans.fit(X)
centroids = kmeans.cluster_centers_.squeeze()
labels = kmeans.labels_
# 为每个数据配置离它最近的中心点,并转变为图片的形状
input_image_compressed = np.choose(labels,centroids).reshape(
img.shape)
retrun input_image_compressed
4、绘制图像查看压缩算法对图片质量的影响:
def plot_image(img,title):
vmin = img.min()
vmax = img.max()
plt.figure()
plt.title(title)
plt.imshow(img,cmap=plt.cm.get_cmap('gray'),vmin=vmin,
vmax=vmax)
5、定义主函数,可以把输入参数传进去并进行处理,然后提取输出图片:
if __name__=='__main__':
args = build_arg_parser().parser_args()
input_file = args.input_file
num_bits= args.num_bits
if not 1<=num_bits<=8:
raise TypeError('Number of bits should be between 1 and 8')
num_clusters = no.power(2,num_bits)
# 打印压缩率
compression_rate = round(100*(8.0-args.num_bits)/8.0,2)
print("\nThe size of the image will be reduced by a factor of",
8.0/args.num_bits)
print("\nCompression rate = "+str(compression_rate)+"%")
6、加载输入图片
input_image = misc.imread(input_file,True).astype(np.uint8)
plot_image(input_image,'Original image')
7、用输入参数压缩图片
input_image_compressed = compress_image(input_image,
num_clusters)
plot_image(input_image_compressed,'Compressed_image;
compression rate = ' + str(compression_rate) + '%')
plt.show()
8、在命令行工具中运行下面的命令,针对不同的压缩比特数,显示图像:
每个像素的压缩比特数将为4:
--input-file flower_image.jpg --num-bits 4
每个像素的压缩比特数将为2:
--input-file flower_image.jpg --num-bits 2
每个像素的压缩比特数将为1:
--input-file flower_image.jpg --num-bits 1
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有