紙媒体で知識や経験を管理すると無くなりがちなのでブログで管理することにしました.
      殆どの記事は自分自身のためだけに書いているため,他人に見せる前提の内容, 文章ではありません.
      また, ブログのコメント欄を解放していたらbotからの迷惑行為を受けたため現在コメント欄は解放しておりません.

【Python】【画像処理】画像の画素毎のGBR値を3Dグラフにプロットする

#coding:utf-8
"""
$jupyter notebook
$for python3.x
"""
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from PIL import Image
from PIL import ImageDraw
from random import randint
from os.path import exists
from os import mkdir
from math import fabs
from random import random
from copy import deepcopy
from math import log
from math import sqrt
import cv2
import numpy as np
from collections import namedtuple
import csv

def main():
    #特徴ベクトルの型の定義
    vec = namedtuple('vec_info',['GBR','coordinate'])

    #画像を読み込み
    img = cv2.imread("sample.png")
    
    #画像のサイズ
    height = img.shape[0]
    width  = img.shape[1]

    #特徴ベクトルの総数(画素数)
    num_vec = height*width

    #各画素の特徴ベクトルを取得する
    vectors = []
    for y in range(height):
        for x in range(width):
            BGR = img[y,x]
            v = vec(BGR,(y,x))
            vectors.append(v)
    vectors = np.array(vectors)
    feature_vectors = vectors[:,0]
    #feature_vectors = np.reshape(feature_vectors,(1,len(feature_vectors)))
    tmp = []
    for vec in feature_vectors:
        tmp.append(vec)
    feature_vectors = np.array(list(tmp))

    #特徴空間の点をプロット
    feature_vectors_G = feature_vectors[:,0]
    feature_vectors_B = feature_vectors[:,1]
    feature_vectors_R = feature_vectors[:,2]

    #初期プロットの表示
    fig = plt.figure()
    ax = Axes3D(fig)
    ax.scatter3D(feature_vectors_G,feature_vectors_B,feature_vectors_R)
    plt.show()

if __name__ == '__main__':
    main()

ライブラリは適当
グラフを動かせるようにしたい.
f:id:umashika5555:20170501132337p:plain
f:id:umashika5555:20170501135633p:plainf:id:umashika5555:20170501135631p:plainf:id:umashika5555:20170501135628p:plain


【追記】
デフォルトで回転できるようになってた.