HOME | Raspberry Pi | 時事 | ビジネス書籍紹介 | 2022-12-01 (Thu) Today's Access : 105 Total : 559780. Since 10 Sep. 2019

減色処理 グレースケール・二値化
2022.05.04

YouTube でも紹介しています。画像をクリックすると再生できます。

今回はカラー画像を、まずグレースケールに変換し、次にフロイト-シュタインバーグ・ディザリングを適用した二値化処理を行います。
ここでは、下記の3通りのグレースケール化を実施してみました。

1.RGB平均値によるグレースケール化

2.ガンマ補正を考慮した、RGB加重平均によるグレースケール化

3.ガンマ補正なしの、RGB加重平均によるグレースケール化


■1.RGB平均値によるグレースケール化と二値化
画像を色味のない明るさの度合い(Luminance、輝度)だけで表現するのがグレースケールです。
RGB平均値によるグレースケール化
R,G,B は3つ同じ値で加色混合すると無彩色(黒~グレー~白)になるよう輝度がバランス調整されています。
luminance = (R + G + B) / 3.0;
R = luminance;
G = luminance;
B = luminance;
これにより、カラー画像をグレースケールすると左の画像が得られます。

これにフロイト-シュタインバーグ・ディザリングを適用した二値化処理を行います。
●フロイド-スタインバーグ・ディザリング
フロイド-スタインバーグ・ディザリング(Floyd–Steinberg dithering)は画像用ディザリングアルゴリズムであり、1976年、ロバート・フロイドと Louis Steinberg が発表した。画像操作関係のソフトウェアで広く用いられており、例えば最大256色までしか使えないGIF形式への変換の際に使われています。
各ピクセルの量子化誤差をそれに隣接するピクセル群に拡散させることでディザリングを実現するアルゴリズムです。 隣接ピクセルへの誤差の分配は次のようになります。

星印 (*) が現在見ているピクセルを表しています。
このアルゴリズムでは、画像を左から右、上から下にスキャンし、ピクセルの値を1つずつ量子化していきます。 毎回の量子化誤差は隣接するピクセル群に分配されますが、既に量子化が済んだピクセルの値は変更しません。 これにより、あるピクセルの値が量子化によって切り下げられたら、次のピクセルにその誤差が反映されて切り上げられることになり、全体として量子化誤差がゼロに近づくことになります。
Ref.フロイド-スタインバーグ・ディザリング(ウィキペディア)
Ref.誤差拡散法
Ref.Image Dithering: Eleven Algorithms and Source Code

●二値化
二値化において、誤差の基準になるのが、しきい値です。 このしきい値を上回る輝度をもつピクセルを白に、しきい値以下のピクセルを黒にします。 しきい値と輝度の差を誤差として拡散させていきます。

この処理の部分の抜粋です。
typedef struct {
	uint8_t  R;
	uint8_t  G;
	uint8_t  B;
} PIXEL_INFO;

void FloydSteinbergBinarize(PIXEL_INFO *rgb, uint32_t height, uint32_t width) {
	uint32_t   x, y, pos;
	const uint8_t threshold = 127;
	uint8_t    bw, luminance;
	int8_t     *error, e;
	PIXEL_INFO *imgpt;
	error = (int8_t *)malloc(width * height);
	memset(error,0x00,width * height);

	imgpt = rgb;
	for (y=0; y < height; y++) {
		for (x=0; x < width; x++) {
			pos = width * y + x;
			luminance = imgpt->R + error[pos];
			if (threshold < luminance) {
				bw = 255;
			} else {
				bw = 0;
			}
			e = luminance - bw;

			if ((x+1)<width) {
				pos = width * y + (x + 1);
				error[pos] += (uint8_t)(e * 7/16);
			}
			if ( ((x-1)>=0) && ((y+1)<height) ) {
				pos = width * (y + 1) + (x - 1);
				error[pos] += (uint8_t)(e * 3/16);
			}
			if ((y+1)<height) {
				pos = width * (y + 1) + x;
				error[pos] += (uint8_t)(e * 5/16);
			}
			if ( ((x+1)<width) && ((y+1)<height) ) {
				pos = width * (y + 1) + (x + 1);
				error[pos] += (uint8_t)(e * 1/16);
			}
			imgpt->G = bw;
			imgpt++;
		}
	}
	free(error);

	imgpt = rgb;
	for (y=0; y < height; y++) {
		for (x=0; x < width; x++) {
			imgpt->R = imgpt->G;
			imgpt->B = imgpt->G;
			imgpt++;
		}
	}
}

void shiftBit(IMAGE_INFO *img, uint8_t sR, uint8_t sG, uint8_t sB) {

	int        x,y;
	PIXEL_INFO *imgpt;

	imgpt = img->RGBs;
	for(y=0; y < img->Height; y++){
		for(x=0; x < img->Width; x++){
			imgpt->B = imgpt->B >> sB;
			imgpt->G = imgpt->G >> sG;
			imgpt->R = imgpt->R >> sR;
			imgpt++;
		}
	}
}
誤差というのは、グレースケール化した輝度の値を、しきい値で二値化したときの、輝度と白あるいは黒との差分です。 この誤差を隣接するピクセルに対して、一定の拡散比率で加算していきます。 これを繰り返すことでディザリングを行います。

グレースケール画像に、フロイト-シュタインバーグ・ディザリングを適用した二値化処理を行うと下記の画像が得られます。


■2.ガンマ補正を考慮した、RGB加重平均によるグレースケール化と二値化
「色」を扱うディスプレイ、プリンタ、スキャナなどの各機器には固有の発色特性があり、 入力された色情報をそのまま出力できません。この入出力における発色特性のことを「ガンマ特性」といいます。 通常、ディスプレイ(CRT)のガンマ特性は中間調が暗くなる傾向にあります。 そこで事前に中間調を明るくしたデータ信号に加工して、「入力:出力」のバランスを「1:1」に近づけることで、色情報を正確にやり取りできるようにします。 ディスプレイ側のガンマ特性に合わせて、色情報を調整して帳尻を合わせる仕組みを「ガンマ補正」と呼びます。

Ref.EIZO 第7回 "曲線美"が色再現性の決め手になる?

ブラウン管のガンマ特性は、sRGBのガンマカーブ、gamma=2.2で近似されます。
y = x2.2 (x, y は 0~1 に正規化)

※sRGBは、1998年に国際電気標準会議 IECが策定した色空間の国際基準です。ソフト、ディスプレイ、プリンタ、デジタルカメラなどがsRGB対応であれば、撮影した写真を画面で見た色で印刷できます。
補足すると、昔のブラウン管テレビが陰極管の物理特性により入力信号の電圧に対して出力する輝度が比例しなかった(陰極管特性)ので、送信側で補正していました。 液晶ディスプレイの輝度出力にガンマ特性は存在しませんが、互換性が考慮されています。

このガンマ特性を相殺するために、元画像には逆ガンマ補正が掛かっています。
y = x(1/2.2) (x, y は 0~1 に正規化)

グレースケール化する前に、色情報に施されているガンマ補正を外して、輝度と色情報を線形化(linear-RGB 化)させます。
y = x2.2 (x, y は 0~1 に正規化)

void gammaCorrect(PIXEL_INFO *rgb, uint32_t height, uint32_t width, float gamma) {

	uint32_t   x, y;
	float      Rval, Gval, Bval;
	for(y=0; y < height; y++){
		for(x=0; x < width; x++){
			Rval = (float)rgb->R / 255;
			Gval = (float)rgb->G / 255;
			Bval = (float)rgb->B / 255;
			rgb->R = (uint8_t)(pow(Rval,gamma) * 255);
			rgb->G = (uint8_t)(pow(Gval,gamma) * 255);
			rgb->B = (uint8_t)(pow(Bval,gamma) * 255);
			rgb++;
		}
	}
}

gammaCorrect(img->RGBs, img->Height, img->Width, 2.2);


元画像とガンマ補正後の画像を比較してみます。 輝度とRGB値が線形化され、明るく補正されていた元画像の中間調の輝度が低くなっています。

BT.709系画像処理におけるグレースケール化
デジタル放送やsRGBをグレースケール化する際には、BT.709の加重平均が用いられます。 BT.709は、高精細テレビジョン放送のエンコードと信号特性について制定された標準規格です。
luminance = (R * 0.2126) + (G * 0.7152) + (B * 0.0722)



先程と同様に、フロイト-シュタインバーグ・ディザリングを適用した二値化処理を行います。


ちなみに、グレースケール化した画像を二値化せずに、逆ガンマ補正するとこんな感じになります。
y = x(1/2.2) (x, y は 0~1 に正規化)



■3.ガンマ補正なしのRGB加重平均によるグレースケール化
SDTV規格 BT.601では、ガンマ補正が施されたまま R,G,B を加重平均します。OpenCVやPILのGrayscale化にはこの加重平均が使われているようです。
luminancee = (R * 0.299) + (G * 0.587) + (B * 0.114)


二値化します。


■補足:Weber–Fechner(ヴェーバー‐フェヒナー)の法則
人間の感覚は刺激の物理強度に線形ではなく、その対数に適応していて、Weber–Fechner(ヴェーバー‐フェヒナー)の法則として知られています。
人の目は低輝度の変化に敏感であり、高輝度には鈍感です。そのため、被写体を撮影画像ファイル等のRGB値は、通常ガンマ補正という処理が行われ、視覚的に魅力的な画像を作り上げています。

■参考文献
ガンマ補正のうんちく
画像の誤差拡散による2値化 ~ガンマ値考慮Ver.+~

 Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
2020.05.28 画像処理 第1回トイカメラ
2020.06.09 画像処理 第2回カメラモジュール制御
2020.06.28 画像処理 第3回リアルタイムクロック
2020.07.08 画像処理 第4回電源回路
2020.10.27 画像処理 第5回自作デジカメ初号機完成
2020.11.10 画像処理 第6回ドーナツデジカメ
2021.05.16 画像処理・基本変換
2021.06.26 Unexpected Maker TinyS2
2021.07.10 M5Stackアプリの移植
2021.09.18 FeatherS2 ESP32-S2
2022.04.04 減色処理 雑談
2022.04.18 減色処理 均等量子化法とK平均法
2022.05.04 減色処理 グレースケール・二値化
2022.05.18 減色処理 二値化画像印刷
2022.08.12 京セラ feelH” Treva カメラ
2022.10.15 デジカメ弐号機 1.仕様変更
2022.10.21 デジカメ弐号機 2.SDカードとRTC
2022.11.04 デジカメ弐号機 3.SPI DISPLAY
2022.11.18 デジカメ弐号機 4.ストリーミング


Interface 2022年12月号
◎実用レベルのデータ・サーバを個人で作れる時代 ☆特集 [AWS/ブロックチェーン/Docker]IoTデータ・サーバ入門
◎モニタリングはもちろん異常検知や画像認識,外部装置駆動まで!


日経Linux 2022年11月号
【特集1】「Ubuntu 22.04 LTS」リリースの今こそ! Windowsを捨てない!Linuxへの引っ越し術
【特集2】話題のChromeOS Flexなど8種を厳選! 軽量Linux TPO別 選択&活用術
【特集3】 Linuxで旧型PCを復活! ファンレスの静音・小型PC「Ubuntu Server 22.04 LTS」でオンラインストレージサーバー化
【特集4】 個人なら無料で使える! Red Hat Enterprise Linux 9を触ってみよう


トランジスタ技術 2022年11月号
★特集◎科学の魅力をとことん追求!計測,パワー応用技術 ☆実験サイエンス!超音波×エレキの世界


ラズパイマガジン2022年秋号
特集:5大人気ボード 電子工作超入門
「半導体不足で在庫が不足し、電子工作のボードがなかなか買えない…」。そんな今にふさわしい特集を企画しました。5種の人気ボードにすべて対応した電子工作の入門特集です。「GPIO」や「I2C」を使った電子パーツの制御方法は、どのボードでも同じです。手に入れられたボードを使って、今こそ電子工作を始めましょう。

地方で稼ぐ! ITエンジニアのすすめ
学歴、理系の知識、専門スキル……全部なくてもITエンジニアになれる! 地方でも高収入でやりがいをもって働ける!ITエンジニアの魅力を一挙大公開

ハッカーの学校 IoTハッキングの教科書
生活にとけこみ、家電機器を便利にするIoT技術。 Webカメラなど、便利の裏側に潜むセキュリティの危険性をハッキングで検証。 専門家がパケットキャプチャからハードウェアハッキングまで、その攻撃と防御を徹底解説。 本書は2018年7月に刊行された「ハッカーの学校IoTハッキングの教科書」に一部修正を加えた第2版です。

攻撃手法を学んで防御せよ! 押さえておくべきIoTハッキング
本書は、経済産業省から2021年4月にリリースされた、IoTセキュリティを対象とした『機器のサイバーセキュリティ確保のためのセキュリティ検証の手引き』の『別冊2 機器メーカに向けた脅威分析及びセキュリティ検証の解説書』をもとに、IoT機器の開発者や品質保証の担当者が、攻撃者の視点に立ってセキュリティ検証を実践するための手法を、事例とともに詳細に解説しました。

ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS… 全WEB媒体で効果バツグン! カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術

プログラマーは世界をどう見ているのか 西村博之著
イーロン・マスク(テスラ)、ジェフ・べゾス(Amazon)、ラリー・ペイジ(Google)…etc. 世界のトップはなぜプログラマーなのか?

Arduino Nano 33 IoT


サンハヤト モジュール MM-TXS01


ニーア オートマタ PLAY ARTS改 <ヨルハ 二号 B型 DX版> PVC製 塗装済み可動フィギュア
「NieR:Automata」より、ヨルハ二号B型こと2BがPLAY ARTS改に新たに登場! 高級感の感じられるコスチュームや髪の質感、洗練されたボディバランス、細かなデティールに至るまでこだわり抜かれた逸品。 DX版には通常版のラインナップに加え2Bの随行支援ユニット ポッド042などをはじめ“純白の美しい太刀"白の約定やエフェクトパーツ、自爆モードを再現できる換装用ボディパーツ、シーンに合わせて変えられる顔パーツ2種も付属する豪華な仕様に。 作中のあらゆるシーンを再現することが可能なファン必見の一品となっている。

DIPスイッチで動作電圧を3.3Vと5Vに切り替えられるUNO互換ボード
KEYESTUDIO Plus Board for Arduino UNO R3 with Type-C USB Cable, 3.3V 5V 1.5A Output Current, More Powerful Controller Board USB-シリアルチップ:CP2102 / 動作電圧:5Vまたは3.3V(DIPスイッチ制御)/ 外部電源:DC 6-15V(9V推奨)/ デジタルI / Oピン:14(D0〜D13)/ PWMチャネル:6(D3 D5 D6 D9 D10 D11)/ アナログ入力チャネル(ADC):8(A0-A7)/ DC出力機能の各I / Oポート:20 mA / 3.3Vポートの出力能力:50 mA / フラッシュメモリ:32 KB(うち0.5 KBはブートローダーによって使用されます)/ SRAM:2 KB(ATMEGA328P-AU)/ EEPROM:1 KB(ATMEGA328P-AU)/ クロック速度:16MHz / オンボードLEDピン:D13

Newtonライト2.0 ベイズ統計
ベイズ統計は,結果から原因を推定する統計学です。AIや医療などの幅広い分野で応用されています。その基礎となるのは18世紀に考えだされた「ベイズの定理」です。 この本では,ベイズ統計学のきほんをやさしく紹介していきます。

白光(HAKKO) ダイヤル式温度制御はんだ吸取器 ハンディタイプ FR301-81


サンハヤト TTW-203 テストワイヤ
ブレッドボードとスルーホール間の接続に便利なワイヤですブレッドボード用のオスピンと基板のスルーホール用のバネ性のある端子を組み合わせたテストワイヤです

無水エタノールP 500mlx2個パック(掃除)


ケイバ(KEIBA) マイクロニッパー MN-A04


熱収縮チューブφ1.5
印字無しで綺麗☆ シュリンクチューブ 絶縁チューブ 防水 高難燃性 収縮チューブ (2m, ブラック(黒))


サンハヤト SAD-101 ニューブレッドボード


白光(HAKKO) HEXSOL 巻はんだ 精密プリント基板用 150g FS402-02


【Amazon.co.jp限定】エーモン 電工ペンチ 全長約255mm (1452)


[Amazon限定ブランド]【指定第2類医薬品】PHARMA CHOICE 解熱鎮痛薬 解熱鎮痛錠IP 100錠


Copyright © 2011-2022 Sarako Tsukiyono All rights reserved®.