楽譜アーカイブアプリ - その13 グレー変換 [考え中の問題]
こないだからやってる楽譜をスキャナで読んでPDFにするためのアプリ。OpenCVで遊んでしまって何やってるか忘れそうになるけど、どこまで言ったか思い出した。今日はディテールの見栄えを左右するラティテュード補正について。
これはOpenCVでもvImageでもヒストグラム処理というのをどちらも持っていて、それを使えばできるはず。これは実際に実装するときに考えればいい、はず。
試してみるとインデクスカラーはNSCalibratedRGBColorSpaceのカラースペースで、つまりRGBカラーで読み込まれることがわかった。たとえばこれで確認できる。
まあ、それならそれでいい。 ところで、カラー画像をグレーに変換するというようなのはCocoaのレベルではサポートされていない。いろいろ探したけど見当たらなかった。
OpenCVにはcvtColorという簡単な関数があって変換できる。しかしOpenCVはカラースペースをサポートしていないので表現するデバイスごとの色の差は無視されて と決め打で変換されるだけみたい。今回はべつにカラースペースの問題は初めからないのでOpenCVを使ってもいいけど、それ以前に式-1に従って変換するNSBitmapImageRepのカテゴリを書けばいい。たいした作業ではない。今回は極端には などでも十分だよな。
5 ラティテュード補正
ここでいうラティテュード補正というのはコントラストを増す補正のことのつもりである。どうせ元画像はモノクロなので白は白、黒は黒としゃきっとしていた方がいい。しかし完全に2値にしてしまうとジャギーになって目が疲れる。ということでちょうどアンチエイリアス処理のように、ピクセル境界にはグレーが残るようにしたい。これはOpenCVでもvImageでもヒストグラム処理というのをどちらも持っていて、それを使えばできるはず。これは実際に実装するときに考えればいい、はず。
5.1 グレー変換の問題
そのまえにちょっと気になることができた。スキャナでグレーとして読んでそのままPhotoshopで開くとインデクスカラーになっている。しかし、Cocoaではインデクスカラーはサポートされない。どうなってるか確認する必要がある。まさか静止画がNSImageとして読めない、ということはないはずなんだけど。試してみるとインデクスカラーはNSCalibratedRGBColorSpaceのカラースペースで、つまりRGBカラーで読み込まれることがわかった。たとえばこれで確認できる。
NSImage *img = [[NSImage alloc] initWithContentsOfFile:filePath]; NSArray *iary = [img representations]; NSImageRep *irep = [iary lastObject]; NSLog(@"%@", [irep class]); NSLog(@"%@", [irep colorSpaceName]);とする。ここでfilePathはインデクスカラーのtiffファイルのパスの入ったNSStringである。コンソールの出力は
2010-12-06 21:38:32.224 OpenCVCamouflage[41056:a0f] NSBitmapImageRep 2010-12-06 21:38:32.857 OpenCVCamouflage[41056:a0f] NSCalibratedRGBColorSpaceとなる。
まあ、それならそれでいい。 ところで、カラー画像をグレーに変換するというようなのはCocoaのレベルではサポートされていない。いろいろ探したけど見当たらなかった。
OpenCVにはcvtColorという簡単な関数があって変換できる。しかしOpenCVはカラースペースをサポートしていないので表現するデバイスごとの色の差は無視されて と決め打で変換されるだけみたい。今回はべつにカラースペースの問題は初めからないのでOpenCVを使ってもいいけど、それ以前に式-1に従って変換するNSBitmapImageRepのカテゴリを書けばいい。たいした作業ではない。今回は極端には などでも十分だよな。
2010-12-06 22:01
nice!(0)
コメント(0)
トラックバック(0)
コメント 0