Konversi gambar ke rgb matrix python

Seringkali, Anda akan memiliki gambar yang ingin Anda ekstrak datanya. Ini kemungkinan besar akan menjadi sesuatu yang sangat kecil, tetapi entah bagaimana akan berubah menjadi bagian terpenting dari teka-teki yang Anda BUTUHKAN SEKARANG. Oke… mungkin itu hanya saya. Terkadang menyenangkan bisa mengekstrak data dari gambar yang Anda temukan di artikel jurnal untuk mereplikasi hasilnya

Di sini, saya akan melalui langkah-langkah yang saya ambil untuk mengonversi gambar menjadi format RGB [menggunakan Python - tentu saja] dan mengubahnya menjadi array data. Dari sana menjadi menarik. Banyak gambar yang saya temukan telah diinterpolasi dari data yang relatif jarang. Anda tidak membutuhkan semua data itu. Ini membuang-buang ruang dan Anda lebih baik memangkas bit yang sebenarnya tidak Anda perlukan - terutama jika Anda ingin melakukan beberapa pemrosesan pasca spasial

Inilah langkah-langkah utamanya

  1. Impor gambar menggunakan modul scipy.ndimage
  2. Siapkan peta warna menggunakan matplotlib.colors
  3. Kueri peta warna dengan banyak angka di sepanjang interval yang telah Anda tentukan dan simpan di KDTree
  4. Permintaan KDTree menggunakan larik $m \times n \times 3$ ndimage RGB. Hasilnya adalah larik data $m \times n$
  5. Kurangi data dengan mengambil turunan spasial pertama menggunakan numpy.diff dan menghapus titik di mana $. \nabla. > 0$
  6. Gunakan sklearn.DBScan_ dari modul scikit-learn untuk mengelompokkan data dan menghapus lebih banyak data yang tidak perlu
  7. Minumlah bir

Pada akhirnya saya memiliki kelas Python yang berisi semua langkah ini digulung menjadi satu potongan kode yang bagus untuk Anda gunakan pada proyek Anda sendiri, jika menurut Anda ini berguna

Siap?

Muat gambar

from scipy import ndimage
import numpy as np
import matplotlib.pyplot as plt

im = ndimage.read["filename.jpg"] # flatten=True for b&w
plt.imshow[im]
plt.show[]

Itu terlihat bagus, im adalah array $m \times n \times 3$ - i. e. 3 set baris $m$, kolom $n$, yang sesuai dengan jumlah piksel, untuk setiap saluran RGB. Sekarang mari buat peta warna dan masukkan semuanya ke dalam KDTree untuk pencarian tetangga terdekat. Serius, KDTrees luar biasa. srsly

from scipy.spatial import cKDTree
from matplotlib import colors as mcolors

def scalarmap[cmap, vmin, vmax]:
    """ Create a matplotlib scalarmap object from colour stretch """
    cNorm = mcolors.Normalize[vmin=vmin, vmax=vmax]
    return plt.cm.ScalarMappable[norm=cNorm, cmap=cmap]
    
scalarMap = scalarmap[plt.get_cmap["jet_r"], 0.0, 0.7]
value_array = np.linspace[0,0.7,10000]
color_array = np.asarray[scalarMap.to_rgba[value_array]]
color_array *= 255 # rescale

tree = cKDTree[color_array[:,:-1]] # Last column is alpha
d, index = tree.query[im]
data = value_array[index]
_

Kami menskalakan peta warna antara 0. 0 dan 0. 7, yang sesuai dengan luasnya gambar. Opsional, kita bisa menutupi piksel yang agak jauh, $d$, dari peta warna. e. g.

from scipy.spatial import cKDTree
from matplotlib import colors as mcolors

def scalarmap[cmap, vmin, vmax]:
    """ Create a matplotlib scalarmap object from colour stretch """
    cNorm = mcolors.Normalize[vmin=vmin, vmax=vmax]
    return plt.cm.ScalarMappable[norm=cNorm, cmap=cmap]
    
scalarMap = scalarmap[plt.get_cmap["jet_r"], 0.0, 0.7]
value_array = np.linspace[0,0.7,10000]
color_array = np.asarray[scalarMap.to_rgba[value_array]]
color_array *= 255 # rescale

tree = cKDTree[color_array[:,:-1]] # Last column is alpha
d, index = tree.query[im]
data = value_array[index]
_0. Ini akan menutupi teks hitam dan latar belakang putih pada gambar

Saya tidak tahu cara yang lebih baik untuk memetakan larik warna RGB ke data daripada ke entri kueri di KDTree. Jika ya, sebutkan di komentar di bawah

Pengurangan data

Sekarang setelah kami mengubah gambar menjadi array, kami dapat mengurangi data sehingga hanya bit penting yang tersisa. Pertama, kita ambil turunan spasial pertama dan temukan di mana $\nabla = 0$

dx = np.abs[np.diff[data[:,:-1], axis=0]]
dy = np.abs[np.diff[data[:-1,:], axis=1]]
dxdy = [dx + dy]/2.0

mask = dxy 

Bài mới nhất

Chủ Đề