画像のヒストグラムを表示する Chart.js JavaScript canvas
2019-05-265 min read
目次
概要
画像のヒストグラムをJavaScriptで算出してグラフとして表示してみます。
ヒストグラム算出のサンプルコード
ヒストグラムの表示にChart.jsを使っています。
インストール
npmを使っている場合は次のようにinstallします。
npm install chart.js
こちらを参考にしました。
https://www.chartjs.org/docs/latest/getting-started/installation.html
ヒストグラム表示クラス
import Chart from 'chart.js';
export default class Histogram {
/**
* ヒストグラムを描画する
* @param {Object} canvas
* @param {Object} data
*/
static renderHistogram(canvas, data) {
let labels = new Array(data.length).fill('');
new Chart(canvas, {
type: 'bar',
data: {
labels,
datasets: [
{
label: '画素値',
data,
backgroundColor: 'rgba(80,80,80,0.5)',
},
],
},
options: {
title: {
display: true,
text: 'Histogram',
},
scales: {
yAxes: [{
ticks: {
suggestedMin: 0,
},
}],
},
animation: {
duration: 0,
},
},
});
}
}
ヒストグラム算出
長さが255の配列を0で初期化し、各ピクセルのベクトルの数をカウントしています。 また、算出の前にrgbからグレイスケール画像に変換しています。
import Histogram
const grayscale = (r, g, b) => 0.2126 * r + 0.7152 * g + 0.0722 * b
// 略
let pixelValues = new Array(255).fill(0)
for (let i = 0; i < src.data.length; i += 4) {
let gray = grayscale(src.data[i], src.data[i + 1], src.data[i + 2])
gary = Math.floor(gray)
pixelValues[gray]++
}
Histogram.renderHistogram(canvas, pixelValues)
デモ
こちらからデモを試せます。
https://s-yoshiki.github.io/Gasyori100knockJS/#/questions/ans20/iframe
出力結果
次のように出力されます。
参考
Recommends
New Posts
Hot posts!
Date
Tags
(110)
(54)
(54)
(47)
(45)
(36)
(30)
(29)
(24)
(24)
(22)
(21)
(21)
(20)
(19)
(17)
(16)
(16)
(15)
(14)
(12)
(12)
(12)
(12)
(12)
(12)
(11)
(10)
(10)
(10)
(10)
(10)
(9)
(9)
(8)
(8)
(8)
(8)
(7)
(7)
(6)
(6)
(6)
(6)
(6)
(5)
(5)
(5)
(5)
(4)
Author