回覆列表
  • 1 # 邵浩博士

    影象識別和色彩壓縮是兩個不同的任務。就影象識別而言,“識別”本身應該是一個分類任務,需要建立影象和標籤的對應訓練集合,然後用機器學習演算法(或者流行的深度學習方法)建立模型,並對影象進行識別。而聚類方法僅能對無標籤資料做一些初步的聚類。不知道你是否能把問題更具體描述下。

  • 2 # 歷歷萬世

    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

  • 中秋節和大豐收的關聯?
  • 什麼是情感缺失?