画像メモリ概要
画像メモリ概要
2024年1月28初講(初稿)
この画像処理ライブラリで扱う画像と画像メモリーの関係を
解説します!
1.象限
二次元には四つの象限が存在する(四分儀と呼ばれる)の
内で第Ⅳ象限として扱います!
2.例として「1024×1024」画像を使用
相対アドレス(0)からの半導体メモリーとその上に
画像メモリを配置した事を示します!
図中でも文字説明したように「緑●」は、半導体メモリーの
一部を画像メモリーとして割り当てた時の「相対アドレス」
としての原点で「アドレス=0【十進法数字】=
0h【ヘキサデシマル表記】」と成ります!
そして画像メモリとして「画像座標」は(0,0)と
第Ⅳ象限の原点として扱い、視覚的には左上端を意味
します!
「オレンジ■」は、「相対アドレス」としては、
「アドレス=1023【十進法数字】=3FFh【
ヘキサデシマル表記】」と成ります!画像メモリとして
「画像座標」は(1023,0)として扱い、視覚的には
右上端を意味します!
「赤●」は、「相対アドレス」としては、
「アドレス=1024【十進法数字】=400h【
ヘキサデシマル表記】」と成ります!画像メモリとして
「画像座標」は(0,1)として扱い、視覚的には左端で
縦に原点より1画素下です!
「青■」は、「相対アドレス」としては、
「アドレス=2047【十進法数字】=7FFh【
ヘキサデシマル表記】」と成ります!画像メモリとして
「画像座標」は(1023,1)として扱い、視覚的には
右端で縦に原点より1画素下です!
「黄色●」は、「相対アドレス」としては、
「アドレス=1047552【十進法数字】=FFC00h
【ヘキサデシマル表記】」と成ります!
画像メモリとして「画像座標」は(0,1023)として
扱い、視覚的には左下端です!
「青■」は、「相対アドレス」としては、
「アドレス=1048575【十進法数字】=FFFFFh
【ヘキサデシマル表記】」と成ります!
画像メモリとして「画像座標」は(1023,1023)と
して扱い、視覚的には右下端です!
☆注意☆ここで気付いて欲しいのは、画像の右端≪例えば、
右上端で画像座標(1023,0)でアドレス=0≫の
アドレスを一つ進めるとアドレスが「1024」で
1画素下の画像座標(0,1)に成ると半導体メモリー上は
連続しているが、視覚的には右端の次が左端に成る事です!
3.画素画像
格子状の表現で画素で構成された画像の概要を示しました!
1画素が、上記では一つの升目に成ります!
そして、第Ⅳ象限の座標表現的にはXY座標の左上端が
原点(0,0)と成ります!
更にサイズとしてX座標方向のサイズを水平幅(H=英語の
Horizontal)、
Y座標方向のサイズを垂直幅(V=英語のvertical)と私が
作成し、今回解説する画像処理ライブラリでは用語として
使用します!
何故、幾何学的には一般的で無い水平(H)・垂直(V)を
使用しているかの理由は、元々私が所属していた画像処理装
置メーカーADS社の画像処理装置が、アナログ・
ビデオカメラの映像信号をキャプチャーし画像メモリーに
デジタル・データとして取り込む装置から始まったので
アナログ映像信号の用語≪水平方向・垂直方向≫から来てい
ます!
元々ディスクリュート部品で構成されたADS社オリジナル
な電子回路の制御を装置内蔵のCPU(最初は、Z80)向
けに作った「ハードウェア制御」ソースコードのプログラミ
ングが元に成っているからとソースコードを昭和の時代から
作成した歴史的経緯からです!
4.部分画像
緑色枠で囲った所≪上図では、元の座標から、
部分画像始点(10,11)≫から始まり部分画像の
水平幅○h=14画素、垂直幅○v=10画素のサイズの
画像で、座標を一つ下に移動する為に半導体メモリーの
アドレス(C言語的には、ポインタ)を移行する時の増分と
しての増加幅は、元の画像の増加幅
(inc:インクリメント 【increment】の省略
「inc」で表す)で図で判る様に元の画像の水平幅h=
32画素で増加幅inc=32画素で同じ値で有る事は、
理解して頂いていると思いますが、部分画像を扱う場合も
増加幅inc=32画素で同じ値です!
★垂直方向に移動する時は、元の画像の垂直幅と同じと言う
事を理解して頂きたい!★
5.画像処理ライブラリでの扱い方
5-1.この構造の画像を扱うデータ型
データ型としては、解説『解説クラスTypeArray』
で解説して行くクラス定義
「class TypeArray{・・中身・・}」を解説する事で行いま
す!
ところで画像を扱う型名なら「Array」では無く「Image」だ
ろうと思われる読者様が多く居ると予想されるので説明しま
す?!
「struct TypeImage{・・中身・・}」と記述する構造体が、
元々のADS社画像処理装置用の制御プログラムと言う画像
処理ライブラリの元々のソースコードに存在しましたが、
この構造体struct TypeImage{}は、ADS社画像処理装置の
ディスクリュート回路で構成された画像同期信号にリアル
タイムに同期して動作させるハードウェア操作の為の情報≪
画像の同期信号で動作させる専用ハード装置への設定アドレ
ス値とか、各種デバイスへの同期動作時のオン/オフ信号
データ≫を記述するのに使用して後にソフトウェアでハード
装置をエミュレートする方式に変える途中でCPUで処理す
るので「配列array」を意味する単語にしたからです!
それを昭和から令和まで引き続き使用しているからです!
5-2.画像を扱い画像処理を行う
そしてクラスTypeArrayで定義した画像型を
クラス「CopyClear」等、クラス「Support」を継承して行う
クラスで使用して居ます!
クラスTypeArrayで定義した画像を操作する事が
画像処理です!