- 締切済み
画像処理のアルゴリズム
多数のスキャンした画像を画像処理ソフトで画質調整を行うことをちょくちょくやっています。 枚数が多いため(1回で数百枚単位)、画像処理ソフトと自動運転ソフトを組み合わせてバッチ処理をやらせていますが、この間PCが使えません。 ですのでいっそ、自分でソフトを作ってしまおうと考えたのですが、画質調整のためのアルゴリズムがわかりません。 手順としてはスキャン画像に対し、グレイスケール化->レベル補正->シャープネス->減色です。 このうち、レベル補正だけが、手ごろなアルゴリズムの解説が見つからず困っています。 どこかにこうした画像処理のアルゴリズムを解説しているWebはないでしょうか。 VBとかCのサンプルがあれば最高ですが、なくてもいいです。贅沢はいいません。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- pochi_won
- ベストアンサー率38% (15/39)
>サンプルも書いていただいてありがたいのですが >これは輝度分布の抽出でしょうか。 >知りたいのはこのあとの補正アルゴリズムです。 だったら、そう書いてください。 例えるなら輝度分布の下限n%の範囲の画素に任意の値を引く、あるいは係数を掛ける、あるいは定数に置き換えるをすれば、貴殿が言う暗いところは●●にできます。 リニアにやりたいなら、変換テーブルを作る、あるいは式を用意すればできます。 貴殿クラスなら自在にプログラムできると思いますよ。
- pochi_won
- ベストアンサー率38% (15/39)
なんか難しいことをしてますね。^^; ファイルサイズを小さくするのか、輪郭抽出するような内容でしょうか・・・ 参考にならないかも知れませんが、 Private Sub Command3_Click() Dim i As Integer Dim a As Double Dim aR As Double Dim aG As Double Dim aB As Double Dim RR(256) As Integer Dim GG(256) As Integer Dim BB(256) As Integer Dim X As Integer Dim Y As Integer Picture1.Picture = LoadPicture("c:\test.bmp") For X = 1 To 50 For Y = 1 To 50 a = Picture1.Point(X, Y) Text1.Text = a aB = Int(a / 65536) aG = Int((a - aB * (65536)) / 256) aR = a - aB * (65536) - aG * 256 For i = 0 To 255 If i = aR Then RR(i) = RR(i) + 1 Next Next Next End Sub で、 RR(n)のnは輝度に相当するので、これで画像のレベルは判ると思います。 グレイスケール化しているようですので、RGB分離は不要でしたね。 このあと、輝度のmax-minを調べたり、シフトさせる量を決めたりして補正すれば・・・ 外してたらすみません。
お礼
サンプルも書いていただいてありがたいのですが、これは輝度分布の抽出でしょうか。 知りたいのはこのあとの補正アルゴリズムです。 暗い部分は暗く、明るい部分は明るくなどしたり、コントラストをきょうちょうしたりなどです。
お礼
ありがとうございます。やってみます。