画像処理 その2

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
今日は糞スレが大量発生するねぇ
3デフォルトの名無しさん:03/06/02 19:00

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ
. 三  しU
4デフォルトの名無しさん:03/06/02 19:09

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ
. 三  しU
5デフォルトの名無しさん:03/06/02 19:09

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ 
. 三  しU
6デフォルトの名無しさん:03/06/02 20:09

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ 
. 三  しU
7デフォルトの名無しさん:03/06/02 20:10

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ 
. 三  しU

      /⌒ヽ   コラ―――!!!
     /  =゚ω゚)=
     ( ヽノ
      ノ>ノ  ヒタヒタ 
. 三  しU
>>1

テンプレも参考リンクもなしに新スレ立てんでくれ。
前スレで話しあってから立て直すように。
別にここでいいよ
11デフォルトの名無しさん:03/06/07 22:23
       画像処理 その2

・画像処理について素人同士で大激論
・初学者の質問に対してやさしく(的を外れた)解答を与える
・その道の玄人も大歓迎


/*********************** 始動 ***********************/
12テンプレ:03/06/12 14:54
前スレでも、よく話題に上ったので・・・

Q:カラー画像をグレースケールに変換するには?

A:グレースケールへの変換には、完全な解答はありません。
一般には、下式が用いられるようです。

グレースケール = 0.299R + 0.587G + 0.114B

ちなみに、(R+G+B)/3はオススメできません
13デフォルトの名無しさん:03/06/14 12:02
WindowsのColorDialog([色の設定]ダイアログ ボックス)は今ひとつなんで

左上が 真白 右下が黒 のパレットを作ろうと思うのです
xx ,yy をx,y座標として

y:=1-(xx+yy)/2;   //輝度
x:=(1+(xx-yy))/2*360;//色相

で y=0.5 の時に彩度が最大 としたいのですが 旨い計算式が思いつきません
1413:03/06/14 12:12
とりあえず、色の分離は

y:=1-(xx+yy)/2; //輝度
t:=1-2*abs(y-0.5);
if t<>0 then x:=(1+(xx-yy)/t)/2*3;//色
n:=Trunc(x);
x:=x-n;
case n of
0: begin r:= x ; g:= 1-x; b:= 0 ; end;
1: begin r:= 1-x ; g:= 0 ; b:= x ; end;
2: begin r:= 0 ; g:= x ; b:=1-x ; end;
end;
15デフォルトの名無しさん:03/06/14 12:40
Linuxで画面にプロットするところから優しく教えてくれるサイトはありませんか?
16デフォルトの名無しさん:03/06/14 12:41
gtk使え。
17デフォルトの名無しさん:03/06/14 14:22
>>15

Java2使え。
18_:03/06/14 14:30
>>15
Kylix使え。
>>13
何をしたいのかよく分からんが
YHS輝度色相彩度やRGBと座標X,Yの対応はR^3⇔R^2で連続には
出来ないだろう。
2113:03/06/14 18:23
>>20
うんそうみたいだな
色空間を5.5.4 bitに別けて
32*32*16=16384 128*128 だから、これをスムーズに並べられたらなあとは思うんだけど。

トラックボールを転がすようなインターフェースができたら面白いと思うけどね。
全部の色を一度に見られないというデメリットがあるが……
>>21
色空間をペアノ曲線に乗せてみた。全くの無意味だった
http://up.isp.2ch.net/up/d6a1398874fa.jpg

やはりPainterのパレットの類(一つのパラメータは独立させる)のほうが
まともに使えると思う
2413:03/06/15 19:35
>>23
でも一般の人は画面上に全部の色があってそこからひらって来るイメージの方が判り易いかもしれないと思ってさ、

Adobeのツールのパレットが上が白で下が黒で連続した感じで色が並んでる。
それで、斜め方向に明るい順に並べて出来るだけ色が連続するようにしたらどうかなと思ったんだけど
数学的に解くのは難しいみたいだ。
8x8x4=256色なら 16x16に手作業で順におけばそれなりにおけるんだけどねえ
>>24
Photoshopのパレットはおそらく彩度を固定していて
彩度の低い灰色などは選べないと思う。
26葉っぱふみふみ:03/06/18 00:33
mpeg2の規格書ってどうやって手に入れるかしってますか?
フリーじゃない。。?もしかして。。
どうやらそのようだ
http://mpeg.telecomitalialab.com/standards/mpeg-2/mpeg-2.htm

どれもisoで買うようにリンクされている
>>026
ITU から無料で入手可能 ITU-T H.262 / ITU-T H.222 というのがそれ
MPEG-2 Video と MPEG-2 System だけだけど、多分 26 の言う MPEG-2
はこの二つで足りるはず。
29葉っぱふみふみ:03/06/18 23:50
>>27さん
>>28さん
ありがとうです。(TT)
探してみます。
30葉っぱふみふみ:03/06/19 00:04
て訳でみつかりますた。

ttp://ecs.itu.ch/cgi-bin/dms-ebookshop/

で登録するとお一人様、年三回ダウンロードが無料っす。
年3回…微妙にケチだな…
QRコード(二次元バーコード)をデコードするライブラリってありませんか?
さらに,カメラで撮影した画像から手軽に内容を認識できれば面白そうだが.

QRコードの解説
www.denso.co.jp/EAP/qrcode/index-qr.html

33デフォルトの名無しさん:03/06/20 01:47
現在、DirectShowをつかってdvカメラから白黒動画をグラバに読み込んでます。
この画像をリアルタイムで2値化したいのですが、どのようにすればいいでしょうか?
背景を一色でその前に人をたたせて 人 背景部分を分離したいのです。よろしくお願いします。
背景だけの取り込みは出来るの? 出来るなら差分をマスクにすれば・・・

どんなシチュエーションを想定してるの?
35デフォルトの名無しさん:03/06/20 20:16
最終的な形としては
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
このテキストレインのような状態を目指しています。
4月からプログラムを始めてやっとスムーズに取り込めるようになり、方法としてはDirectShowをつかってdvカメラから白黒動画をグラバに読み込んでます。
人と背景の境をエッジ検出でやろうと思ったのですが、2値化して分けたほうがいいのではないかと思いチャレンジしています。
リアルタイム処理で2値化して境の部分であたり判定を出そうとしているのですが、見当違いでしょうか?
美大系の大学でこういう事を専門にしている先生がいないために、もしかしたらものすごく見当違いのことをしているのじゃないかと思い、アドバイスいただけるとうれしいです。
よろしくお願いします。
36デフォルトの名無しさん:03/06/20 21:03
(´・ω・`)ノ こんにちは。

浮動小数点を使わずに、
任意の二点間に直線を引きたいのれす。

もちろんlineとかは使えません。

使えるのはPSETなどの1ドット描画だけれす。

条件を満たす高速なアルゴリズムがあったら教えて欲しいのれす。

>>36
DDA Bresenham で検索したら?
3836:03/06/20 21:31
>>37
(´・ω・`)ノ すぐに実現できました。
ありがちょう!!
>35
リアルタイムで白黒画像なら、2値化して境界の判定をするオーバーヘッドは
大きい様な気がする。 2値化の精度も問題だろうし・・・

特定のカラープレーン1枚を使って、マスクがあればマスク、無ければ直前の
画像との差分を、境界判定の処理にまわした方が良いと思うな。

「マスク」って背景のみ映ってる画像の事ね。
2値化が旨くゆくならそりゃ成功だろうけど

自分なら背景に加工するけどね。 たとえば

案1、背景を点滅させる
  点滅してる部分をマスクパターンとして抜けば人物が残る

案2、背景に縞模様を写す
  辺より縞模様を追跡して、分岐があった個所を繋げば輪郭パターンの出来上がり
クロマキーでは駄目なのか
なるほど2値化はわりとむずかしいのでしょうか。

いまとても参考にしているHPがあり
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
この中では差分で判定しているのですが、その差分判定の
s = s + (buf2[i]= fabs( buffer[i] - buf3[i]
で、とても時間がかかってしまいます。
クロマキー処理ということはあるひとつの色をすべて抜くということですよね。
あした大きな本屋にでもいってその情報も調べてみようと思います。
他にも気が付いたことがあったらぜひお願いします。
白黒画像なんだから、クロマキーは使えないでしょ。
妥協案として、背景を真っ白とか真っ黒なら、有りか・・・

点滅してても、画像取り込みの段階で(略

2値化は難しい。 決まればキレイだがそうでないと、何見てるんだか判らん。

その式は、複数行に分けて、コンパイラの最適化に期待。
出来ればMMX命令を使ってアセンブラ化が良いぞ。
点滅を取り込みに同期してやればいい。
232Cかプリンタポートで取り込み毎に on/offを反転し
取り込んだ映像で1ピクセル単位に輝度差を調べれば良いから簡単だ
減色とか、RGB→YCbCr変換とか、VRAMの効率的な扱い方とか
もろもろの基本的な画像処理がわかる書籍について、
知っている人がいたら教えてクレクレタコラ。
>>45
ネット上にいくらでもあるような
点時と滅時の差分か? なら、どちらかにレベルを合わせて(点時を255とか、滅時を0)
判定した方が、処理が早いと思うが。

ポートを見に行ってたのでは、時間が掛かり過ぎるよ。

>45
VRAMの効率的な扱い方って、処理系に依存するから、自分で探すしかないよ。
>>45
そういうのはゲームプログラミングの関係で多いよね。
>>47
ポートを見るとか関係ないよ。

言ってるのは、232CのRTSとかの出力で人物背景のライトをON/OFF出来るようにしておいて、
ライトオンで一度 取り込み -->A
ライトオフで一度 取り込み--> B

A-Bのデータを作れば背景が抜けるという意味さ
>49
ゴメン、意味は判ってるんだ。 ただ、セントロやシリアルのポートをいじるのは
画像の収集(フレームの取り込み)に比べて時間がかかり過ぎる事が言いたかった。

それから、その方法では、人物が画面内に静止したら、まずくないか?
だから、取り込み って書いた部分は1画面取り込みの事だからさ

この方法は人物が静止してたら問題ない。逆に動いていた時に差分が
出てしまい、その動いてたときに間違えないような設定値を探さないといけない。
52デフォルトの名無しさん:03/06/23 17:41
WebProgから流れてきました。Perl⇒サムネイル画像作成に
ついての質問をさせていただきます。前スレを読んだのですが、
私の状況と微妙に違ったため、解決することが出来ませんでした。

(状況)
利用しているサーバではGD,PerlMagickがインストールされていません。
(欲しい情報)
・インストール無しで使える、画像縮小のモジュール
・画像を縮小するための具体的なアルゴリズム
・インストールが必要なGD,PerlMagickモジュールの改造方法
・前スレで記載されていたjpegの展開⇒サイズ変更⇒圧縮について
のような情報を求めています。
(jpeg/png/gifなどについて行いたいです。(1つしか出来なくても構いません))

自分でJpegの構成を調べて処理することは最後の手段としたいっす。
どうかよろしくお願いします。
53学生:03/06/23 23:51
しばらくぶりです。今日いろいろ図書館や先生に質問などでうごいてみました。
なかなか、難しいです。先生から2値化 エッジ検出 動き差分習得などのアドバイスを
いただいたのでそれらを試してみたいと思います。
ただ先生は、わからないけど。。。じゃない?という答えだったので不安でいっぱいなのですが。
rc232cポートなどつかういいんですかね?ただ、そうなるとまたハードルが高く。。
アセンブラ化も、、大変そうですね、がんばってみます。ありがとうございました。
また、なにかあったら質問にきます。ありがとうございました。
5452:03/06/24 03:25
解決してしまいました。申し訳ありません。
55社会人:03/06/25 16:06
 ベクタで、2DのDXFファイルを、解像度指定してラスタライズしたいです。

 出力は最終的にはBMPあたりなんですが、それはいいとして、とりあえず
DXFをラスタライズする際に利用可能な、そこそこ使いやすいライブラリ
(有償/無償問わんです)って何かないでしょか?

 アプリだと、要はコンバートなので色々見つかるんですが、ライブラリだ
となかなか見当たらなくて。

 呼び出し側の言語としては、Javaか、C/C++のどちらか(現時点ではどち
らでもいいです)で、ただ、C/C++ならWindows上で利用できることが前提に
なりそうです。

 よりふさわしいスレ/板があったら、それでもよいので教えてくださいまし。

5655:03/06/25 16:07
>>55

 書き方が変だったかも

> ベクタで、2DのDXFファイルを、解像度指定してラスタライズしたいです。

 ↓

> ベクターデータのDXFファイル(2D)を、解像度指定してラスタライズしたいです。
DXFのラスタライズなら、それこそWindowsAPIだけで十分な気がするが?
面倒なのはスプラインくらいだろ
5855:03/06/25 16:33
> DXFのラスタライズなら、それこそWindowsAPIだけで十分な気がするが?
> 面倒なのはスプラインくらいだろ

 いや、全部のDXFエレメントをレンダリングするのを自力で実装する費用は
出ない案件で、上司から、

「市販でコンバートするライブラリとかあるんじゃないの?」

と言われていたものの、探してみると意外とみつからない、というのが実情
でして…。
59デフォルトの名無しさん:03/06/25 16:43
>>58
コマンドライン形式のコンバータを呼び出すのではダメなの?
数十万円程度で入手できると思うが

ただ、AutoCADの表示に完全に忠実なラスタライズをしている製品
は、少ないので注意。特にPOLYLINEやMTEXT。
6155:03/06/27 11:11
>>60
やはり、とりあえずはコマンドラインタイプなんすね。
KDコンバートとかいうソフトは見つけました。
これをベースに検討してみます。
62デフォルトの名無しさん:03/07/01 04:58
tiftのヘッダにあるタグに独自のタグを追加したいんですけど、
どの値が自由に使ってよいか知ってる人がいれば教えてください。
63デフォルトの名無しさん:03/07/02 21:13
ビットマップ(DIB)をWin32APIのStretchDIBits()のように任意倍率で縦横に拡大させたいのですが
どんな方法がありますか?
できるだけ高速なものがいいです。
64デフォルトの名無しさん:03/07/02 22:17
>>63 ブレゼンハムとか?
65デフォルトの名無しさん:03/07/02 22:19
すいません、ちょっと教えてください。
今linuxでlibtiffってライブラリーを使ってC言語で
グレースケールの画像の各ピクセルの輝度を取り出したいんですが
どうもよくわかりません。

ここにあるTIFFReadScanlineって関数を使ってやれば出来そうだなとは思うんですが。
http://www.libtiff.org/man/TIFFReadScanline.3t.html
開いた画像を一行ずつスキャンしてバッファーに解凍するって言うんですけど
このバッファに入った値をどうすればピクセル毎の輝度が得られるかさっぱりわからないんです。
文字列をgets()で開いた場合に、配列の各要素に一文字ずつ格納されるのとはどうも違うようで
イメージが掴めません。

どなたかわかる方がいらっしゃったらよろしくお願いします。
66デフォルトの名無しさん:03/07/02 22:20
>>64
プレゼンハムってどんなプレゼン?
67デフォルトの名無しさん:03/07/03 11:36
>>65
輝度はピクセルのRGB値から簡単に求めることができる。
公式は「0.299f * R + 0.587f * G + 0.114f * B」
68とも:03/07/03 11:46
>>63

StretchDIBits()した結果のデバイスコンテキストをDIBなりDIBSectionなりに取得。
70  :03/07/03 15:59
反射率分布図を使った三次元形状復元について質問があるんですけど
光を受ける面が傾いていたら暗くみえて,傾いていない(勾配がゼロ)
の場合明るく見えますよね?
それとは少し違うんですけど,三次元の形状でなめらかな特性をもつ
物体の「なめらかさ」を定義したい場合
(px^2 + py^2) + (qx^2 + qy^2)がそのなめらかさらしいのですが
いったいなぜそうなるんですか?
ちなみにp,q というのはその三次元形状の物体の面の勾配です。
71デフォルトの名無しさん:03/07/03 16:06
どなたかわかる方がいらっしゃればお願いします。
CADファイルのDXFをメタファイルに変換をしているのですが、
ブロックの挿入で
x方向・y方向・z方向の尺度と回転角度って項目がデータにあるんですが
これはブロックの何を基準に回転または拡大・縮小をかけているんでしょう?
始点?終点?中心点?
どなたかわかる方がいれば教えてください
7265:03/07/03 20:40
>>67
アドバイスして頂いてありがとうございます。
でも、今取り組んでいるのはグレースケールなんです。
それと私がわからない点は、一行分バッファに取り込んでから
どうすれば各ピクセル毎の輝度が得られるかって事なんです。
理解し難い文章ですみません。
すいません!
TransparentBltってだめなのwin98だけ?
win98seからはok?
TransparentBltってなんだ?
Win32APIには無いようだが。もっともWin32APIのマニュアルには
そういう関数がサンプルプログラムで入ってはいるが
>>73
だめ、2000かXP。
↓のスレで聞いた方が良かったな
Win32API 質問箱 Build12
http://pc2.2ch.net/test/read.cgi/tech/1056033645/

>>74
>Win32APIには無いようだが。
なにをもって無いと、言ってるのか分からないが・・・
http://www.microsoft.com/japan/msdn/library/ja/jpgdi/html/_win32_transparentblt.asp

76デフォルトの名無しさん:03/07/04 10:00
>>65
tiffはよくわからんがbmpにしてから
http://asapc1.cc.it-hiroshima.ac.jp/stu/c02/c02.html
みたいにするのはだめか?
77_:03/07/04 10:06
7873:03/07/04 12:04
>>75 ありがとう!
せこせことマスク処理しますわ。
79デフォルトの名無しさん:03/07/04 13:59
Xlibを使ったプログラムを作っています。
ウインドウが他のウインドウで隠されても描画したものを保持したいんですが、
XSetWindowAttributes window_attr;

window_attr.backing_store = Always;
window_attr.save_under = True;
XChangeWindowAttributes(display, window, CWBackingStore|CWSaveUnder, &window_attr);
としても、消えてしまいます。
どうしたら描画内容を保持できるのでしょうか。
80:03/07/04 14:51
>>32
QRコードライブラリ完成したでつ。
そこそこの値段でうるでつよ。
CとJavaね。
81デフォルトの名無しさん:03/07/04 15:24
wmfの画像について質問させてください。
wmfの事についてlibwmfのドキュメントを少し読んでみたのですが、
libwmf自体は各画像フォーマットへのインターフェース的な事だと
私は解釈したのですが、そういう事であっているのでしょうか?
そういう事であれば、wmfと言う画像フォーマットはヘッダ情報に
wmfと書かれた、実体はjpegであったり、その他色々な画像形式が
そのままで含まれている形式(?)と言う事なのでしょうか。

どなたか、わかる方がいたら教えてください。

>>81
WMF=Windows Meta File

WindowsのGDI描画命令をそのまま保存されてるもの
83デフォルトの名無しさん:03/07/04 16:01
>>82
あ、なるほどそうですね。そういえばベクターフォーマットの形式ですね。
wmfって。

今、Javaでwmf画像のファイルを扱うプログラムを作りたいのですが、その
描画命令を理解できるParserが必要って事ですよね。こう言うのが載った
wmfフォーマット形式の仕様書みたいなのってどこかにあるんでしょうか?
マイクロソフトのWin32のマニュアルに
APIを通じた入出力については書かれている
8532:03/07/09 01:37
>>80
大学でちょっと試す程度なので,なんとかお安くならないものでしょうか.
#シェアウェアでソースがあったら買ってしまいそうです.
 長崎市の幼児誘拐殺人事件で、長崎県警捜査本部は、遺体発見現場近くの防犯
カメラ映像に残った幼児連れの若い男について画像分析などで、市内の13歳
の中学生とほぼ特定した。

もとの画像がどれだけ曖昧だったか気になるところ。
87:03/07/09 09:28
>>85
アカデミックユースですね。
なら無償でどうぞ。
>>79
(1) XCreate
Pixmap でピックスマップを作る.
(2) ウィンドウに描くのと同じ要領でそれに描画.
(3) Expose イベントを取得したときに XCopyArea で
表示したいウィンドウに描画

でいかがでしょうか?
スマソ修正
(1) XCreatePixmap でピックスマップを作る.

なんで改行入ったんだ?
90山崎 渉:03/07/15 10:01

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
JPGからBMPに変換して、その色情報を
二次元配列に格納する関数ってありますか?
言語はCです。
よろしくお願いします。
9232:03/07/16 16:15
>>87
遅くなりました.
使わせて頂けませんでしょうか?
(まだちゃんとしたものを作るところまで使うかどうか全くわかりませんが)
93:03/07/19 11:31
>>92
メル欄
9479:03/07/20 18:08
>>88
やっぱりそうするしかないんでしょうか。
学校の solaris では期待したとおりの動作をするんですが……。
>>94
今私の膝で開いてる本によると,バッキングストア機能は
持っているサーバと持ってないサーバがあるらしいです.
9695:03/07/21 08:01
訂正します
×バッキングストア機能は
○バッキングストア機能を


どの X サーバでも確実に動作させたいなら,
バッキングストア機能を頼るのはよくなさそうですね.
>>91

割と最近のWindowsでは、DIBにJpegイメージを格納してデバイスコンテキストに描画できるらしい。
それでうまくいけば、DIBSectionのメモリデバイスコンテキストにでも描けばRGBの配列が得られるはず。
98デフォルトの名無しさん:03/07/22 20:05
(´・ω・`)ノ こんにちは。

画像ファイル .PCT と .PNG を自力で展開したいので、

上記2つのフォーマットの詳細な構造を知りたいのれす。

ご存知の方、ヒントでもなんでも良いのでよろしくお願いします。


99_:03/07/22 20:09
10098:03/07/22 20:19
(´・ω・`)ノ 言い忘れました。

日本語の情報が欲しいのれす。

http://www.wotsit.org/ にある英語情報は読めないのれす。

たいした英語じゃないんだし読め。
でなければ翻訳サイトでも使え。
そうでなくともぐぐれば png形式は簡単に引っかかる
102デフォルトの名無しさん:03/07/24 03:34
私有セルを確保したいのですが、次のコードの最後の行で XAllocColorCells
が 0 を返します。
どこが悪いのでしょうか。

Display *display;
Colormap colormap;
unsigned long pixel[4];

display = XOpenDisplay(NULL);
colormap = DefaultColormap(display, DefaultScreen(display));
XAllocColorCells(display, colormap, False, NULL, 0, pixel, 4);
103_:03/07/24 03:36
104102:03/07/24 04:49
えーっと、やりたいのはフェードインのように
色を変化させることです。
10632:03/07/25 18:13
>>93
何回かメール差し上げたのですが...
107_:03/07/25 18:14
108:03/07/31 12:07
>>106
あれ?届いてないよ。
じゃー、もひとつ。
109山崎 渉:03/08/02 02:09
(^^)
110デフォルトの名無しさん:03/08/04 16:33
jpgファイルを読み込んだり書き込んだりするにはどうしたらいいでしょうか?
jpgの構造が載っているページ、英語でも(もちろん日本語のほうが嬉しいですが)いいので教えてください。
自分でも少し検索してみたのですが、jpgだと画像が引っかかってしまい上手く検索できませんでした。
>>110
IJGのlibjpeg使うよろし
>>110
公式な情報はwww.jpeg.orgに(英語)。
日本語のWebサイトでは、
http://siisise.net/jpeg.html
とかを便利に使ってたけど。

あと、書籍では
http://www.amazon.co.jp/exec/obidos/ASIN/4797306327/
が分かりやすいと思うが、入手困難かも。
113110:03/08/04 17:59
>111 >112
すいません。jpegなめてました。さすが本一冊でちゃうだけのことはありますね。
おとなしくlibjpeg使います。
どうもありがとうございました。
RGBからHSIへ変換し、またRGBに戻すというプログラムで質問です。

/***** hsi_data[0][g][r] 色相、hsi_data[1][g][r] 彩度、hsi_data[2][g][r] 明度 *****/
void rgb_to_hsi(double ***hsi_data, UCHAR ***rgb_data, int gyou, int retu){
int g,r;
double min_i,max_i;
double R,G,B;
for(g=0; g<gyou; g++)
for(r=0; r<retu; r++){
max_i = (MAX3(rgb_data[0][g][r],rgb_data[1][g][r],rgb_data[2][g][r]))/255.0;
min_i = (MIN3(rgb_data[0][g][r],rgb_data[1][g][r],rgb_data[2][g][r]))/255.0;

hsi_data[2][g][r] = (max_i+min_i)/2.0;
if(max_i - min_i <= EPSILON)
hsi_data[1][g][r] = 0.0;}
else{
if(hsi_data[2][g][r] <= 0.5) hsi_data[1][g][r] = (max_i-min_i)/(max_i+min_i);
else hsi_data[1][g][r] = (max_i-min_i)/(2-max_i-min_i);
R=(max_i-(rgb_data[0][g][r]/255.0))/(max_i-min_i);
G=(max_i-(rgb_data[1][g][r]/255.0))/(max_i-min_i);
B=(max_i-(rgb_data[2][g][r]/255.0))/(max_i-min_i);
if((rgb_data[0][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (B-G)*PAI/3;
}else if((rgb_data[1][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (2+R-G)*PAI/3;
}else if((rgb_data[2][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (4+G-R)*PAI/3;
}
if(hsi_data[0][g][r] < 0)
hsi_data[0][g][r] += 2.0*PAI;
}}}
115続き:03/08/08 00:44
void hsi_to_rgb(UCHAR ***rgb_data, double ***hsi_data, int gyou, int retu){
int g,r,h;
UCHAR p,q,t;
for(g=0; g<gyou; g++)
for(r=0; r<retu; r++){
if(hsi_data[1][g][r] <= EPSILON) rgb_data[0][g][r] = rgb_data[1][g][r] = rgb_data[2][g][r] = (UCHAR)(hsi_data[2][g][r]*255+0.5);
else{
if(hsi_data[0][g][r] < 0.0) hsi_data[0][g][r] += 2*PAI;
h = (int)(hsi_data[0][g][r]/PAI*3);
if(hsi_data[0][g][r] >= 2*PAI) h=0;
p = (UCHAR)(hsi_data[2][g][r]*(1-hsi_data[1][g][r])*255+0.5);
q = (UCHAR)(hsi_data[2][g][r]*(1-hsi_data[1][g][r]*(hsi_data[0][g][r]-h))*255+0.5);
t = (UCHAR)(hsi_data[2][g][r]*(1-hsi_data[1][g][r]*(1-hsi_data[0][g][r]+h))*255+0.5);
switch(h){
case 0:
rgb_data[0][g][r]=(UCHAR)(hsi_data[2][g][r]*255), rgb_data[1][g][r]=t,rgb_data[2][g][r]=p;break;
case 1:
rgb_data[0][g][r]=q, rgb_data[1][g][r]=(UCHAR)(hsi_data[2][g][r]*255),rgb_data[2][g][r]=p;break;
case 2:
rgb_data[0][g][r]=p, rgb_data[1][g][r]=(UCHAR)(hsi_data[2][g][r]*255),rgb_data[2][g][r]=t;break;
case 3:
rgb_data[0][g][r]=p, rgb_data[1][g][r]=q,rgb_data[2][g][r]=(UCHAR)(hsi_data[2][g][r]*255);break;
case 4:
rgb_data[0][g][r]=t, rgb_data[1][g][r]=p,rgb_data[2][g][r]=(UCHAR)(hsi_data[2][g][r]*255);break;
case 5:
rgb_data[0][g][r]=(UCHAR)(hsi_data[2][g][r]*255), rgb_data[1][g][r]=p,rgb_data[2][g][r]=q;break;
default:
error1("hsi_to_rgb error");
}
}}}
画像処理ってどうしてもこう
わけわかんない感じの
ながいコードになっちゃうんだよなあ
そこがツライ・・・
117115続き:03/08/08 01:02
んでこの関数を使うとこんな風になってしまいます。
http://www.42ch.net/UploaderSmall/source/1060271379.png
http://www.42ch.net/UploaderSmall/source/1060272009.ppm (間違ってppm上げてしまいました)
青が赤に・・・

検索もしてみましたが、彩度を求めるときに明度<=0.5 or 明度>0.5という判定を使っている式が見つかりませんでした。
この式は私が使っている教科書に載っているのですが、これにはHSI逆変換については載っていませんでした。
その為HSIからRGBにするときには使っていて、RGBからHSIに戻すときにこの判定が無く青が赤になってしまうのではないかと・・・。
結論を言いますと彩度を求めるときに明度の判定を用いているHSI逆変換プログラムの式を教えてください。

あとrgb_data[0][g]には赤、rgb_data[1][g]には緑、rgb_data[2][g]には青が入ってます。
118114:03/08/08 01:04
>116
改行制限とかタブが消えるとかあったのでマスマス分かりにくく・・・
120デフォルトの名無しさん:03/08/08 02:27
RGB⇔YUV変換なら分かるのだが
>>114
RGB->HSI変換式が参考Webページと異なる気がするのだが。
HSVとHSI(HSL)がごっちゃになってる?
(どちらがどういう色空間だったかは忘れたけど)
HSIというのは色相、彩度、明度でいいのかな
で明度は(Max+Min)/2の奴か。面倒だな
しかしよくごちゃごちゃ書いたもんだ。もう少し綺麗に書こうとは
思わないのかね。
ごちゃごちゃ以前に,このソースコンパイラ通らないような気がする.

括弧の対応とか,case文の中身とか
124114:03/08/08 19:55
>121
rgb_data内にはunsigned char型として0〜255の値を格納しています。
その為HSI変換内で255で割って正規化しています。
あとは明度を求めるときにRGBの最大値と最小値の和を2で割って求めている点と、
彩度を求めている点でしょうか。

HSIとHSVとHSLは同じと下のページに書いてありました。
そこによるとIとIntensity、VはValue、LはLightness
http://216.239.57.104/search?q=cache:QRiStM-N1JUJ:www2u.biglobe.ne.jp/~color/all/ml_summary1501_1550.htm+HSI+HSV+HSL+value+intensity&hl=ja&lr=lang_ja&ie=UTF-8

と思ったのですがHSIとHSVは違うようで・・・
http://216.239.57.104/search?q=cache:BIysCB_YqegJ:homepage1.nifty.com/snap/room03/c02/cg/cg01_03.html+HSI+HSV+HSL+value+intensity&hl=ja&lr=lang_ja&ie=UTF-8

ここら辺が色の色相が変わる原因でしょうか?

>122>123
とりあえずソース上げてみました。
上のやつは見やすくするために全角スペース使ってる箇所があるのでそのままではコンパイラは通らないと思います。
あとUCHARはunsigned charです。
http://www.42ch.net/UploaderSmall/source/1060339287.c
この関数は変換した値をそのまま画像データに入れていますが,
とりあえず,色の変換だけするように機能を削ってみてはいかがですか?
(rgb_to_hsiなら,入力が1画素分のRGB値,出力が1画素分のHSI値となるように)

このままだと,テスト実行するだけのためにいちいち三次元配列を
宣言しないといけないのでちょっと面倒です.


あと,この関数の実行例なども一緒にいれてほしいです.


B=(max_i-(rgb_data[2][g][r]/255.0))/(max_i-min_i);
if((rgb_data[0][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (B-G)*PAI/3;
}else if((rgb_data[1][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (2+R-G)*PAI/3;
}else if((rgb_data[2][g][r]/255.0 - max_i) <= EPSILON){
hsi_data[0][g][r] = (4+G-R)*PAI/3;


の,(2+R-G)*PAI/3 のところは, (2+R-B)*PAI/3の間違いじゃない?
127126:03/08/08 21:24
126 と同じところで

if((rgb_data[*][g][r] / 255.0 - max_i) <= EPSILON)となっているところは,
if(fabs(rgb_data[*][g][r] / 255.0 - max_i)) <= EPSILON) にしないとまずいと思う.

ここは,rgb_data[*][g][r] /255.0 と max_i が同じかどうかを判定させる目的でやっている
と思うけど, 括弧の中が負になった場合も条件を満たしてしまう.
128126:03/08/08 21:38
114のいう
HSI -> RGB の変換方法を解いてみました.

(0 <= I <= 1,0 <= S <= 1,0 <= H < 2π)



I <= 0.5 のとき
  max = I(S + 1)
I > 0.5 のとき
  max = (1 - I)S + I
}

min = 2I - max

i = H / (3π) の整数部
hh = H / (3π) の小数部

i = 0のとき
  R = max
  G = max * hh
  B = min
i = 1のとき
  R = max * (1 - hh)
  G = max
  B = min
i = 2のとき
  R = min
  G = max
  B = max * hh
i = 3のとき
  R = min
  G = max * (1 - hh)
  B = max
i = 4のとき
  R = max * hh
  G = min
  B = max
i = 5のとき
  R = max
  G = min
  B = max * (1 - hh)
130126:03/08/08 21:42
修正

>> i = H / (3π) の整数部
>> hh = H / (3π) の小数部

正しくは
i = H / (π / 3) の整数部
hh = H / (π / 3) の小数部


これでうまくいくはずです.
一部間違えてました ごめんなさい

129 の中身全てをこれとすげ替えてください.

d = max - min

i = 0のとき
  R = max
  G = hh * d + min
  B = min
i = 1のとき
  R = (1 - hh) * d + min
  G = max
  B = min
i = 2のとき
  R = min
  G = max
  B = hh * d + min

i = 3のとき
  R = min
  G = (1 - hh) * d + min
  B = max
i = 4のとき
  R = hh * d + min
  G = min
  B = max
i = 5のとき
  R = max
  G = min
  B = (1 - hh) * d + min
HSIの彩度はYHSの彩度とはずいぶんと違うものなんだな
それから別に聞かなくていいけど一言言いたい事は
色空間の変換は画素ごとに独立しているんだから
全画素にわたる反復と色空間の変換は別の関数にしたい、という事と
画素は一つの構造体(struct rgb{double r;double g;double b};)にまとめた
方が気分がいい、という事だな
133132:03/08/08 23:23
と思って調べたらHSIのは普通の彩度だな
>>114のはHSVで調べると出てくるような
134114:03/08/09 00:10
>125
そうですね。テストをするなら1画素に注目したほうがわかりやすいですもんね。
自分電卓使って手で求めてました・・・。
実行例は上の方にpng画像がまだあるハズです。

>126
おっしゃる通りです。
初歩的なミスを犯してました。
>127
そこの部分に関してはrgb_data[*][g][r]に格納させる値が0〜255なので問題はないかと思われます。
ですがプログラマとしてはそういった部分を気をつけるのは大切なことだと思ったので参考になりました。
>128-131
わざわざありがとうございます。早速コーディングしてみたのですが前と変わらなく・・・_| ̄|○
前というのは正確に言いますと
http://216.239.57.104/search?q=cache:LAb_Oee8lKkJ:village.infoweb.ne.jp/~ishidate/vcpp6_g3/vcpp6_g3.htm+HSI%E5%A4%89%E6%8F%9B%E3%80%80HSI%E9%80%86%E5%A4%89%E6%8F%9B&hl=ja&lr=lang_ja&ie=UTF-8
のソースをそのまま使った場合の結果です。
念の為ソースを上げておきます。コーディングミスの可能性が多分にありますので・・・
http://www.42ch.net/UploaderSmall/source/1060353992.c

>132-133
反復と変換を分けると関数の呼び出しが増えてたとえポインタで引数を渡したとしても
処理が遅くなったりしないんでしょうか?そこら辺詳しくないのでわからないのですが。
画素は確かに構造体にまとめたほうがいいですね。
あとこれは画像処理標準テキストブックを参考にしたのですが、そこにはHSI変換と書いてあり、
HSI双六角錐カラーモデルとありました。
135126:03/08/09 00:41
>>134

>> >127
>> そこの部分に関してはrgb_data[*][g][r]に格納させる値が0〜255なので問題はないかと思われます。

例えば, RGB 値が (0, 255, 0) のときを考えると,

max_i = 1.0,   rgb_data[0][g][r] = 0.0  のため,

if((rgb_data[0][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (B-G)*PAI/3;
}else if((rgb_data[1][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (2+R-B)*PAI/3;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ↑ここを実行したいにもかかわらず,
}else if((rgb_data[2][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (4+G-R)*PAI/3;
}

実際は
if((rgb_data[0][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (B-G)*PAI/3;
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ↑ここを実行してしまう
}else if((rgb_data[1][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (2+R-B)*PAI/3;
}else if((rgb_data[2][g][r]/255.0 - max_i) <= EPSILON){
  hsi_data[0][g][r] = (4+G-R)*PAI/3;
}

136126:03/08/09 00:47
追加
rgb_to_hsi 内にやたらと / 255.0 が入っていますけど,
これをなくすように変更するだけでだいぶ単純になりますよ.

そうすれば, if( *** - max_i <= EPSILON) とやっているところも
自然と if ( *** == max_i) に置き換えられますから
>>134
>反復と変換を分けると関数の呼び出しが増えてたとえポインタで引数を渡したとしても
>処理が遅くなったりしないんでしょうか?

高速化は、まともに動作するものが出来てから考えればよいかと。
最初は冗長でも可読性の良いコードを書くべし。


このスレ急に盛り上がってきたな。
138114:03/08/09 13:31
>135
そうですね・・・私が馬鹿でした。
ちょっと考えればわかることでした。
青が赤になってしまうのはここが原因だったようです。
>136
言われたとおり正規化したRGB値を格納する配列を作ってみました。
最初からこうしていればハマらなかったですね。

>137
盛り上がってきたようでその実私ばかり書き込んでるわけで。

126氏のプログラムとWEBのサンプルコードを比較してみました。
http://www.42ch.net/UploaderSmall/source/1060402857.png

やはり明度判定のある方が再現性が高いようです。
レスくれたみなさん。特に126氏。どうもありがとうございました。
分からないことがあったらまた来ると思いますのでそのときはよろしくお願いします。
>>やはり明度判定のある方が再現性が高いようです。
RGB->HSI 変換、HSI->RGB変換は可逆変換なので、
完全に元に戻せるはずです。なので、
再現性うんぬんでなくて、正しいか間違っているかどちらかということになります。

114さんのHSIは双六角錐型、
WEBで紹介しているHSIは(単)六角錐型で異なる色空間(こちらはHSVと呼ばれることが
多いみたいです)なので、114さんがやったことは、結局下のようなことになります。

・RGB -> HSI 変換
・HSI を HSVとして読む
・HSV -> RGB変換

HSI と HSV はそれぞれ異なる色空間なので、最初のRGB値と最後のRGB値は
変わっていて当然なわけです。


いきなり画像を使って比較するのではなく、RGB値やHSI値を直接いれて
比較してみることをお勧めします。
140114:03/08/10 13:56
>>やはり明度判定のある方が再現性が高いようです。
>RGB->HSI 変換、HSI->RGB変換は可逆変換なので、
>完全に元に戻せるはずです。
ここに関してはとあるWEBページでHSV変換は

>もともと256階調のものをかたや0〜2π、かたや0〜1に変換するんだから、誤差くらい出る。
>それに、Hが同じでもVやIが低いとかなり色は不安定になる。
>そもそも、HSVへの変換は線形式使ってるわけじゃないんだから、完全な逆変換なんて存在しない。
これを読んでたために再現性という言葉を用いたわけですが、HSI変換は違うのでしょうか?
私も計算中の型落ち等で可逆変換は無理だと思います。

結論を言いますと明度判定のある逆変換がHSI逆変換(126氏の)で
無い方(WEBの)がHSV逆変換ということで、HSI変換で生成されたものに
HSI逆変換を施したのだからHSV逆変換を施したものより似ているのは当たり前である。
ということでよろしいでしょうか?
>> HSI逆変換を施したのだからHSV逆変換を施したものより似ているのは当たり前である。
そうです。

(114氏の)HSI と,(WEBの)HSV では、 H の変換の仕方は同じですが、
SI と SV の変換の仕方がそれぞれ違います。
そのため、あべこべに使うと適切でない変換をしてしまうことになります。

>> >そもそも、HSVへの変換は線形式使ってるわけじゃないんだから、完全な逆変換なんて存在しない。
>> これを読んでたために再現性という言葉を用いたわけですが、HSI変換は違うのでしょうか?
>> 私も計算中の型落ち等で可逆変換は無理だと思います。

とりあえず、理論上は可逆にできると思います。
そして、少なくともこのケースでは充分な精度を持てば完全に可逆にできます。
証拠のソースも示しておきますね。

ソースの説明
(1) ある rgb 値を用意
(2) rgb -> hsi に変換
(3) hsi -> rgb に変換
(4) (3) で求めた rgb 値と (1) の rgb 値の差を求める.

全ての rgb 値についてこの処理をして、 (4)の和を求めます。
その和が 0 であれば誤差 0 といえます。

rgb それぞれ 8ビット(=256種類)ずつ、つまり、 256^3 色分だけ求めますので
かなり処理時間がかかると思います。なるべく速いマシンでやって下さい。

#include <math.h>
#include <stdio.h>

#define PI 3.14159265358979
#define PI2 (PI * 2.0)
#define PI_3 (PI / 3.0)

//HSI双六角錐カラーモデル
static int max3(int x, int y, int z) {
 int i, a[3], max;
 a[0] = x;
 a[1] = y;
 a[2] = z;
 max = a[0];
 for (i = 1; i < 3; i++){
  if (max < a[i]) max = a[i];
 }
 return max;
}

static int min3(int x, int y, int z) {
 int i, a[3], min;
 a[0] = x;
 a[1] = y;
 a[2] = z;
 min = a[0];
 for (i = 1; i < 3; i++){
  if (min > a[i]) min = a[i];
 }
 return min;
}
void rgb_to_hsi(double *hsi, unsigned char *rgb){
 double min, max, d;
 double r, g, b;

 r = rgb[0]; g = rgb[1]; b = rgb[2];

 max = max3(r, g, b);
 min = min3(r, g, b);
 d = max - min;

 hsi[2] = (max + min) / 510.0;
 if (max == 0.0){
  hsi[0] = 0.0; hsi[1] = 0.0;
 }else{
  if(hsi[2] <= 0.5){
   hsi[1] = d / (max + min);
  }else{
   hsi[1] = d / (510 - max - min);
  }
  if(rgb[0] == max){
   hsi[0] = (g - b) / d * PI_3 ;
  }else if(rgb[1] == max){
   hsi[0] = (2.0 + (b - r) / d) * PI_3;
  }else if(rgb[2] == max){
   hsi[0] = (4.0 + (r - g) / d) * PI_3;
  }
  if (hsi[0] < 0) hsi[0] += PI2;
 }
}

void hsi_to_rgb(unsigned char *rgb, double *hsi){
 double H, S, I, hh;
 double max, min, d;
 int i;
 H = hsi[0];S = hsi[1];I = hsi[2];
 hh = H / PI_3; i = (int)hh; hh -= i;
 // H = i + hh (i : 整数部, hh : 小数部) (0 <= H < 6)

 if (I < 0.5) max = I * (S + 1.0);
 else max = (1.0 - I) * S + I;
 min = 2.0 * I - max; max *= 255.0; min *= 255.0; d = max - min;
 max += 0.5;min += 0.5; //四捨五入
 switch(i){
  case 0:
   rgb[0] = max;   rgb[1] = hh * d + min;   rgb[2] = min;  break;
  case 1:
   rgb[0] = (1 - hh) * d + min;   rgb[1] = max;   rgb[2] = min;  break;
  case 2:
   rgb[0] = min;rgb[1] = max;
 rgb[2] = hh * d + min;  break;
  case 3:
   rgb[0] = min;rgb[1] = (1 - hh) * d + min;
rgb[2] = max;  break;
  case 4:
   rgb[0] = hh * d + min;rgb[1] = min;rgb[2] = max;  break;
  case 5:
   rgb[0] = max;rgb[1] = min;
rgb[2] = (1 - hh) * d + min;  break;
 }
}
int main(){
 unsigned char rgb[3];
 int i, j, k;
 double sum, sum_prev;
 double hsi[3];
 sum = 0.0;
 for (k = 0; k < 256; k++){
  for (j = 0; j < 256; j++){
   for (i = 0; i < 256; i++){
    sum_prev = sum;
    rgb[0] = i; rgb[1] = j; rgb[2] = k;
    rgb_to_hsi(hsi, rgb);
    hsi_to_rgb(rgb, hsi);
    sum += abs(rgb[0] - i) + abs(rgb[1] - j) + abs(rgb[2] - k);
    if (sum > sum_prev){ //誤差がでたときに表示されます
     printf("(%d, %d, %d) -> (%d, %d, %d)\n", i, j, k, rgb[0], rgb[1], rgb[2]);
    }
   }
  }
 }
 printf("sum : %f\n", sum);
 return 0;
}



//全角スペースをタブか半角スペースなどに変換してからコンパイルしてください.
補足

rgb それぞれ8ビットずつのとき、どれくらいの精度があれば完全に可逆にできるか
検証してみました。
最も彩度の高い色がでる領域(HSI なら S=1.0, I=0.5 HSV なら S=1.0 V = 1.0)で、
赤(255, 0, 0)からその隣の色(マゼンタ(255, 0, 255)か黄色(255, 255, 0)) に移動するときに、 H に必要な精度を考えます。
(この移動で SI や SV は変わりません)
赤と黄色の中間色は 赤と黄色を含めて 256 通りあります。
なので、その間で H が 256 分割できるだけの精度(つまり 8 ビット)が必要になります。
白と黒を除くと原色は 6 個あるので、 H は全体で 256 * 6 分割 必要になります。
よって、2^10 < 256 * 6 < 2^11 なので、 H は 11 ビット必要となります。
今度はS=0からS=1.0に移動する場合を考えます。
Sの変化に対して最もよく色が変化する点はHSI なら I = 0.5、HSV なら V = 1.0です。
(S=0のとき、HSIは灰色(127,127,127)、HSVは白(255, 255, 255))
そこから、例えば赤(255, 0, 0)に移動することを考えます。
すると、HSIでは 128 分割、 HSV では 256 分割必要なので、多くても Sは 8 ビットあれば
充分です。
Iについても白と黒で同様に考えれば、 8ビットあれば充分です。

計算誤差に対する遊びを1〜2ビット用意したとしても
H 13ビット S 10ビット I 10ビット V 10ビット あれば誤差0にできるということになります。
ちなみに 142-145 のソースでは 全て double型(64ビット)でやっているので、この条件を
余裕でクリアしてます。
もうひとつ 連投スマソ

>> 完全な逆変換なんて存在しない。

これがいいたいことは、こういうことかもしれないです。

H = 120度
S = 0
V = 0
↓ RGB へ 変換
R = G = B = 0 ← ここで H (Sも?)の情報が消える
↓ HSV へ 変換
H : 不定
S : 不定?
V = 0

HSV -> RGB -> HSV とやると、元の HSV の値は必ずしも復元できるとは限らないので、
そういう意味では互いに完全に可逆の関係とはいえないかもしれないです。

ですが、逆は可逆になると思います。
R = G = B = 0
↓ HSV へ 変換
H : 不定
S : 不定?
V = 0
↓ RGB へ 変換
R = G = B = 0 ← H, S がどんな値でも V=0 なら黒
HSI も I=0 のときに黒になることに加えて I=1 のときもH, S の値に関係なく白になるだけで
あとはだいたい同じかと思います。
俺も書いてしまってもったいないから消す前に張っておく。

hsi_to_rgb 及び rgb_to_hsi
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=135&fi=no
>>148
見事に整頓されてますね。

rgb_to_hsi と hsi_to_rgb の 引数 row, column は関数呼び出し側で&をつけるだけで
不要になるような気がしますがいかがでしょうか?
150148:03/08/10 19:08
>関数呼び出し側で&をつけるだけで
えーとポインタを渡すということ?

それからやはり浮動小数の0比較には誤差切捨てが必要
double chop(double d){ return fabs(d)<epsilon ? 0 : d ;}
としてif(chop(d)==0)...;、
あと構造体の変換にはコンストラクタがほしいなあ
久しぶりにもりあがってきました。
152149:03/08/10 19:47
>>えーとポインタを渡すということ?
えっと、こんな感じで

HSI hsi[HEIGHT][WIDTH];
RGB rgb[HEIGHT][WIDTH];

.

for (j = 0; j < height; j++){
 for (i = 0; i < width; i++){
  rgb_to_hsi(&hsi[j][i], &rgb[j][i]);
 }
}

153114:03/08/11 23:05
>139
遅くなり申し訳ありません。
コンパイルして実行してみました。
そうしたらグレースケール時?にGreenの値が消えていたので
ソースをよく見たところ彩度が0の時の判定が抜けてました。
if (S == 0.0) {rgb[0] = rgb[1] = rgb[2] = I * 255.0; return;}
その他は問題がありませんでした。
仰るとおり可逆変換ですね。
ここまで細かく検証していただきありがとうございます。

>148
どうもありがとうございます。
RGB2RGB_INT内での丸め誤差と彩度の判定が無い以外問題はありませんでした。

他の人のソースコードはとても参考になります。
お二人ともどうもありがとうございました。
154山崎 渉:03/08/15 15:52
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
クロマキーでは駄目なのか
白黒画像なんだから、クロマキーは使えないでしょ。
グレイスケールの画像で、
雲がかった濃淡のある背景にパーティクルが乗っているのですが、
パーティクルの厳密なサイズが知りたいのでサイズに影響を与えることなく
背景を除去する方法ってありますか?

今のところは平均化して差分をとったりして模索中です。

パーティクルはひょうたんみたいに重なってることもあるので
くびれが細っちゃったりするのも困り者なのですが。
微妙にスレ違いな気がするんだけどここで質問。
ベクトル量子化系の圧縮を自作したんですが、性能的には、
圧縮率は7〜8倍程度、幾何学的な単純な図形やグラデーションとかだと
10〜14倍で、視覚上の劣化がほぼ判らないと思います。
ただ、それ以上圧縮しようとすると大きく画がひずみます。
展開速度的にはjPEGの7割程度です。
こういうのだと、どのようなところでの使用が考えられますかね?
ちなみに、動画圧縮に応用しようと考えているのですが、
高圧縮領域での画質が良くないことがネックになって苦戦してます。
>>158
当てずっぽうで書いてしまいますけど、
幾何学的な図形に向いているということであれば、
プレゼンテーションソフトで作った動画の圧縮とか?

用途はピンポイントでも、需要はあるかも。
>>158
えと、圧縮率がJPEGより10倍程度優れているの?
もしそうならば、>>159 のような用途が見えてくる。

しかし、圧縮率がJPEGあるいは幾何学模様用圧縮に劣るならば、
展開速度の遅さは致命的。
言い方がヘンでしたね。
素のBMPに対して、1/7〜1/14、
JPEGの展開速度の7割というのは、JPEGが50msなら35ms程度で
開くという意味です
もしもベタ塗り画像にも効果があったら
アニメのリアルタイムエンコーディングとかにも利用できるかも?
画像処理で検索してここが出たんですけど
オークションとかに服を出すために、自分で服を着て出す時
そのままじゃ出せないので、顔にモザイクや、マークをかぶせて隠してる人が
沢山いるんですけど、あれってどうやってやるのかなーと思ってるんですけど
どこかそういう話題に相応しいスレってありますか?スレ違いですみません。
>>163
というか、普通に板違い

誘導先探すのも面倒なので、適当に答えると
Photoshopなどの画像エディタ使え
黒塗りくらいなら、ペイントでもいいしな

ツールの使い方はここで聞くなよ
サンクスです
>>163
自分でモザイク処理したい、ってんならここでもいいけどね。
BMPファイルを読み込み、配列にRGB値を格納したのですが、
BMP内で多く使われている色の上位8色を降順で表示させるためには
どうすればいいでしょうか?
言語はCです。
よろしくお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=147
int counter[256*256*256];
を用意して、出現した色ごとに counter[R*65536+G*256+B]++; して、
それが終わったら降順にソートしる。

省メモリでやろうとすると、結構奥が深い問題。キーワードはハッシュだ。
169167:03/09/22 01:34
>>168
レスありがとうございます。
とりあえずカウントできました!
もうちょっとがんがります(`・ω・´)
170デフォルトの名無しさん:03/09/22 23:20
背景差分に関するいいHPありませんか?
その応用のHPしかでなくて…
>>170
「いいHP」だけじゃ何を知りたいのかわからん。
172デフォルトの名無しさん:03/09/23 05:30
簡単にいうと、元となる背景があって、それとそれに物体を置いたものがあるとしたら
どうやって、物体だけを抽出するのかを書いてあるHPがいいんですが…
本でもいいのでお願いします。
輪郭抽出とは違うん?
>>172
普通は、背景と物体だけを抽出した物が初めにあって、背景に物体を置いた物をつくるんだよ。
175170:03/09/23 14:34
>>174
それだと
背景をAとして物体をBとした時
A+Bの画像を作るって事ですよね?
漏れがしたいのは
(A+B)-A=B
って感じで物体だけを取り出したいんです。
>>175
A+Bの画像を自分で作ったんじゃないんなら、
Bを取り出す完璧な方法はない。
>>175
背景差分法はAとA+Bを部分(画素)ごと比べて、
変化していればB由来、変化していなければA由来
という事だろうが、これ以上の何が知りたい?
>>177
そもそも自分で作ってないなら、背景が無いだろ。
AAAAABBBBBAAAAA

という配列からBの部分だけ抽出するマスク

000001111100000

を作ればOK!!これでBだけ取り出せるぜ!!
181デフォルトの名無しさん:03/09/23 21:40
>>178
背景はデジカメで2枚写真を撮って1枚目がまだ物体を置いてない物2枚目が物体を
置いたものって感じです。

>>179-180
理論的にはわかってるつもりなんですけどそれを実現するためのプログラムを
どうやって作ったらいいのかわからないのです…
ちょっとでもずれてたら無理だな
183デフォルトの名無しさん:03/09/23 22:03
デジカメは固定してます。
綺麗に結果がでなくてもある程度認識できればオッケーなんですよ。
1枚目と2枚目を画素ごとに比較。
差が一定以上なら物がある、と判断。

これでいい?
ついでに、隣接する画素が背景か物体かを判定して、
オキュパイドドメインで判定を行うと、精度が向上する。
C = 二値化( (A+B)-A )
結果 = A * C
フォトショップのトーンカーブファイルを読み込んで使いたいのですが、フォトショップでは制御点間をどういう補間してるのか知りませんか?

スプラインじゃなかったっけ?
そうみたいです
スプラインで描いてみたら
フォトショップのカーブダイアログのと
ぴったり重なりました
TIFFのG3、G4の圧縮について資料を探しています。

これらの圧縮について、
解説してある書籍など、ご存知でしたら教えて下さい。

いちおう、libtiffのソースは拾ってみたのですが、
いまいち理解できなかったので・・・
やっぱり、ITU-Tの勧告書買うしかないんでしょうか?
>>190
圧縮使ったこと無いので見当違いかもしれませんが、
http://partners.adobe.com/asn/developer/pdfs/tn/TIFF6.pdf
の49ページから一応CCITTのエンコード関係が書かれています。
# しかし、質問の内容から既に読んでいそうだな〜
>>191
レスありがとうございます。

非圧縮のTIFFはこの仕様書で十分だったんですが、
圧縮は・・・私の英語力が足りないのか、
これだけでは書けそうにありません。

できれば、日本語の資料で(これを最初に書くべきでした)
良いものがあればご教授ください
> 192
この本、
http://www.cqpub.co.jp/hanbai/books/32/32641.htm
は当たってみました?
>>193
ありがとうございます。
トランジスタ技術は盲点でした・・・

さっそく、アマゾンで注文してみました。
195190:03/10/16 09:13
ぐは、何を思ったか、NO.63を買ってた・・・欝だ詩嚢
高機能な動画像処理ソフトウエアを捜しているのですが,
HALCON ってどうなのでしょうか?
世界最高峰って本当ですか?
>>196
ここは画像処理プログラミングのスレなので
プログラミングに関係がないなら他を当たってくれ
>>197
VC,VBに変換できるらしいし,
HALCON Developer's Kit で開発もできるらしい
質問のふりした宣伝以外何物にも見えんな
200デフォルトの名無しさん:03/11/05 03:07
自社製品を世界最高峰だなんて自画自賛してしまうスレ
に行ってください
201名梨産:03/11/05 04:36
陰線処理やレイトレなんかの3D系のスレってあります?
202198:03/11/05 22:04
単順に画像処理ライブラリとしての評価を聞きたいと思っております.
どなたか利用したことは無いでしょうか?
他に様々なアルゴリズムが揃ったライブラリって無いでしょうか?(商用,非商用問わず)
ご教示願います.
>>196
あれくらい簡単に作れる。
ていうかあのようなものを作っている人のスレだし。
204デフォルトの名無しさん:03/11/06 08:25
>>196
誰が世界最高峰だなんて言ってんの?
ソース出せ
205デフォルトの名無しさん:03/11/06 09:07
libjpeg 使って画像表示しようとしてますが、うまくいきません。
モノクロ画像になってしまうし、横幅が約3/4になってあとの1/4は
なんていうか左端の部分が繰り返すみたいに出てしまいます。
使い方が悪いんだと思うんですがどこが悪いんだかよくわかりません。
こんな症状にありそうな原因ってなんでしょうか?
>>206
情報どうもありがとございます。参考にします。
208205:03/11/07 23:24
なんとか解決。原因というか、いじった所は libjpeg 関連ではなく、
Window 絡み(X Window)の部分とあいなりました。XImage を使った
のですが、どうも使い方が分かりにくい代物です。
209デフォルトの名無しさん:03/11/09 20:57
http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
↑この中でどのように差分を求めているのでしょうか?
計算式と計算過程を教えてください。
210デフォルトの名無しさん:03/11/10 02:59
動画像処理ライブラリ&言語でこれはオススメ!ってのあります?

具体的な用途はカメラからの入力画像から
手の形などを認識させるといった感じなんですが・・・

>>209
error 403(アクセス不可)・・・
>>210
アセンブラ
>>210
言語は何でもいい。
適当に二値化してパターンマッチングすりゃいい。
ここはそういうライブラリーを作るためのアルゴリズムを語るところなので
出来合いのライブラリーを探したければ各環境ごとのスレに行ってくれ
213デフォルトの名無しさん:03/11/10 14:17
ステレオ画像における対応点探索の良いアルゴリズムってありませんか?
精度がある程度求められるので、特徴ベース法ではないものが良いのですが…
214213:03/11/10 20:19
アドバイスキボンヌ
フラクタル圧縮って結局実用化されているんですか?
特許のために情報が表に出てこないらしい上に、
特許を持つIterated Systems社のページには繋がらないので何がなんだか。
216209:03/11/11 11:21
http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
↑のサイトは、アクセス不可になることが多いので、
http://kenkyu2.hp.infoseek.co.jp/cap26.cpp
にも置きました。
差分を求めている方法を教えてください。
また、計算式と計算過程を教えてください。
お願いします。。
s =0.0;
for( i = 0;i < n ;i++){
  s = s + (buf2[i]= fabs( buffer[i] - buf3[i] ));
}
...
if( s/n > 10 )
  Beep(1000,100);


単純に差分をとっているだけだな
218デフォルトの名無しさん:03/11/11 17:42
loadimageはprintfみたいに単品で使えますか??
>>218
使えません
220デフォルトの名無しさん:03/11/11 21:09
s =0.0;
for( i = 0;i < n ;i++){
  s = s + (buf2[i]= fabs( buffer[i] - buf3[i] ));
}
について、
buf2は、何を示しているのでしょうか?
bufferは、何を示しているのでしょうか?
buf3は、何を示しているのでしょうか?
プログラム上の計算式ではない、式をおしえてください。
>>216
ソース見るまでもない。

減算するだけ。

1コマ目から2コマ目を引けば、
変化の無い部分は何も残らず、変化のあった部分だけが残る。
bufferは今現在のフレーム、添え字iでbuffer_iとしてi番目の画素
buf3は一つ前のフレーム、添え字iでbuf3_iとしてそのi番目の画素
buf2は今のフレームと一つ前のフレームの差分の絶対値を収める

buf2_i=|buffer_i-buf3_i|
わざわざ画像を抜き出すなら変化しているところの
新しい値(か古い値)を抜き出すのが普通だろうに
なぜ差分なのかはよく分からない。
>>223
「変化しているところ」の検出はどうするの?
225デフォルトの名無しさん:03/11/13 06:07
背景と色が殆ど同じ動体を検出するのって
やっぱり背景差分とる方法じゃまずいかな?

昨日、来年の研究室配属の初顔合わせがあって
教授にウンコと大木の例えでその話したら
「ウンコが白くなるまで待ったら?」とか言われたYO。
場を和ませようとした俺の心遣いを無にしやがって・・・!
(´;ω;`)
教授も場を和ませようとしたんじゃないの?
で見事に二人してこけたわけだ
227デフォルトの名無しさん:03/11/13 17:44
今更ですが、
JPEGでは短時間離散コサイン変換が使われているのですか?
DCT使われていると知ったんですが、8×8ブロックごとにフーリエ変換
らしいので、窓フーリエつかってるのかと思ったんですが。。。
>>227
とりあえず、自分の書いた文章をもう一度嫁。日本語になってない。
JPEGは、実装はいろいろだけど、原理はDCT。
229デフォルトの名無しさん:03/11/13 23:51
VB6.0を使用していますが
bmp画像をRGB各成分3つに分解する方法が、さっぱりわかりません。
本とか探してもなかなか見つかりません。
BMP→R成分だけの画像 BMP→G BMP→B というプログラムを教えて欲しいです。
Windows BMPならばパレット形式とRGB形式がある
>>229
ぐぐったら、
ttp://rd.vector.co.jp/soft/dl/data/art/se027618.html
DIBフォーマットの説明書ってのがあった。これみて、直接読み込め。
24ビットのBMPなら、ラインのパディングバイトに気をつければすぐ出来るだろ。
CG板で質問したところ、ム板行ったほうがいいんじゃね?
と言われたため、ここで質問させてください。

BMPについて、オーム社のC言語で学ぶ実践画像処理を参考にしたところ、
RGB24ビット無圧縮で記録されたBMP形式では
ヘッダ54バイト、BGR・BGR・BGR・BGR・・・(画素分)
というように記述されているとわかりました。
つまりファイルサイズは、縦×横×3+54(バイト)で求まるはずです。

ところが、実際にファイルサイズを確認してみたところ、
この式の通りの画像もあれば、数十〜数百バイト(画像が大きくなればもっと?)分だけ
大きくなっている画像もありました。
上記の式を元にしたBMP読み込みのプログラムを書いたのですが、
やはりと言うか、この式で求まるファイルサイズより大きくなる画像では
正常に読み込めませんでした。

BMPで保存する方法としては、Photoshop、Vix、IrfanViewで試したのですが、
ソフトによって結果が変わるのではなく、画像ごとに決まった結果となりました。
つまり、同じPhotoshopで保存した画像でも、上記の式の通りのファイルサイズもあれば
それより大きくなるものもあるのです。
いずれもパレットは使用しないように設定して保存しています。
バイナリエディタで開いてみたところ、理論値よりファイルサイズが大きくなる画像では、
通常のヘッダ54バイト、色情報に続いて、ファイルの終わりに意味不明の情報が
入っていました。(何を表しているのかわからない値00、FF、80などの羅列)

ファイル末にある、余分な情報は何でしょう?
また、式をどう変更すべきなのでしょうか?
>>232
すぐ上のレスも読もうw
ケツに付いてるのはMSDNによるとProfileData(optional)らしい。
234デフォルトの名無しさん:03/11/14 08:41
>>232
1ライン分のデータは4byteにアラインメントされたりするんだけど
それが原因じゃなくて末尾のゴミが原因なら
そんなものは無視すりゃいいだろう
235デフォルトの名無しさん:03/11/14 19:04
>>232
ピクセルのRGBまでのオフセットは、54バイトと決め打ちしてはいけない。
BITMAPFILEHEADERからオフセットを取得すべき。

最も一般的な24ビットフルカラーBMPファイル全体の構造は

BITMAPFILEHEADER *1
BITMAPINFOHEADER *2
(カラーテーブル)
RGBデータ

という感じなので、わからないことがあったらBITMAPFILEHEADER/
BITMAPINFOHEADERで検索してみよう(54バイトというのは1,2の
合計)。
236229:03/11/14 19:18
ありがとうございます。
RGBに分けれたのですが、その後セーブをしても元の絵がセーブされてしまいます。
画像処理後の絵をセーブするにはどうすればいいのでしょうか?
画像処理後の絵を保存すればいいんじゃないかな
238デフォルトの名無しさん:03/11/14 19:40
>>237
マリ
239デフォルトの名無しさん:03/11/14 19:47
>>236
再現させることが可能なソースをどこかに置いて
そのURLを晒せ
240デフォルトの名無しさん:03/11/14 21:22
>>236
分けれた、ってのは何したの?
読み込んだRGBをいじらないでまたそのRGBデータを保存すれば、当然
「セーブをしても元の絵がセーブ」されるよ。

あと、画像処理をする時には読み込んだBMPをそのまま使うのではなく
一度BMPから自分でDIB(BITMAPINFOHEADER+RGBデータ)を作ってその
DIBを処理した方が確実かも。そして、保存する時は改めてDIBからBMP
のバイナリイメージを作る。このあたりの処理を自分で書いてみれば、
DIB/BMPの構造も理解できるし。

一番よいのは、最初に24ビットBMPから32ビットDIBを作るクラスなり
関数なりを書いてしまうことだね。画像処理を行う時には、1ピクセル
1DWORDで扱える32ビットDIBの方がずっとわかりやすい。
241デフォルトの名無しさん:03/11/14 23:24
連続画像(心臓の連続CT画像)の変化を計測したいんだけど
動きの変化を追っていく方法にはどういうのがあるの?
あと、ほとんど動きが無い部分=変化なし
一定以上動きある部分=変化あり、みたいな感じにするにはどうすればいいの?


>>241
情報少ないから詳しくコメントできないけど、
そういう目的なら勾配法でオプティカルフローを計算すればいいんじゃない?
243デフォルトの名無しさん:03/11/15 00:43
>>242
心電図とCT画像の同期と、ある程度の心臓の動きの様子を調べるのが目的だったから
簡単にするために2値化で心臓の輪郭だけ抽出して動き推定、って考えてたんだけど
その勾配法という方法のほうが原画像のまま詳しく調べられて便利かも。難しそうだけど

244232:03/11/15 02:20
試しに、画像の比率が変わるのは無視して512*512にサイズを変更してみたら、
理論値との誤差がほとんどなくなりました。
といってもまだファイル末尾に数バイトのゴミが残っていたので、
思い切ってそれを削除したところ、画像に変化はなく、
正常に読み込めるようになりました。

まだまだ勉強が必要ですね。
レスありがとうございました。
245229:03/11/15 07:54
>>237
そうしたのですが、ダメでした。
>>239
ここに書くのはまずいですかね。
今から出かけるので調度いいアプロダ探せません。すみません。
>>240
VB6.0で「画像データロード」で24bitBMPが表示されます。
次にコマンドクリックすると、表示された絵が少しずつ赤くなります。
絵が赤くなったあと、セーブを実行しているのですが元の画像がセーブされます。

やっぱりどこかでソース晒した方がいいですね。
247デフォルトの名無しさん:03/11/16 05:04
こんな感じに外部の画像ファイルを自分のページで加工ってできるの?
ttp://images.google.co.jp/images?hl=ja&lr=&ie=UTF-8&oe=UTF-8&q=a
image magickで外部ファイルって加工できないの?
248デフォルトの名無しさん:03/11/16 10:58
コイの動きを画像処理して、毒が流し込まれたか調べるんだってよ。
プログラムが糞で、やはり動かなかったらしい。

おまいら、こんな簡単な画像処理さえ出来ん役所のやつらに
納税者として何か言ってやれよ

> コイセンサーは取水場に2つあり、監視水槽(容量60リットル)5個で飼って
>いるコイ8匹が、有害物質を感じて異常な動きを示した場合、コンピューターで
>府村野浄水場に自動警報を送る。浄水場職員は、別に設けた観察水槽
>(同300リットル)のコイ8匹の様子をモニター画面で確認、対応策をとる。
>府は1994年以降、計3か所で導入している。

役所の板
http://society.2ch.net/test/read.cgi/koumu/1060611748/559
http://society.2ch.net/test/read.cgi/koumu/1060611748/l50
249229:03/11/16 21:14
>>246
ありがとうございます。
ソースを載せたので見てくれるとありがたいです。
画像処理後のセーブが出来ません。
「画像処理VB」というスレで立ってます。
よろしくおねがいします。
>>248
簡単かなぁ・・・ 動きの認識だし、魚って鳥と同じで3次元空間で動き回るし・・・
大量の毒を水槽に入れたら暴れて死にますが、
少量の毒を少しずつ与えれば動きが鈍くなって知らないうちに死にます。
後者の場合、コンピュータで判断なんて出来ないと思います。人間でも難しいですから。
動かなくなったら死亡、ではだめ?
腹が上を向いたら死亡
>>252
死んでも、水の流れとかで、多少は動くと思われw
動きの激しさは差分の二乗の総和で出るかも
昔から疑問なのですが、多角形を塗りつぶす処理として
ソリッド・スキャン・コンバージョンの他に色々な方法が
あると思うのですが他の方法としては、どのような方法が
あるのでしょうか?
検索キーワードだけでも良いので教えてください。
257初心者:03/11/18 12:15
すこし場違いな質問かもしれませんがよろしくお願いします。
現在デジタルビデオカメラでとった動画をUSB又は、IEEEとかで
取り込んでリアルタイムで解析して顔部分を抽出するといったことを
やってみたいのですが特別なキャプチャーボードなしでできるのでしょうか?
アルゴリズム的にはRGB−>HSV変換後に膨張圧縮といったモルフォロジ処理と
ラベリングによってノイズ除去して肌色を抽出しようと思っています。
c++の知識は少しあるのですがデバイスやwindows関連の方はよくわからないので。
調べたらvideo for windows とかdirect show等が使えそうかと思ったのですが。
一般に動画を汎用PCでリアルタイム解析したい時はどういった方法があるのか
どなたかご教授ください〜
>>257
PCカメラ買えばいいんでない?
ソフトはListcamか何かで。
書き込みの内容が初心者じゃねぇ!!と思ってるの俺だけかよ(´∀`;)y-~
260デフォルトの名無しさん:03/11/19 21:56
PS版メモ2の画像展開アルゴリズムは分かりませんか?
>>257
余計なお世話だけど、IEEEって学会の名前だよ。
そこで標準化された規格にIEEEホニャララって番号が付いてて、JISとかISOとか
ANSIと同じようなもの。
例えばプリンタポートはIEEE1284、100BASE-TXはIEEE 802.3u、1000BASE-Tは
IEEE 802.3ab…というように、コンピュータのインターフェースにはほとんど
この型番が付いている。
だからIEEE1394のことをIEEEと呼ぶのは(2chではよく見かけるが)、とても
恥ずかしいこと。
>>262
読み方は「アイ・トリプル・イー・いちさんきゅーよん」でおk?
すみませんでした。
知ったかぶりしてますた。
>>262
俺も昔ハードディスクをハードと読んだり
Mpegでも何でもないものをMpeg-4と言ったり
応答遅延をPingと連呼したりする連中に反感を覚えたものだが
今では分かるならば許容する境地に至った。
お前はまだまだだな。
MTFをFITSに変換するプログラムがほしいんだけど、誰かもってね?
>>266
MTF? FITS?
何それ?初めて聞いた。
269デフォルトの名無しさん:03/11/21 00:14
動的輪郭抽出モデル Snakes を
C言語で実装したprogramどこかに
おちてませんか
>>265
君はモニターをテレビと呼ぶ連中まで許容できるのか?
271デフォルトの名無しさん:03/11/21 10:02
2D-DFTはなんとなく理解できたんですけど、

短時間フーリエの画像への適用と、そしてどんな結果になるのかよくわかりません。

ウェーブレットぽい結果になるのかな。
俺はCD-ROMをROMと呼ぶ人にイラついたが、結局何も言わなかった。
ノイズ付加(画像拡散じゃなくて、粒子をばら撒く奴)
に挑戦したいのですが、
クグッても資料がなかなか見つかりません。
何かありませんでしょうか。
>>273
何をやりたいの?
ノイズを加算するだけじゃだめ?
>>274
jtrimで行なっている処理をやりたいのですが、
何からノイズを作っているのかよく分からなくて。
あれって、出鱈目に色を入れているだけなんでしょうか?
276デフォルトの名無しさん:03/11/24 17:08
135 名前:匿名希望[age] 投稿日:03/11/24 16:41 ID:7CqRY2+/
シャクライ氏のBBSに下記の内容を投稿したのですが
投稿文は削除され、私への返信に書き換わっています。
(投稿から10分で書き換えって早過ぎ)
シャクライ氏がここをチェックしている場合は
私への返信も削除されると思います。
ゴタゴタは嫌いなのでメールを出すつもりはありません。
(メール出したらIrisFilterの開発に勧誘されるのか?)
以後、静観致します。
---- 投稿内容 ----
題名:ゴタゴタの件     投稿日:2003年11月24日<月>13時48分
はじめまして。
某BBSの某特許申請ソフトウェアとゴタゴタについて
話し合いをするのスレから来ました。
私は4年程前に画像をピンボケ化させるツール(非プラグイン)を作成しました。
現在も仲間内のみで使用しており、今回のゴタゴタの行方には関心があります。
しばらくは静観の構えをとるつもりですが、
今回の一部ライセンス無料化はこのゴタゴタに絡むモノなのでしょうか?
#こちらのHPを拝見させて頂きましたが、
#誤記の中でも気になる部分を指摘させて頂きます。
#
# (誤)IrisFiler , IrisFitler
# (正)IrisFilter
>>257
IntelのIPP+OpenCV使って同じことやってるよ。
IPPは4.0βがただで使える。
確か前スレで参考リンクをまとめてくれた人がいたはず。

ちなみに2台のUSBカメラでテストしてみたが、
内1台からはまともに取り込めなかった。
>>277のやつ、Winならこんな感じのコードになる。(うろ覚え)
CCamera camera;
camera.Initialize(320, 240, -1, m_hWnd);
camera.Start();

CImage img = camera.GetFrame();

cvThreshold(img, ...); // 2値化
ippiFilterMax_8u_C1R(...); // 膨張圧縮
ippiFilterMin_8u_C1R(...);
cvFindContours(...); // ラベリングもどき
プリウスの自動・車庫入れに使われている技術って高度なものなのでしょうか?
あと車名忘れたけど高速道路で白線はみだしたら修正してくれるやつとか
>>279
プリウスの車庫入れアシストは画像認識なんかしてるようには見えないぞ?

白線認識はどっかで実用化した?
壁との距離計った方が現実的だと思うが。
白線認識もトヨタだね。
ttp://www.toyota.co.jp/toyota-navi/plus/lms.html

ちとアホな質問かもしれませんが・・・。

Bitmapを表示するビューアを作っています。
拡大表示したい場合に、バイキュービックやバイリニアを使って表示したいのですが、
この場合、拡大するサイズのBitmapを補完しつつ新たに作成して、それを表示する以外に
なにか方法はあるでしょうか?

というのも、手持ちのビューア(ACDSeeですが・・・)では、同様の補完方法を使って
拡大表示をしても、使用メモリ量がまったく変わらないのです。
上記の方法を使用すれば、大きな画像をさらに拡大した場合、ものすごいメモリを
使う羽目になってしまうはずなんで・・・。
あとは、例えばウィンドウサイズにあわせて画像を拡大・縮小するようにしたい場合などでも
同様に、メモリサイズに変動がないのが不思議なんです。

あとは速度の問題なんかもありますが・・・。
どうしても、2000/XPでのHalfToneによる表示の速度に比べると重くなってしまうので。

教えてください。よろしくお願いしますー
>>282
SetStretchBltMode
>283
それは、HalfToneで描写する以外にもなにかあるんでしょうか・・・?
とりあえずMSDNで見た限りでは何もなさそうなんですが・・・
HALFTONE=バイリニア
286デフォルトの名無しさん:03/11/29 08:44
>285
んなこたーない
拡大してみれ
いや、ビデオカード依存だと思ったが、たしかにStretchBltで拡大すると
バイリニアになったぞ。
HALFTONE は 95/98/Me だと使えないんじゃなかったかと
289デフォルトの名無しさん:03/11/29 23:30
そいえば、IPLって何処行ったの?
>>288
SDKのヘルプには使えないと書いてあるが、95でも98でも普通に使えたよ。
IE等のバージョンによって使えるのか、それともビデオカードのドライバに
よって使えるのか知らんが。
291デフォルトの名無しさん:03/11/30 10:46
白線認識は日産ホンダも実用化、搭載してたと思う。
シーマ、インスパイアあたりかな。
292デフォルトの名無しさん:03/11/30 13:46
画像のエンハンスメント処理って具体的にどんなことをすればいいんですか?
293デフォルトの名無しさん:03/11/30 21:50
画像処理の線形フィルタって何がありますか?
どういうフィルタが線形で,
どれが非線形かわかりません.
どなたか教えてください.
>>293
f(aX+bY)=af(X)+bf(Y)が成り立てば、fは線形。

卒業の時期だからかもしれないけど、盛況だねぇ。
恥ずかしがらずに詳しく書かないと回答できないよ。
大丈夫、教授は見てないよ、たぶん。
>>292
画像をエンハンスすればいいんじゃない?
296256:03/12/01 10:35
誰からもレスが無いのですが、多角形を塗りつぶす処理としては
ソリッド・スキャン・コンバージョンしか無いという事なのでしょうか?
自前で高速な処理を書きたいならそうだろうね。
3角形を高速に塗り潰してくれるハードがあるなら3角形に分解するし
298デフォルトの名無しさん:03/12/01 15:36
今、BMP画像を読み込んでRGBからYCbCrに変換し、Y成分だけにある処理を
行ってまたYCbCrからRGBに変換してBMPを生成する、というプログラムを
作成しているのですが、
輝度成分にだけに施す処理の部分を省いても、(RGB→YCBCR→RGBだけの、単純な変換・逆変換のみ)
生成される画像が暗く青っぽくなるのです。

変換・逆変換に用いている式はお決まりのあの式で、何度も見直したので間違いはないのですが。
オーバーフローしてる?っぽいのですが、今のところ検討がつきません。

BMPから読み込んだRGB情報→double型の配列に、
RGB情報をYCBCRに変換したもの→double型配列に、
YCBCRからRGBに変換したもの(BMP再生成に用いる)→unsigned char型に、
それぞれ入れてるのですがこれが原因??

ある簡単な画像生成プログラムのソースにあれやこれやと付け加えていっているので
もともとあった配列の宣言などはそのままなのです。

ただ、上記の宣言などでRGBのまま扱っているぶんには問題はありませんでした。
YCbCr→RGB の処理で double から unsigned char に落としているときに
値が 256 を超えるかどうかチェックしてみては?
書き込みを読んだ限りではそこが一番危なそうな気がします.

あと,念のためその「お決まりのあの式」も晒してみた方がよいかと・・・
>>299さん

ありがとうございます。チェックしてみます。

「あの式」ですが、以下のものです。

Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + 128
Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + 128

R = Y + 1.40200 * (Cr - 128)
G = Y - 0.34414 * (Cb - 128) - 0.71414 * (Cr - 128)
B = Y + 1.77200 * (Cb - 128)


ある文献にあったものをそのまま使っています。

もし、値が256を超えているようなことになっていたら、
どのような対処をすればよいでしょうか?
超えた値が 256 や 257 くらいだったら,誤差の範囲っぽいので
強制的に255にすれば済みそうですが,
もしももっと大きな値になってたらどこかで普通に
計算間違いをしている可能性があると思います.

明日、256overのものがどれほどあるか調べてみます。ありがとうございました!

計算間違い・・・余計な部分はすべてコメントアウトしてるので
>>300の式に間違いがなければどこで間違いがおこっているのか、
本当に検討つかないです・・・(´・ω・`)
BGRという並びをRGBとしてやってしまってるとか
>>303さん

BMPファイル取得の際、たしかに、
rgb[3][j][i]という配列に、
RGBの順で取得したつもりになってました。([0]がR、[1]はG、[2]がBで)

が、実際はBGRの並びなのですか?!
もしこれが原因なら激しくカッコ悪い・・・

あわせてこれも試してみます!
0より小さい場合も忘れるなよ
BMPファイルは仕様の通りに処理しないとハマルよ
ダミーが入ってたりするし
4bytes境界ルールとかね(w
308初心者:03/12/02 01:48
>>278,277ありがとうございます!。
一応video for windows で取り込んでバッファまではしたのですが
フレームを制御する方法がよくわからず秒間2,3フレーム程度でしか
表示できずに困ってます。10〜15フレームは欲しいのですけど。
USBカメラのスペック的には15フレーム/秒となっているんですが、う〜ん。
IPP+OpenCVってライブラリなんですか?ちなみに秒間どの程度の処理できてます?

309初心者:03/12/02 01:49
>>278,277ありがとうございます!。
一応video for windows で取り込んでバッファまではしたのですが
フレームを制御する方法がよくわからず秒間2,3フレーム程度でしか
表示できずに困ってます。10〜15フレームは欲しいのですけど。
USBカメラのスペック的には15フレーム/秒となっているんですが、う〜ん。
IPP+OpenCVってライブラリなんですか?ちなみに秒間どの程度の処理できてます?

310初心者:03/12/02 01:53
あと、肌色領域を抽出した際領域がバラバラになってしまうので、顔
をひとつのかたまりとして認識させるため2値化した後膨張収縮処理をしたのですが
照明条件によっては領域が分断されてしまうんですよね。
背景等のノイズは除去できたのですが、うまく領域をひとつにする方法は
ないでしょうか?2次元ガウシアンフィルタによる畳み込みがどうのとか
って話を聞いたことあるのですがよくわからないくて・・。
むやみに膨張するのも怖いし
311デフォルトの名無しさん:03/12/02 09:22
BMPの処理は、BMPから一度32ビットDIBを作ってやると楽だしわかりやすいよ(RGBデータが1ピクセル1DWORDの単純な配列になる)。
つか、web上に腐るほどサンプルあるじゃん
>>309
つーかOpenCVについてGoogleさんに聞いたらまさにそれっているページが出たんだが。
314298:03/12/03 05:00
皆様、ありがとうございました!無事画像生成できました!
というか、これからさらにいろんな処理をせねばならないのに・・・
先が思いやられます。


以前これの関係でモノクロBMPを弄くる機会があったのですが、
BMPのダミーにはしてやられました。
仕様を確認するのって大事ですね。
315初心者:03/12/03 07:59
>>319
よろしければURLを教えて頂けませんか?
ちょっと見つからないのですが・・。
>>315 てめぇ誰に向かって口きいてんだ(わらぃ

ここなんか,まさにそうじゃないスか?
http://limu.is.kyushu-u.ac.jp/~yosimoto/work/opencv-howto/index.html
http://limu.is.kyushu-u.ac.jp/~yosimoto/work/opencv-howto/intro-opencv.html
317デフォルトの名無しさん:03/12/03 13:27
ビットマップ->JPEG変換で、

デバイスコンテキストなんかに書き込むと、
メモリを積んでもリソース不足エラーが発生したりします。

デバイスコンテキストを経由しないライブラリなんかあったりしませんか?
>>317
ふつうにあるだろ?
libjpegとか
>>317
質問が曖昧
> 310
なんで、顔認識をやるのに、肌色を抽出するかわからん。
白黒画像にたいして、周波数空間上で、統計的に認識処理
させる方が、精度が高いと思うけど(処理負荷は大きい)。
321初心者:03/12/04 02:04
>>320 助言ありがとうございます!
周波数空間上で顔領域というのがどういう特性を持ち、どういった統計処理
により抽出できるのかちょっと検討つかないのですが一般的なのですか?
テンプレートマッチングは計算コストとライブラリの作成等汎用性ひくいので
見送ったのですが、それは盲点でした。具体的にはどういう処理なのでしょう?
処理負荷は小さい方がいいですね。一応汎用PCとUSBカメラのみでリアルタイム
処理を試みているので。
>>289
IPL→IPP

>>308
IPPはこちらから
http://www.intel.com/software/products/ipp/beta/
右上のEnroll Nowからユーザ登録しなきゃいかん
ビットマップを32bitと24bitに
相互変換するコストってどれくらいあるのでしょうか?
実は32bit専用と24bit専用の画像フィルタがあって、
ソースを書き直すべきか迷っているんですが。
>>323
24-32ビットDIBの変換処理コードを書くコストという意味なら、ただ
4バイト境界を計算して3バイトずつコピーしていくループを書く
だけ。Cで書けば数行かな。

処理速度なら、迷う前に数分もあれば実際に書いて確認できるよ。
325デフォルトの名無しさん:03/12/07 01:16
カメラで画像を撮影したとき
三次元xyz座標を
ピンホールカメラモデルで二次元uv座標に変換するらしいのですが,
どうやって対応付けしているかわかりません.
わかりやすいWebか本ありませんか.
>>324
ども。自分で試しましたが意外と食いますね。
こりゃ、全部32bitでソース書き換えたほうがよさそうだ。
何を食ったんだろ?
24ビットDIBが食いそうなも
JMF(java media framework)で画像処理やってる人います?
Intel Jpeg LibraryをVCで使いたいのですが、intelのサイトから消えてしまって
いて困っています。
どこかDLできるサイトは無いでしょうか?
サンプルもあるとありがたいのですが・・・。
331330:03/12/08 20:42
自己解決しますた
スマソ
>>331
せっかくなので、どうやって自己解決したか詳細キボソ
画像を任意に回転させるAPIってないの?
Direct3D使わないとダメなのかなぁ・・・

誰かソース公開してないかなー?
画像ってなに> ビット列?HBITMAP?
回転ってなに>回転後のイメージを取得? 回転させて描画?
ビット列、回転後のイメージを取得です

例えば2Dのサイズ(100, 100)の画像を30度に傾けた時どうなるのかとか・・・・
□□□□□□□
□■■■■■□
□■■■■■□
□■■■■■□
□■■■■■□
□■■■■■□
□□□□□□□
↓回転後(こんな感じに)
□□□■■□□□□
□□■■■■□□□
□■■■■■■□□
■■■■■■■■□
□■■■■■■■□
□□■■■■■□□
□□□■■■□□□
□□□□■□□□□
>>335
自力でやる例ならこれとか。

http://www.sm.rim.or.jp/~shishido/kaiten.html
>>335
ならアフィン変換でぐぐれ
340335-336:03/12/11 23:41
>>337-339
おお、ありがとうです!
がんばるますです!
341335-336:03/12/11 23:46
337さんが示してる先の1番目のCのページ良さそうですね。
あと338さんのサイトのも。

・・・・・sin,cos???うーん、これは高度な知識だ・・・・
アフィン変換・・・ぎょ、行列!(ひー


負けずにがんばります!
sin,cosくらい小学生でもわかるだろ・・・
343デフォルトの名無しさん:03/12/12 15:25
>>341

三角関数(というか三角比)は、自分で図を描きながらイメージをつかめばそう難しくないよ。
内挿(補間)もちゃんとやれよ
共一次補間とか、3次畳み込み補間とか
どうでもいい昔話だが、
フォトショップ2.5だったか、「畳み込み」が「叩き込み」と誤訳されていた。
>>345
( ・∀・)つ〃∩ ヘェーヘェーヘェー
347名称未設定:03/12/16 08:06
最近iBookG4を購入したので、LINUX上で趣味で作っていた画像処理プログラムをMACのOSX上に移行させて動かしてみたいなと考えています。
LINUXで作った画像処理プログラムをMAC上でメイクすると
symbol _inflateInit_ used from dynamic library /usr/lib/libz.1.1.3.dylib(inflate.o) not from earlier dynamic library /usr/lib/ libz.1.dylib(inflate.o)
といったエラーがたくさん出てしまいます。
また、
ld: Undefined symbols:
_DGifCloseFile
_DGifGetExtension
_DGifGetExtensionNext
_DGifGetImageDesc
_DGifGetLine
_DGifGetRecordType
_DGifOpenFileHandle
_PrintGifError
とgifに関するエラーも出てしまいます。
makefileの中で
CFLAGS=-g -O2 -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 -lXmu -lXi -ljpeg -lpng -ltiff -lz -lm -lImlib
とリンクしてあるんですが、ここがおかしいんだろうなってことまではわかったんですが、それ以上すすめず行き詰まっ てしまいました。
-L/usr/X11R6/libの後ろに続くオプションの部分がおかしいんでしょうが、
知り合いにもらったプログラムを画像処理に全然詳しくないまま組んでいるんで、オプションが何を示すのかも知らず、どうすればいいのやら・・・
画像処理プログラムにくわしい方、ご助言お願いします。
348347:03/12/16 08:08
ちなみに"X211による画像処理 基礎プログラミング"という本に書かれている通りに

単にWindowを表示するだけのプログラムを作り、

cc window.c -o window -L/usr/X11R6/lib -lXm -lXt -lX11

と打ってみましたがコンパイル出来ず、

ld: can't locate file for: -lXm

とエラーが出てしまったので、

cc window.c -o window -L/usr/X11R6/lib -lXt -lX11

としてみたところコンパイル出来ました。

次にterminal上で実行してみたところBus errorとなってしまいました。

そこで、ユーティリティーフォルダにあるX11上で実行させてみたところ

今度はうまく動きました。

その場その場で試してみてるので、なぜ動いたかとか全くわからず・・・

やっぱり難しいですねぇ。。
MACは画像処理が苦手だからな
>>347

いっそJava2で書き直した方が楽かもな。

351デフォルトの名無しさん:03/12/17 18:10
pngファイルの色変更ってプログラムで、できますか?
携帯アプリのため、容量制限の関係で、ファイルを沢山もてません。
具体的には、1パターンの人間の画像をjarに入れておいて
服の色、頭の色違いで何パターンか元ネタから、プログラム内で生成したいのですが・・・

やり方や、サンプルなどご存知の方がいらっしゃいましたら教えてください。
352デフォルトの名無しさん:03/12/17 18:16
>>351
画像処理を携帯でやるのは携帯の目盛りの関係でちょっと厳しいものあるかもしれません。
サーバサイドで計算させるなどの方法を取る必要があるかもしれませんが、
あながたプログラミングの鬼と自負するほどならば可能です。
サンプルですがここで聞くよりgoogleに頼った方がいいと思います。
353デフォルトの名無しさん:03/12/17 18:34
>>352
ありがとうございます。
先ほどからgoogleで色々探しているのですが、みつからないんですよ。
pngてパレット持てなかったっけ。
パレット変更じゃ駄目なの?
355デフォルトの名無しさん:03/12/17 18:57
>>354
実現できれば何でも、かまわないんですが
なにせ、そのあたりの知識が乏しいもので。

ご教示いただけると、ありがたいです。
調べてみたらパレット変更できない機種が多いのね。。。期待させてスマソ。
357デフォルトの名無しさん:03/12/17 20:16
>>347
微妙にスレ違いだけどレスしてみます。
Gif 関連のエラーが沢山でるのは、
Unisys の特許の関係で最近の各種ライブラリではGif関連の関数が削除されてるから。

348 の方は、unix で window を表示したりするのには X11 の APIを用いるんだけど、
あらかじめ X サーバー(ユーティリティの X11 がそれ?) を実行していないとAPIでエラーになる。
簡単なサンプルプログラムだとエラー処理が甘くて bus error になるんだと思います。
358347:03/12/17 22:59
スレ違いでしたか。。。なにぶんこういうとこに書き込むこと自体慣れないもので。。。申し訳ない。
なるほど、Gif関数がないって言われてるなとは思ってたんですが、
特許関係で削除されてたのですね。
とりあえず、include関連が怪しいなと思い、
/sw/include/のImlib.hやImlib_private.h, gif_lib.hなどを調べてみると、
Imlib_private.hの中でgif_lib.hがincludeされており、
そのgif_lib.hの中で>>347で書いたようなGif関連の関数が宣言されているようです。
しかし、そこまではわかったものの、その関数の実装がどこで行われているのかはわからず、
また、わかったとしてもそれからどうすればいいのかと路頭に迷ってしまった状態です・・・。
とりあえず僕の作るプログラムではjpegを扱い、
そのgif関連の関数は必要ないので、
その参照を削除出来るのなら、そうしたいですし、
別にImlib_load_image関数にこだわりはないので、
jpegを呼び出して画像処理をいままで通り行える関数があれば全然それでOKなんですが・・・。
ちなみにImlib.hはfinkというUNIXのOpen Source softwareをMac OSXに移植するソフトを用いてインストールしたもので、
finkを用いてインストールしたものは/sw/に置かれるようです。
359デフォルトの名無しさん:03/12/18 10:48
>>356
実現は不可能ということですか?
>>359
色替えした画像を生成したいだけなら
png画像のパレットを変更すりゃいい。

オープンなフォーマットだから資料はたくさんあるが。
ちょっとはググったのか?
361デフォルトの名無しさん:03/12/18 14:33
>>360
ググったのですが、いまひとつわかるものがありませんでした。
>>361
じゃあ、あきらめろ。お前には無理だ。
俺ですら、だいぶ昔にぐぐってPNGの仕様書持ってるぞ。
ん?PNGの仕様よりも
>調べてみたらパレット変更できない機種が多いのね
これが問題なんじゃないの?

いや、俺はまったく知らないんだけど。
364347:03/12/18 16:49
自己解決しました。
make時に-lungifと指定することでコンパイル出来ました。
PNGは、CRCがあるのでGIFのようにパレットを動的に生成できないというのを
どこかで見ましたが。
366デフォルトの名無しさん:03/12/19 01:20
 RGB(sRGB or Adobe RGB) → L*a*b* の変換式について詳しいサイト
or 参考書ご存知の方います? 原典がはっきりしないサイトは幾つか
あるのですが、厳密性が欲しいので今ひとつ信用できません。
 物理的な測定器で計測可能な「色」に関する情報は文献に載っている
のですが、デジタルな話になると係数等諸説入り乱れているようでちょ
っと困っています。詳しい方教えてください。
367366:03/12/19 01:48
このスレで画像処理関連の良書を晒してみませんか?

 教えてクンではあんまりなので、自分から晒すと
・C言語で学ぶ実践画像処理―Windows、Macintosh、X‐Window対応
 ISBN: 4274946193
・ディジタルカラー画像の解析・評価 三宅 洋一
  ISBN: 413061116X
・色再現工学の基礎 大田登
 ISBN:4339076449
こんな感じです。
>>367
ちょっと高いけど…

・コンピュータグラフィックス 理論と実践
James D. Foley(著), Steven K. Feiner(著), Andries van Dam(著),
John F. Hughes(著), 佐藤 義雄(翻訳)
ISBN4-274-06405-0 オーム社

これで、かなり勉強になった。
>>366
CRCくらい計算すりゃいいだろ。
動的に生成できないなんて言う奴は静的(ってなんだそりゃ)にも生成できない。
370366:03/12/20 10:47
>366
事故レスですが
http://www.w3.org/Graphics/Color/sRGB.html
のColorimetric definitions and digital encodingsに sRGB については
資料がありますた。
AdobeRGB 誰かわかりませんか?
371デフォルトの名無しさん:03/12/20 11:10
A4一枚って、bmpで何ピクセル*何ピクセルですか?
A4の紙を想定したbmpの、好きなピクセルを書き換えられるペイントユーティリティーを作りたいのですが。
ちなみに、楽譜の編集データ(独自フォーマット)を最終的にbmpに仕上げるのが目的です。
372デフォルトの名無しさん:03/12/20 11:28
>>367
ディジタル画像処理の基礎と応用―基本概念から顔画像認識まで
>>371
解像度によって違う。
独自フォーマットなら自分で決めたらいいぢゃん。
374デフォルトの名無しさん:03/12/20 23:02
フォトショップとかで使われてる「レベル補正」は
どういう関数なのか、教えてください。
375366:03/12/21 01:19
> 374
 実装的には、あるレベル範囲を切り出すための適当なLUT(lookup Table) を
作成し、それに変換元のデータを入力しテーブルの出力を補正後のデータとし
て書き出すって感じでしょうか。プログラミング言語的な関数という意味では
この仕組みを実現するような関数と考えればよろしいかと。

 LUTの中身が普通に数学でいう関数になりますが、式的には
8 bit 決めうちでは
out' = (input - [min]) / ( [max] - [min] )
out'' = pow( out', [gamma]) * 255.0 ※ pow(x,y) は、 x の y 乗の意味
out = out' を 0 〜255 の整数に変換
という式になると思います。(酔っているので、自信なし。)
 ほとしょっぷのダイアログでは、[min], [gamma], [max] の順に
パラメータ用のテキストボックスが並んでいます。
376デフォルトの名無しさん:03/12/21 01:26
getpixel()ってpng読めますか?
377デフォルトの名無しさん:03/12/21 14:22
>>369
どうやって?
378デフォルトの名無しさん:03/12/22 01:16
DirectShowでオプティカルフロー使って物体の追跡の画像処理してるものです。
大きさが320*240でそこそこ新しいマシンでやってるんですけど、秒間
数フレームしか出ません。メモリーのコピーしまくりとかで、へたくそなプロ
グラム書いてるせいもあるんですけど、性能として大体こんなもんなんでしょうか?
10fpsぐらい出したいんだけど・・・
379デフォルトの名無しさん:03/12/22 02:28
snakesについて解説してあるサイトってないの?
> 378

どういう計算かしらんが、今のPCスペックで、浮動小数点演算ベー
スで秒数フレームぐらいかと思う。8年前のWSでは、10秒に
1コマぐらいだったような。
>>378
その手の処理は FSB 800MHz (400MHz x 2) の Pen4 でやると結構いい感じですよ。
漏れフレーム全体をコピーしまくってあれこれしまくっても 60fps 出てるもん。

ってのはともかくとして、最終的に 320x240 の映像を処理するにしても、
途中の段階では160x120 とかに間引いて計算するのも良いと思う。
動いてないとこなんてそれで十分わかるし。
382デフォルトの名無しさん:03/12/24 19:42
初歩的な質問かもしれませんが、
ヒストグラム平滑化の方法について教えてください。
お願いします。
383366:03/12/24 21:26
ネタですが、お仕事の余興でEXCELのVBAで画像処理をやらせるというもの
作成してみました。
 マクロぉ??、VBA??って思う方々も、多数おられると思いますが、
意外にそれなりに実用的な速度で動きます。
#無論、肝心なところはVC++で書いていますが(謎)

>382
・C言語で学ぶ実践画像処理―Windows、Macintosh、X‐Window対応
 ISBN: 4274946193
にのってたような気がしますが定かではないです。
暗いほうからi番目の画素値を持つ画素の全画素に閉める割合を Pi として、

    n
Hi = Σ P(i)
    i=1

てな感じで新しい値を計算すればよいと思うけど。
(Hi は 0 〜 1.0 となる)
385382:03/12/25 10:16
ありがとうございます。
助かりました。
モザイクを消すにはどおすればいいですか
-==・==- -==・==-
ttp://ww2.tiki.ne.jp/~masatsu/java/html/sharpimage.htm
のページを参考にして、中心を5倍して、周囲4マスのピクセルをひく、ラプラシアンフィルタを
かけたのですが、画像が青っぽくなるだけで先鋭化されません。
原因がわかるかたいらっしゃいませんか?
>>386
想像で補え

>>388
おまえ、ラプラシアンフィルタの原理分かってないだろ?
R,G,B別に処理するんだよ。
tiffの仕様書読んだけどほとんど理解できなかった。
bmpとかpgmとかは簡単なのにな....
pgmって何?
>>391
画像フォーマット...って流れから言って分らないか?
もっと哲学的な意味で「何か」と訊いているんだよ。
世界を2極論で語るやつと3要素の組合せによるベクトルだと語るやつの間にあって、
世界はスカラーだっていうやつ
っていえばいい?
超先生って誰?
お前それだけは言っちゃならなかったんだ・・・
>>294
そんなあたなにコンボリューション
>>389
アドバイスありがと。
リンク先と同じやりかたなんだけど、rgb[k]の部分でRGBは別々に処理してます。

399389:03/12/25 23:14
>>398
それなのに青くなる?
オーバーフローとかの単純ミスと思われ。

とりあえず、変換前後の画像をうpしる
400デフォルトの名無しさん:03/12/26 21:17
>390
↓これと、アドビのTIFF仕様書と現物を付き合わせながらやればOK。
http://park2.wakwak.com/~tsuruzoh/Computer/Digicams/exif.html
 とりあえず、ヘッダーの解析プログラムをとか書きながら調べてい
けば理解はそれほど難しくは無い。がんがれ。
401デフォルトの名無しさん:04/01/02 03:08
領域内にさまざまな形のテクスチャをなるべく隙間なく敷き詰めたいのですがよい方法ございませんでしょうか?
>>386
ピクセルがモザイクよりも小さくなるように画像を縮小する
403デフォルトの名無しさん:04/01/02 21:47
>>402
そのあと三次補間で拡大すれば
ほらビックリ
モザイクは無くなった
海外掲示板用オフラインリーダーを作るスレ
http://pc2.2ch.net/test/read.cgi/tech/1072883528/

海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。

必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
>>402,403

そんなことしないでも、写真画像にX線・赤外線・統計暗号復号による透視解析をかけるWinedows .COMの隠しAPIを使えば、モザイクだろうが着衣だろうが一発で消せるよ。
画像処理のコードがかけるプログラマーって、普通のプログ
ラマーと比べて、世間的には、どう評価されるのでしょうか?

ただ、業務内容といっても、

・応用的なアルゴリズムの研究、設計、試作。
・研究屋の作ったソフトのパフォーマンス、メモリチューニ
 ング。
・画像関係ミドルウェアを、DSP、アセンブラを使ってチューニング等、
・論文のアルゴリズムをゼロから実装。。

とまあ、いろいろありますが。。。
>>406
「普通のプログラマー」にもいろいろあるからな
どうと言われても・・・
その知識が会社にとって必要かどうかってだけでしょ?
パイロットと船乗りを比べてるようなもんだ。
409某画像処理系似非プログラマー:04/01/05 00:29
>>406
 猫でも分かる程度のプログラミング知識でメシを食っているも
のですが....。
 画像処理自体、プログラミングという手段なしになんともなら
ないので、できる人がいない職場で需要があれば無茶苦茶重宝さ
れます。居る職場では、もまれたことがないので分かりません。
考えるのも恐ろしいですが(謎)。

 ちなみに、本業では画像の定量評価手法の開発、官能評価支援
なんぞでメシ食っております。が、こんなのポインタが分かって
猫でも分かるを見れば誰でも分かるジャンとも思えるので、微妙
に怯えることもしばしば。いったいどうなんでしょう、自分も気
になります。
410たなかやん:04/01/05 01:00
いくらくらいの給料もらってんの?
411たなかやん:04/01/05 01:00
いくらくらいの給料もらってんの?
> 409
うちの職場も、天然記念物に近い。プログラムはそんなに難しくはない。
ただ、英語と数式が混じった資料を読んで、機能に応じた計算式の簡略化、
実装、チューニングできるのは、強みだと思うけど。

あと、画像処理以外にも、並行処理の設計、サブシステム単位の設計をしている。

> 411
手取り20〜30万(マンション代別)、数学という技能を売りにしている割に
は、安いかな? まだ、初めて2ねんなので、この春のチャージUPにきたい。
まあ、この時代、贅沢しなきゃこれぐらいでもじゅうぶんだが。。。

411のハンドル名だけど、風の噂で大学をやめて、VJ/FLASH/CGプログ
ラマーになった奴と同一名だが。。。
2年目で手取り2、30万ですか。
・・・はぁ、転職するかなぁ・・・。
>官能評価支援
違う物を想像しちゃった。
415デフォルトの名無しさん:04/01/06 02:20
需要供給のバランス取れたら初年から50〜60万くらいいける
>>414
エロ画像の自動分類とかに使えそうだな
そして苦しそうな顔の力士が大量に混在するフォルダが出来上がると……
煽りと思われるかもしれないけど、>>409>>412 の文章が読みにくいと思うのは私だけ?
画像処理技術者は文章が下手なのか?

そんな私も画像処理技術者。
読みにくいかどうかの判別に自信が無いなら一々書くな。
420デフォルトの名無しさん:04/01/06 12:46
>>419
日本語も勉強しような。
半島語は世界一ッ!
私だけ?うざい
423デフォルトの名無しさん:04/01/06 23:54
> 418
左利き、右脳優先脳なので、文章表現は苦手かも?
424デフォルトの名無しさん:04/01/06 23:57
優先脳?左利き、右脳は苦手かも文章表現なので、
すみませんが質問させてください。
フォトショップとかにある投げ縄ツールのように、
閉じた曲線で平面上の領域を指定したいのですが、
どんなアルゴリズムを使ったらよいものだかわからないでいます。
たとえば特定の座標が曲線の内側か外側か判定するのは、
いったいどのようにしたらよいのでしょうか?
>>425
領域内の全ピクセルを塗りつぶす要領で。
427425:04/01/07 21:48
とりあえず何となくアルゴリズムわかってきたんで
実装してみます。
どうもありがとうございます。
指定された領域でリージョン作るんじゃないの?
429デフォルトの名無しさん:04/01/07 21:57
境界内の塗りつぶしが分かってるなら何の問題もない

ベジエ等の曲線式から境界の座標を全て求めて境界を作り
あとは普通に塗りつぶす
YUVについて質問。

YUVって輝度と色差ってのは知ってるんだけど、
RGB=(Red,Green,Blue)みたいな、それぞれの頭文字が示す英単語がわかりません。
gooの辞書でも駄目ですた。知ってる人いたら教えてください。
BMP画像を使って縦横に複数の画像をマッチングし、高視野の画像を作成したいのですが、
どなたかこれに関して役に立ちそうな情報や、サンプルプログラムがあるホームページ、書籍などを
教えてください。お願いします。使用言語はCです。
>>431
広視野? スティッチング?
433431:04/01/08 20:35
>>432
すいません、広視野です。画像は、一定の高さからカメラをずらしながら
地面を撮影したものを使います。
>>430
YUVは単語の頭文字とかじゃないよ。英語で表記するなら
Y=Luminance
U=Chroma Blue(Cb)
V=Chroma Red(Cr)
かな
U,V は値を二次元で表記するときによく使われる文字。(x,y,zなどと同じ)
Y は Yellow の略だという噂を聞いたことはあるけど、本当かどうかは知らない。
XYZ色空間のYじゃなかったっけ?
436430:04/01/09 00:53
>>434
>>435

疑問解決。ありがとうございました。

これから特徴点抽出&仮想空間生成プログラムと
一晩をともにしてきます。デバッグまじで死ねる・・・。
>>434

> Y は Yellow の略だという噂を聞いたことはあるけど、本当かどうかは知らない。
CMYKならそうだが。
438デフォルトの名無しさん:04/01/09 11:53
Yはluminancyのyなのです
439デフォルトの名無しさん:04/01/09 12:34
よくある二次の射影変換をする式(8つくらいの係数を求めるやつ)
でなくて、任意の角度で自由に射影変換したいのですが、
そういう式はあるんですか?
YUVとLUVっておなじ?
Y・U・V!Y・U・V!
>>439
二次?二次元?
任意の角度とは?
そのよくあるやつを晒して、どこが不満かいってみ
443デフォルトの名無しさん:04/01/09 14:40
画像ボードからの画像情報をsimulinkブロックとして組み込みたいのですがどうも・・・
ボードの関数はCなのでs-functionを使ってDLLファイルまでは作成できたのですが、
実際(外部モードで)ブロックを動かそうと思うとうまくできません。RTWの設定?なの
か・・・
こんな感じのデバイスドライバやA/D変換等にくわしい方はいますでしょうか??
よろしくデス!!
444439:04/01/09 16:58
>>442
b1*x+b2*y+b3
X= -------------
b7*x+b8*y+1
(Yは省略)
というのが二次元の射影変換式ですが、画像を自分の決めた角度で
回転させたい時のb1〜b8の係数の決定の仕方が分からないんです。
x、y、z軸に対して回転させるマトリックスを使うと思うのですが、
そこからどうやってよいのか分かりません。
445439:04/01/09 16:58
すいません、ずれました…。
>>444
座標変換してから普通に投影すれば?
四元数(クオータニオン、ハミルトニアンとも言う)を調べること。
libjpegの使い方がまったくわかりません。
何か良いサンプルプログラムはないですか?

最終的にやりたいことは、
char配列でRGB値を持っているので、
そのデータを渡して、jpegで書き出す。
ということがしたいです。
448439:04/01/09 17:15
>>446
普通に投影したほうが早いですかねえ。
クオータニアンですか、調べてみます。
ありがとうございます。
>>448
クオータニアンで検索すると1件しか出てこないぞ。よく見れ。
450439:04/01/09 17:26
>>449
クオータニオンですね、失礼しました。
>>447
お前はlibjpegのマニュアルを読むのにどれだけの時間を費やした?
>>451
3時間。
454デフォルトの名無しさん:04/01/09 23:24
> 447
ソースがあるなら、example.cというそのまんまのソースが入っていたと思うけど....
>>439
何をやりたいのかよくわからんが、これじゃだめなのか?
ttp://mailsrv.nara-edu.ac.jp/~asait/open_gl/linear.htm#section22
456デフォルトの名無しさん:04/01/10 16:13
>>444
二次元なのになんでZ軸がでてくるのか分からない

二次元の座標値をただ回転させたいだけなら
二次元のアフィンだけでよさそうなものを
457439:04/01/11 06:27
>>455,456
二次元の画像を3軸に対して回転させたとき、
どのように画像上に投影されるか、ということです。
つまり、奥にある物体ほど小さく投影され、手前なほど
大きく投影される、ということです。
説明不足ですいません。

なんとかすることができました。みなさんありがとうございます。
卒業研究の時期ですね。
ここに投稿する前に、先生やお友達と相談して、せめて意味が通じる質問にしてね。
ショボイ卒研やな
>>457
回転と投影は全然別の処理と思えるのだがよ
461デフォルトの名無しさん:04/01/14 17:20
下のようなライブラリを探してます。

DV形式(AVI)ファイル→MPEG
DV形式(AVI)ファイル→JPEG

例えば、DVのコーデックがカノプのものだったりしたら、
自作以外方法がなかったりしますかねぇ。
>>461
DirectShow使えば?
463461:04/01/14 17:30
>>462
プログラミングでやらないといけないんでつ。(DirectShowのCOM使えるのかな?)
Elcard あたりのエンコーダ買ってDirectShowでやれば?

>プログラミングでやらないといけないんでつ。(DirectShowのCOM使えるのかな?)
DirectShow ってプログラムで使うためのものなんだけど……
465デフォルトの名無しさん:04/01/16 15:03
いろいろ探したんだが、見つからないので、こちらに書かせてもらう。
バイキュービックのソースコードが落ちているサイトはしりませんか?
英語でもかまいません。
数学的なことを書いてあるサイトはあっても、実際の実装法を書いているサイトが見当たらなかったので。
>>465
数式見て実装が思い浮かばないようなら諦めた方が……
>>465
「BiLinear Image Scaling Source Code」
あたりでググってください。大量にある
468デフォルトの名無しさん:04/01/16 15:41
>>466
まぁ〜慣れって部分もある気がするし
469デフォルトの名無しさん:04/01/17 00:15
> 467
nearestや、bilinearは腐る程ひっかかるが、cubicはほとんどない。
まあ、gimpや、image magikに、実装はされているので、
ソースをのぞいてみる事をおすすめする(最適化されているので、
みずらいが)。

> 466
cubicは16点補完なので、実装がめちゃめちゃめんどくさいと思う。けど。


>>469
最適化を考えないなら、
水平方向に4点補間したものを
垂直方向に4点補間すればいいから
簡単でしょ。
>>465
便乗。
bicubicの数学的根拠が書いてあるサイトを教えてください。
ベタで良ければソース書いてあげるからさ。
んでは便乗で・・・

ここの7/7のとこに乗ってる、Lanczos2/Lanczos3 フィルタのソースを書いてください。
ごめん、URLわすれた・・・

http://www.marumo.ne.jp/db2001_7.htm
ちなみに、バイキュービックの重み計算の公式はここの12/18にあります。

http://www.marumo.ne.jp/db2000_c.htm
475471:04/01/17 12:55
>>474
違うよ。どうしてそういう係数なのかとか、どういう性質があるのか、ってこと。
3次で補間してるのわかるんだけど、例えば上のページで妙に具体的に書かれている式は、
なにか根拠があるのか、経験的なものなのか、亜流の式でもbicubicって呼ぶのか、
そういうことが知りたいわけ。

lanczosだと(あそこに書いてあることだけ実装するなら、だけど)
各ピクセルごとに
(1) 係数を計算する
(2) たたみ込む
だけだけど、それでいいの?
「イメージプロセッシング<画像処理標準テキストブック>」
財団法人画像情報教育振興協会
でも読んで勉強しとけ
>>475
sinc 補間 (無限タップ) を 3 次式使って近似して
左右 2 点の 4 タップフィルタにしたのが 3 次補間。

ただそれだけ。

sinc 補間に関してはサンプリング定理とか調べれば
判るでしょう。
うるせー馬鹿
さっさとソース出せ
479472-474:04/01/17 14:15
ごめん、474のは>465向けに書いたつもりだった。

んじゃ、PDFだけどこんなのは?

http://mikilab.doshisha.ac.jp/dia/monthly/monthly01/20011222/personal_kawasaki.pdf

正直、数学はさっぱりなんで、内容が正しいのかもわからんけど。
あとは、昔のCマガにその辺の詳しいことが書いてあったけど、今は手元に無い。

俺としては理論は置いといて実装できればいいので、>473のを
プログラムに使える形の式にしてもらえればありがたいっす。

おまいは数学どころか全てのことがさっぱりだな。
>>479
つーかそこでソースも公開してるじゃん
ttp://www.marumo.ne.jp/auf/
の「lanczhos 3-lobed 拡大縮小」と
「3次補間フィルタ」ね
>>476
入門編とそうじゃないのとがありますが、違いはあるのでしょうか?
通常のやつが入門編の内容を含むものだったら、1冊だけ買いたいなと。
>481
知ってるよ。まあ、解析するのをサボって聞いた俺が悪かったよ。
そう思って今見てみたけど、重み計算はそのまんま当てはめてるだけだね。

あと、バイキュービックは俺には関係ないし。

あのさー、質問する奴は名前欄に何か入れとけよ。
誰が誰だか分からん。
485475:04/01/17 17:52
>>477
ありがとう。ホントにどうもありがとう。
なるほど、そういうことですか。知りませんでした。

sinc補間とかサンプリング定理とかは一応知っているつもりだけど、
そういう本には逆に一般的に名前が付いているフィルタのことは書いてないので
知りたかったんです。
で、結局ここにソースがかかれることは無いわけだ
できないんならグチャグチャ言うなっつうのな
>>486
お前が書けよ
488デフォルトの名無しさん:04/01/21 00:11
> 486
守秘義務があるのでソースは出せない。
489デフォルトの名無しさん:04/01/21 16:57
bmpファイルを配列にして画像処理したいんやけど
参考サイトありませんか.
教えて下さい.
>>489

http://www.sm.rim.or.jp/~shishido/

ここの「DIB・グラフィック処理実験室」。
気圧観測値(990とか1024とか)の入った配列[113x65]を
5倍に引き伸ばしたいのですが、うまい補間方法はありますか?
ざっと探してもとっかかりを掴めないのでヒントきぼんぬ。。

画像と関係ないかもしれないけど
画像処理のノウハウを使えそうなので。アヒャ
関係ないよりも意味わからん。
いったい何を5倍に引き伸ばしたいってんだよ。
配列には北緯・東経1度刻みの気圧データが入っています。
左上の[0,0]が東経0度・北緯90度とすると
[0,10]は東経0度・北緯80度、[100,30]は東経100度・北緯60度 のような按配で。

データの解像度が1度刻みということになりますが、
113x65ピクセルの画像を565x325に綺麗に拡大する要領で
擬似的に解像度を0.2度刻みにageたいのです。ウhラー
画像と同じでいいなら、共一次補間とか、三次畳み込み補間とか
リアルズームテクノロジーってどんなコード?
ほげー
バイリニアってやつですか。
文系のヴァカには少々難しい補間技術ですねえ。。。
がんばって勉強しますm(_____)m
バイリニアって中学生1年生レベルだよ。
499デフォルトの名無しさん:04/01/22 00:55
>>498
確かに一次関数で切片と傾きのことを理解してりゃ
中学一年生でも分かる範囲だな

三次なら中学三年生くらいかな
500Gets!
>>496
これ? tp://www.isl.co.jp/PRODUCT/DZP_DXS/05.html
502デフォルトの名無しさん:04/01/27 22:55
何個か質問させていただきます。

・オプティカルフローについて
 f(n)とf(n+1)にてオプティカルフローを適用する場合、
 ベクトルを描くのはどちらのフレームですか?

・円の描き方
 ある座標を中心に半径10ピクセル以内を最大輝度値にする場合、
 どういうアルゴルリムがありますか?

おねがいします〜
ベクトルを描くってことは、人間に見せるのが目的でしょ?
その目的に応じたわかりやすい方でいいと思うけど、
どっちが多いかというなら、移動結果とベクトルを重ねてる方が多そう。

10ピクセル限定なら(あるいはその前後に限定されるなら)、
20x20程度のビットマップにあらかじめ描いておいて、ORする。
一般的な円ならこちら参照(後者の方が解説が丁寧)。
ttp://www.edu.ics.saitama-u.ac.jp/~i736tt/cg/cg2.html
ttp://www2.starcat.ne.jp/~fussy/algo/algo2-1.htm
そして、座標を求めて塗りつぶす。
505デフォルトの名無しさん:04/01/28 23:17
メディアンカットの資料どっかない?
うまく見つけることができないんだけど。
506デフォルトの名無しさん:04/01/28 23:39
> 505

libjpegのjqunat2.cというファイルにソースが乗っている。
MMXつかってBitmapを処理する場合は、32bitに変換しないと無理ですか?
>>507
(大半のピクセルについて)ピクセル単位の処理がいらなかったり、
R,G,Bのコンポーネントに分解したりする必要がない処理なら 24bpp のままでも可。
例えば加算合成とか、単純な差分とか。
509デフォルトの名無しさん:04/01/29 19:24
すみません、PhotoShopのカラーバランスにある
「輝度を保持する」っていったいどういう処理なんでしょうか?
たとえば
(R,G,B)=(150,150,150)
にカラーバランスで輝度を保持しないで赤方向に30動かすと
(R,G,B)=(166,150,150)
になります。具体的な数字はとりあえずとして、これはわかります。
このパラメータで輝度を保持すると
(R,G,B)=(158,141,141)
になる。なぜ?
元の輝度は0.3*150+0.59*150+0.11*150で150
処理(輝度の保持なし)後が同じ計算で154.8
この数値からどうやって輝度の保持有りの値になるのでしょうか?
>>509
煽りでもなんでもなく、その質問は adobe にするべきだと思う。
>>509
輝度の求め方は何通りもあるよ
>>509
君が正しいと思うRGB値はいくつ?
RGBの値の方が丸められたんじゃないの?
>>509

Adobe がどういう計算をやっているかは知らないけど、

> 0.3*150+0.59*150+0.11*150で150

この式の係数は、NTSCで規定されている「R」「G」「B」を前提に
していると思うんだが、パソコンのRGBは、ソレとは違うのかもね。

ひとくちにRといっても、ブラウン管メーカーの使っている赤色の
蛍光体は異なる物質のブレンドだから、同じ色とは限らないしね。
514デフォルトの名無しさん:04/01/30 00:18
>>506
thanks.
>>509
色空間は何使ってるんだ?
516509:04/01/30 09:24
>>512
出てくる数値として考えていたのは
元の輝度と処理後の輝度の差を考えて明るさを4づつ落とした
(R,G,B)=(162,146,146)
だと思っていたんです。
この数値を計算すると輝度150.8になるので。
ちなみに、輝度の保持後値で輝度を計算すると146.1
保持してる?と聞きたくなりました。

>>511
>>513
求め方がそもそも違うかもってことですよね。
うーん、何してるんだろう。

>>515
色空間はadobe RGB(1998)を使ってます

どんな処理を実行してるんだろう?
>>516
シャドウ・中間調・ハイライトってあるぢゃん。
この辺が効いてるんだろ。

100,100,100で中間調でやったら予想通りになるよ。
150,150,150を中間調・ハイライト同時にやるとほぼ予想通り。
>>513
ITU-R BT.601 の係数ですな。
正確には 0.299, 0.587, 0.114。
MPEG とかでも YCbCr への変換に使っている係数。

今ではハイビジョンテレビ用の係数とかもあるようだけど。(PCの特性はむしろこっちのほうに近い)
ITU-R BT.709 0.2125, 0.7154, 0.0721
|
|
       |
      |
       a
a
メモリ上のjpegイメージをDIBに展開する良い方法ってありませんか?
ファイルからならlibjpegで出来たんですが。
>>520
libjpegでできるよ。source mangaer について調べれ
jdatasrc.c が参考になる。
522デフォルトの名無しさん:04/02/02 01:26

選択されて反転表示させる画像処理方法と
それを元に戻す処理方法について知りたい
のですが、何か良い本ありませんか?

Windowsのリストビューからドラッグイメージを
生成したいのですが、反転されたままの透過
画像になってしまうので。

ついでに、この辺の画像処理テクニック一般を
扱った本があれば読みたいのです。

>>522
マスク用意汁。
ついでにスレちがいっぽい。
>>523
マスクを使うのは分かるんですが、
どういうマスクを使えばいいのか
分からなくて。

反転色と同じ色のマスクだと、白い
文字も消えちゃうんですよ。

他に適当なスレありますか?
525520:04/02/02 07:48
>>521
ソースを見たところ、なんとかやれそうな雰囲気です。
ありがとうございました。
526526:04/02/04 17:02
BufferedImageをJPGでファイルに保存するメソッドsavearea(仮名)を作っています。
これにカメラ画像をBufferedImageに変換したものを
引数として与えてやると、きちんと保存されています。

しかし、
一度処理(差分領域を赤線で囲む等)を行った後のBufferedImageを変数bfとしたとき、
bfをフレームで表示はできるのですが、
bfをsaveareaで保存しようとするとファイルは保存されますが真っ白です。
saveareaにbfが投げられたときbfがNullでない事は確かでした。

もし解決方法がわかる方がおられましたら、どうしたら保存できるのか教えてください。
同じ大きさのBufferedImageもういっこ作ってそれに描いてそれを出力してみ。
BufferedImage i2 = new BufferedImage( image.getWidth(), image.getHeight(), image.getType());
i2.getGraphics().drawImage( image, 0, 0, null);
こんな感じで。
528526:04/02/04 21:35
>527
返答ありがとうございます。
とりあえず同じ方法でi2に新しくコピーしましたが結果は同じでした。
どうやらBufferedImage型変数を宣言する際に
BufferedImage bi=new BufferedImage(320,240,BufferedImage.TYPE_INT_ARGB);
としていたため、真っ白だったようです。TYPE_INT_RGBに変えたら正しく保存できました。
529デフォルトの名無しさん:04/02/06 17:58
まことに恐れ入りますが、
オフィスのワードのワードアート機能みたいに、
画像ゆがませたりしたいんですけど、
なんか参考になるページ、書籍、単語(キーワード)などあったら教えてください。

ぐぐってもいまいちわからんですた。
530529:04/02/06 18:00
追記:
3D系のライブラリは使用しないで作成したいっす。
>>529
ビデオゲームの技法で、ラスタースクロールって知っているか?
532529:04/02/06 19:33
>>531
知りませんでした。ありがとうございます。
ただ気をつけないと激しくジャギーがでそうな予感。

贅沢いって申し訳ないですが
丸める技法とかそういうのも教えていただけるとありがたいっす。
キューブマップとか参考にすれば宜しいのでしょうが、
どういうアルゴリズムにしていいのやら。
明日、明後日休みなんでじっくり考えてみます。
533デフォルトの名無しさん:04/02/06 20:52
ただのもーふぃんぐでいいような
534529:04/02/07 12:52
>>533
どもっす。そこらへん調べてみますわ。
DIBなら、ただの2次元配列だから自由自在。
ここにお世話になった。 WIN32SDKだが、特殊なAPIを
使ってるわけじゃないからいろんな環境で役立つと思う。
http://www.sm.rim.or.jp/~shishido/graphics.html
おもいっきし>>491でガイシュツだった。スマソ。
537535,536:04/02/07 13:55
罪滅ぼしに、役に立ちそうなのを、あと2つ。

RGBの8ビットづつの加算などを一括で。
http://www.emit.jp/prog/prog_b.html

整数型sin,cos,sqrt
http://www.gen-ta.net/underwater/
モーションブラーの原理を教えてホスィ

リアルタイムで画像動かしながら半透明合成でもするの?
539デフォルトの名無しさん:04/02/07 19:19
リアルタイムもあるし、原画にかける事もある。後者の方が負荷が軽い。
前コマa=50%の上に当コマa=100%でsrccpyであらかじめ作っておく。
540デフォルトの名無しさん:04/02/07 19:31
strcpyって、このスレに似合わない単語が出てきたな
540でな。
542通りすがり:04/02/07 19:38
ワラタ
>>540
気を落とさず、精進しなされ。
SRCCOPYもstrcpyも似たようなものだ。

ちなみに、多くの処理系ではmemcpyの方が早いぞ。
個人的には、>>539 の手法で作れる、ただの残像を、「モーションブラー」と称するのはやめて欲しい。
せめて「モーションブラーもどき」とか「モーションブラー風効果」って言って欲しいなぁ。

真のモーションブラーは、たとえば秒30コマなら、1/30秒の間に移動した分の画像の合成だから、
1/30秒内の画像を重ね合わせて作るべき。
まじめにやるなら、たとえば 1/120秒間隔の画像4枚を合成するとか、そういう感じ。
545529:04/02/08 06:35
>>535
どうもありがとうございます。
>>491 のようなことは基本的にはおさえていたんですが、
>>537 の下の方はちょいとリンクどこにっやったのか忘れてたので思いださせていただいてありがとうございます、
546デフォルトの名無しさん:04/02/10 16:57
AVIファイル内のある動画ストリームの総フレーム数を求めたいんですが
そういう便利な関数ってありますか?

インデックスチャンクのサイズを読み出して16で割る
というプログラムは書いてみたんですが
みんなこんなことやってるのかなー?と思って・・・。
547 :04/02/11 17:30
ビットマップに含まれているQRコードを
デコードするライブラリで、フリーなものって無いでしょうか?
ソースが公開されているとなおうれしいのですが…

それ以外にでもソースが公開されているような
二次元バーコードのデコード用ライブラリご存知ありませんか?
http://www.swetake.com/qr/java/qr_java.html
これでございますか、旦那。
549 :04/02/11 17:42
>>548 あんた、いいひとだ…
550 :04/02/11 17:45
と思ったら…、エンコーダだった…欝
エンコーダはすでに作ってあるんだよな…

いまだ画像からのQRコード切り出しが頭悪すぎで
実用にならないという俺の程度の低さを笑ってくれ。
551デフォルトの名無しさん:04/02/15 16:44
画像をFFTした結果(並べ替え前)って


0
正負
正負

0
正正
負負


のどっちですか?
>>551
まずは、意味が分かるように書け
553551:04/02/15 18:22
説明不足ですいません。

デジタル信号をFFTした時、

 正の周波数成分|負の周波数成分
0-------------------------------->

という結果になります。


画像の場合、

v
|
|
0----->u
|@A
|BC
|

のような結果になります。
@&CおよびA&Bは対象なのですが、
どちらが正の周波数成分でどちらが負の周波数成分かで戸惑っております。
>>553
基本的に画像が正の位置情報しかない場合、すべて正の周波数と考えた方が楽で、
同じ画像が周期的に繰り返されていると考えると分かると思う。
FFT後の画像も繰り返されているといった感じ。

# よけい分かり難くなるかな?
555デフォルトの名無しさん:04/02/20 15:22
コラージュしたり、目を線で黒く塗った画像を、
他の人が加工したところを削ることができるのですか?
心眼で可能
>>555
マジレスすると
「他の人が加工したところ」を判別する方法が無いと思われ。


真っ黒に塗った部分を、情報欠落部分と判断できるなら、
既存の補間手法で復元できる可能性がある。

ただし、離散エラーならかなり復元できるが、
バーストエラーだったらせいぜい数〜数十画素。
>>555
バターをつけて擦れ。
なつかしー
561デフォルトの名無しさん:04/02/25 21:53
javaのImage関係のクラスで、
例えば、
右向きに歩いている人間の画像を
左向きに歩いている画像に変換することができるような
メソッドってありますか?
>>561
Graphics2D#drawImage(Image, AffineTransform, ImageObserver)
563デフォルトの名無しさん:04/02/29 02:35
ピクセルのRGB値から輝度を求めることは次の式を使って
「0.299f * R + 0.587f * G + 0.114f * B」
求めることが出来るのですが、結局は0〜255の8ビット
輝度値になります。
これを16ビットや24ビットの輝度値にしたいのですが、
どのようにしたら良いでしょうか?
ご回答よろしくお願い致します。
入力にゲタかませばいいじゃねーか。
厨房でも考え付くと思うぞ?
565デフォルトの名無しさん:04/02/29 02:53
>>564
すみません。。リア厨ですが分かりません。。
教えて下さい・・・。。
ヒントだけな。

1 × 10 = 10
?× 10 = 100

これでもわからなかったらアキラメレ。
567デフォルトの名無しさん:04/02/29 03:14
>>566
有難う御座います。分かりました。
568デフォルトの名無しさん:04/03/02 15:21
JPEGノイズを調べる実験をしているんですが、
一番基本に忠実で、一括でのBMPとJPEGでの相互変換ができるいいソフトありますか

自前の画像に信号を埋め込むプログラム(パラメータの違う画像を7*11個吐く)

CzViewでJpegに一括変換

jpg2bmpでBMPに変換

自前の信号を検出するプログラム

jpg2bmpとCzViewを比較した場合、後者の方が信号の検出結果がよく、
出力されたファイルをバイナリエディタで比較したところ、だいぶ異なっていました。
CzViewでBMP変換してもよいのですが、このソフトはBMPへの一括変換ができないので、非常に困っています。
自分で書いてはどうだい?

サンプリングファクタや
量子化テーブルを操作できなきゃ、
そのソフトが生成するJPEGのノイズしか調べられないだろ

CzViewというソフトがそこまでできるソフトなら問題ないと思うが
570568:04/03/02 16:44
JPEGノイズが研究の本質じゃなくて、信号埋め込みのほうなので、
一番、JPEGの標準規格に忠実なソフトを知りたいのですが…。
JPEGの標準規格に忠実な2つのソフトでBMPをJPEGにしたら、
両方とも同じバイナリになると思ってる?

規格の範囲内でパラメータを変えれば、ノイズの出方も全然違う

サンプリングファクタを1:1:1にして、
量子化テーブルを全部1にすれば、
ほとんど損失のない画像ができるし、
サンプリングファクタを4:1:1とかにして、
量子化テーブルを高い数値に設定すれば、
原型を留めないような画像になる。

ほとんど損失のない画像と原型を留めないような画像の両方とも、
JPEGの標準規格に忠実なものだということだ。
脳に蛆がわいてるな
可逆圧縮のJPEGを使えば、デコード後の色の違いはなくなる。
>>570
板違い
575デフォルトの名無しさん:04/03/04 10:39
JPEG画像を回転させるところまではわかるんですが
その後、無劣化で保存するにはどうしたらいいでしょうか
>>575
(゚Д゚)ハァ?
可逆のフォーマットで保存すれば?

90度単位の回転ならJPEGからJPEGへ劣化無しで行えるが、
JPEG画像の回転がわかるということはそれはもう知っているのだよね。
1:1:1で量子化テーブルも全部1だとしても非可逆じゃないよ
>>577
非可逆だと思うが・・・
DCTで計算誤差が発生するんでないか?
非可逆だよ/可逆じゃないよ
JPEGで保存したいとは指定されていないように思うが。

それはさておき、おまいら可逆JPEGもJPEG-LSも知らんのか・・・。
>>580
ITU-Tの勧告の載ってるのは見たが、
実際にファイルを見たことはないな〜
>>581
今はJPEG2000の可逆モードがいいかも。
PNGはどうよ
584デフォルトの名無しさん:04/03/10 16:32
YCCを変数として濃度を変更したいのですが、何か式とかはないでしょうか?
(HSV等に変換しないで)
>>582
ソース公開されているJPEG2000のCODEC

[JJ2000(Java)]
http://jj2000.epfl.ch/

[Jasper(C)]
http://www.ece.uvic.ca/~mdadams/jasper/

[J2000(C+C#)]
http://j2000.org/
>>584
濃度ってのは彩度のこと?
だったらCbCrを増やせばいい。
まあCbCrにてきとーなカーブかけたら十分でしょうな。
輝度によってカーブが変化させて、暗部ほど彩度を上げるとかってアプローチもあるでしょう。
588584:04/03/11 14:03
>>586,587
うまくいきました。ありがとうございます。
589デフォルトの名無しさん:04/03/12 01:26
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
↑ここののプログラムでキャプチャーされた動画像をすべて、BMPまたは、AVIやMPEG
で保存する方法わかりますか?
どなたか、教えてください。
画像と名の付く限り、BMPへの保存はヘッダを換えるだけ。
DIBとBMPで検索しなされ。
AVIへはAVIで始まるライブラリ関数をMSDNで調べなされ。
MPEGへは、AVI経由で人の作ったソフトで変換しなされ。
動画はDirectShowで簡単に扱えるみたいだけどどうなんだろう。
DirectShowはアレだ。死ねる。
簡単っちゃ簡単だし本格的にコンシューマ相手にやるなら他に手は無いけど、
研究等で画像処理だけが目的なら自前でループ回すほうが良くない?
減色のフリーライブラリってありませんか?
どうも見つかりません。。。
>>594
作れ
596594:04/03/16 23:26
まぁ、一応作ってはあるのだが、あまりにタコなもので。
pag1tetoはシェアだしなぁ。Padieでも読むかなぁ。。。
>>596
うp汁

どれくらいタコか見てやる
>>594
ソースならCマガジン2000年7月号
再帰分割+LBGクラスタリングを組み合わせて、1600×1200の24bit画像が
数秒(PentiumIII 600MHz)で処理できる程度に高速化して使っています。
599デフォルトの名無しさん:04/03/17 23:06
>>594
ImageMagickでも見てみれば?
600594:04/03/18 22:19
いろいろサンクス。
>>597 ただのMedianCutだから載せるまでもない。(タコとは言いすぎか
>>589 その号のCマガジンないので、今度バックナンバー見てきます。
>>599 ImageMagickの減色って高性能なのかな。あとで見てみます。

これくらいしか書けないですが、みなさんどうもー
>>600
ディザはやってないの?
ImageMagickの減色は
一時期質が悪くて叩かれてたけど
最近のバージョンは進化してる。
俺はあの動作で満足。
ちなみに、ImageMagickのconvertの場合
デフォルトではFloyd-Steinbergエラー拡散という手法のディザーリング。
良くも悪くもオーソドックスでポピュラー。
実行時オプション "+dither" を付けるとディザーリング無し減色もする。
その動作が気に入ったら
オープンソースなのでソースを読みながら動きを探ってくれ。
減色に関する文書はwebに結構散らばってるから、時間あるなら探してみて。
英文読むのが好きならweb上の資料は多いんだけどね。
604デフォルトの名無しさん:04/03/19 11:37
画像処理によって、画像内にある物体との距離を
算出することはできるのでしょうか。

入力は動画でもいいです。簡単に算出可能で精度は高いものなのでしょうか・・・
>>604
質問が漠然としすぎだ
606デフォルトの名無しさん:04/03/19 15:33
距離測定つながりで教えてください。

Windowsでステレオ視をちょこっとやってみたいんですけど、どんなカメラ使ってますか?
USBとか1394とかのカメラでなんかいいのないかなと思ってるんですけど。
607デフォルトの名無しさん:04/03/20 09:51
diff・absとってblur
値の大きな領域は移動と思われる箇所

こんどは上下左右にずらしながらdiff・absとってblur
移動と思われる箇所の値が最も低下するとき
移動元と移動先が判明
608デフォルトの名無しさん:04/03/20 11:27
VC++で画像処理が学べるホームページいろいろ教えてください
609デフォルトの名無しさん:04/03/20 11:39
輪郭抽出などで周囲のピクセルとの差分をとったりする必要がある時に、
差分のとれない画像の周囲1ピクセルってどうやって処理してますか?
>>608
コンパイラに依存した画像処理の話なんてそう出来ないと思うが
>>609
あきらめる
612609:04/03/20 14:46
>>611
マジですか?
613611:04/03/20 14:54
>>612
マジですが?
614デフォルトの名無しさん:04/03/20 15:04
MedianFilterってどういうのが一般的?
一平面の場合はわかるんだけど、多平面になったときにどうしていいかわからん。
自分で考えても、これくらいの案があるんだが。

1.RGBの三平面に独立してかける。
2.YCrCbの〜
3.Y成分によって、ピクセルを選択して、CrCbはそれに従属させる。
4.RGBのそれぞれの成分を二乗して、分散をとって、それでピクセルを選択する。

どうすればいいか教えてください。
>>614
目的による。
というか、全部試せばいいじゃん。
>>609

相手にしない
>>609
用途によるが、もともと隣のピクセルとの差分はピクセル数より1少ないんだから、ビクセル数と同じにしたければ適当にごまかすしかない。
実装上の処理はいくつか考えられる。
ぱっと思いつくのは、適当な値に固定する、端のビクセルを繰り返す、反対の端へ回り込む、1ビクセル内側へ戻る(折り返す)。

618609:04/03/21 17:30
>>617
レスありがとうございます。
いろいろとソースをあたってみたら、大体そんな感じでした。
自然画像の場合、端のピクセルを繰り返すか、内側へ戻るかしておくのが、
ごまかす方法としては無難かなと思います。
619デフォルトの名無しさん:04/03/21 20:33
見えない部分は三次補間で予測
>見えない部分は三次補間で予測
Interpolationは良いが、Extrapolationは普通せんよ。
やるとしても、せいぜいリニアまでかと・・・。
621619:04/03/21 21:43
うん。そう思う。
622デフォルトの名無しさん:04/03/29 21:24
いきなり質問ごめんなさい。
Tiff(RGB非圧縮)からデータを取り込もうとしてますが、うまくいきません。

具体的には、ヘッダ・IFDを解釈してデータ部分を取り出すものの、 ずれ・データ余りが発生しました。
データ余りしたサイズ分をデータを読む前にスキップしてやるときっちりデータが取り出せたのですが、その余り部分が何に由来するものなのかわからない為、その固定サイズスキップをよしとできないでいます・・・

実際の流れは
1)GhostscriptのDevice=tiff24ncでpsからA4のピクセル指定で変換
2)Tiffヘッダ読み出し
3)IFDの解釈
 ・StripOffsetsやStripByteCountは値0
 ・IFDエントリでデータを示すポインタを持つものはIFDの後ろに続き、一番後ろを示すデータの末尾を、イメージデータの先頭とみなす
4)イメージデータを読み出す (1ラインが変換時の横指定ピクセルx3byteとし、縦指定ピクセル数読む)

上記のように行った場合に、ずれ・データ余りが発生しました。
ためしに余った分(テストしたケースでは20バイト)をIFDを読みきったあとにスキップした位置を、イメージデータの先頭とみなして切り出すと正しく動作しました。
これを見る限り、20バイトはヘッダの一部のように思えますが仕様書を見る限り何に由来するものなのか理解できません・・・

イメージデータの先頭を求めるには、StripOffsetsをみるか、IFDでデータが格納されたその直後位置、という見方だけでは不足しているのでしょうか?

長文ごめんなさい
>>622
> ・IFDエントリでデータを示すポインタを持つものはIFDの後ろに続き、一番後ろを示すデータの末尾を、イメージデータの先頭とみなす

IFDエントリのデータのサイズを計算するときに、TYPE によって異なるデータサイズを乗じていないとか。
624622:04/03/30 20:26
>>623
反応ありがとうございます
私がちょっと考え違いをしていたみたいで、そもそもStripOffsetsが0であること自体が異常状態であるようで、基本的にはStripOffsetsを参照しなくてはならないように思います。
今回値が0になる原因は、gsは1ページデータ出力後にfseekで改めてStripOffsets等をセットしに行っており(確証はないのですがgsのソースを見るとそのように見えた)で、
解釈側はgsの出力をパイプで引き取っており、gsがfseekしようとしてもできないデバイスのためStripOffsetsを受け取ることができないという状態のように思われます。
一時ファイルを作成し、それを経由してアクセスすれば解決しそうですが、ディスク容量の問題が出てきそうなので、別の方法を検討中です^^;
お目汚し、失礼しました。
前スレ見たいけど見れない。過去ログ化されてないかしら。
どうやって探してよいのかわからず困っています。しくしく
>>626 とってもとてもありがとうなのです。さんくす
628622:04/03/31 16:09
目的の処理は、ppm(gsのppmrawデバイス)を使用することで簡単に実現できました。
無知は罪ですね・・・
二次元上でうまく光を表現したいのですが
うまい処理方法ってありませんかね?
具体的には、元画像上にライトがあって、
そのライトの光で元画像が照らされるような表現が
したいのです。普通どんな風に処理をしているのでしょう?
光の画像を用意しておいてα合成しかないのでしょうか?

教えて某ですいません。
630デフォルトの名無しさん:04/04/04 23:36
どっかにシスプリのsusieプラグインないっすかねえ
>>629
レイトレーシングじゃだめ?
>629
画像の隣のピクセルの明るさの差で法線をでっち上げる
環境光とライトを設定して照明計算してレンダリング

3Dでの照明の基本はDirectXのSDKドキュメントあたりで十分読める。
633629:04/04/07 21:02
ちょっとがんばってみます。
また報告に来ます。
画像の縦横の比って4:3が一般的ですよね.
この4:3って数字には何か特別な意味でもあるんでしょうか?
単純に見やすいから?

ついでにワイド画面の16:9にも同じ疑問が浮かびますが…
確かに何故だろうね。
人間の視界が横に広いからかね。
紙芝居に使われていた紙が4:3だったからだよ
そうか、初期のテレビのフレームは
紙芝居の枠を流用して作ってたんだ。
納得。
638634:04/04/21 10:25
自己レスで申しわけないが,16:9に関しては見つかった.
4:3は・・・やっぱり見やすい(と考えられてた)から?

ttp://www.nhk.or.jp/strl/aboutstrl/evolution-of-tv/p16/
最近のワイド画面のテレビでも、普通の映像は横に引き伸ばされる?
あれだけはどうしても許せないんだけど・・・
そういやSXGAは1280×1024で5:4だな。なんで?
1280x1024x24bit=3.75MBで、
ビデオメモリが4MBで格納できて
なおかつ、縦・横幅とも切りの良い
サイズだから。

4:3には、あまり拘らなかったみたい<SXGA
今、考えてみるとSVGAって、1364x1023は、無理としても、
1360x1020は、横幅が12の倍数じゃないから駄目?
なら、1356x1017とかじゃ駄目だったのかなぁ?
上のは間違い。別に12の倍数じゃなくても良いんだ。
…何処から12の倍数が出てきたんだ?(w

じゃあ、1360x1020で良いのにね。
644デフォルトの名無しさん:04/04/22 00:59
Photoshop等に実装されている、フィルタのアルゴリズムが
紹介されているページとかあれば教えてほしいっす。
645640:04/04/22 01:37
>>641
おぉっ レスありがとう(・∀・)
>>639
板違いだが、普通ワイド変更方式何種類かと、ノーマルを選べるだろ。
ちなみに引き伸ばすのは、中央だけが焼けないようにするためという実用的な意味がある。

どうでもいいことだが、4x3=12だよな。12個の正方形に分割できるというか。
比に深い意味は無いんだと思うが、12進文化圏の感覚では自然な値なのだと思う。
更にどうでもいいことだが、16:9 は 4:3の二乗だよね。
横:縦:対角が3:4:5になるから計算しやすい。とか
>>647
私もそれかと思った。昔のブラウン管って完全に丸かったから、それに内接するような
長方形で切りのいい縦横比なのかな、と。

でも、ハイビジョンの16対9とかってのは、謎だね。あれ、最初NHKが提案したときは、
たしか、もうちょっと単純な整数比で 5対3とかだったような気もする。

映画のフィルムの形式とか、どういうふうに決まっているんだろうか?
649デフォルトの名無しさん:04/04/27 07:15
Targaファイルを単純に読み込んで書き出すと
ファイルサイズによってファイルのbit情報が何故かぶっ壊れる。
ARGBがどうやら入れ替わってる様子なのだが
どうしてこうなるのかさっぱりわかんない・・・。

ちなみに開発環境はVC++6.0でコンソールで動作させてる
Targaファイルのフォーマットは
Ver2.0 フッター有 エクステンションフッター無 αチャンネル付 32bit
サイズはぶっ壊れるサイズで1280x960 ぶっ壊れないサイズで640x480

DirectXで1024のサイズ以上のファイル読み込めないから
わざわざ分割するツール作ったのにこの有様だ・・・・・

今日も朝になってしまったよ・・この年で徹夜はキツイ。
お願いします、どんな情報でもいいから教えてください・・・
DirectXの環境依存を気にするなら1024でも読み込めないのがあるぞ
651649:04/04/27 07:23
>>650
基本的にはそこまで大きなサイズで分割する予定はなく
32x32とかで重複を消しファイルサイズを軽減する目的もあったのだけど
読み込んだ瞬間すでにbit配列がおかしくなっているのでどうしようも…

フッターまでちゃんと読み込めているのですが
何故か単純に書き出してみてもうまく元通りにならないのです…。
652649:04/04/27 07:25
一応開発言語はANSICで組んでいます。
freadで一気にデータ部ぶっこ抜いてfwriteでそのまま書き出してます。
653649:04/04/27 13:25
ずっとやってるのだけどわからないです・・・
神様降臨してください・・・。・゚・(ノД`)・゚・。

降臨期待age・・・
情報無さ杉なので O_BINARY を忘れているに一票。
655649:04/04/27 13:46
スマソ・・・自己解決しますた・・・
解決したら原因と対応を書いてくれよ。気になるし。
また同じように悩んだ人の道標にもなるだろ。 ってもうこねーか
657デフォルトの名無しさん:04/04/28 01:32
今テンプレートマッチングの研究やってるんだが
処理時間かかり杉。
いいアルゴリズムない?
どんなテンプレートでどんなアルゴリズムでどれくらい時間かかってるんだ?
で、目標時間は?
659デフォルトの名無しさん:04/04/29 23:12
tiffファイルの読み込み&書き込みの仕方が
書いてあるページ教えて!!
660デフォルトの名無しさん:04/04/30 00:54
>>659
fopen、fread、fwriteでぐぐれ
なんと、tiffだけじゃなく、ほぼ全ての形式が読み書きできる優れものだ。
662565:04/04/30 19:20
365
663デフォルトの名無しさん:04/05/01 02:35
tiffのファイルフォーマットが知りたいのだが。
ヘッダ情報とか。
ここってレイトレーシングのこと質問してもいいですか?
>>665
レイトレが画像処理に入るとは思えないが、プログラム板には他に該当しそうなスレはないなぁ。

しいてあげるなら、CG板の
http://pc3.2ch.net/test/read.cgi/cg/1025138347/
かな。

リアルタイムじゃないCGスレが欲しいけど
スレ運用していく自信がないよ。・゚・(ノД`)・゚・。
確かにそういうスレは欲しいな。
今時、3DCGプログラミングとかいうと、OpenGL とか Direct3D とかを使うだけなんだもんなぁ。
面白くない。

昔、ラジオシティとかを語っているスレを見た覚えがあるのだが、
どの板で見たのか覚えてないや…
670デフォルトの名無しさん:04/05/03 22:00
VC++ SDKを使って画像の縮小処理をしたいのですが
縮小アルゴリズムの名前はよくでているのですが具体的なアルゴリズムや
ソースが見つかりませんどなたか知りませんか?

知りたいアルゴリズム
・ニアネストネイバー
・バイリニア
・バイキュービック
・面積平均法
・ラグランジュ補完法
>>670
縮小というのが、大幅に縮小するのか、ほぼ同じ解像度で微妙に縮小するのかで話が変わってくるが、以下は大幅に解像度を落とす場合の話。

ニアレストネイバー、バイリニア、バイキュービックは拡大のためのアルゴリズムだから縮小には関係ない。
(微妙な縮小ならバイリニア・バイキュービックは有効)

ラグランジュ補間は縮小にも使えんこともないけど、次数よりも小さい比率で縮小するならあまり意味は無い。

大幅に縮小するなら、面積平均法が単純確実。

面積平均法って難しい呼び方してるけどやってることは単純。
解像度を縦横半分にするなら、縦横2ドットずつの4ドットの平均色をとっていくだけ。

縮小倍率が半端な時はちと面倒。悩んでくれ。まあ、Bresenham が手軽かな。

あとは、あらかじめローパスフィルターを通すという技もある。
なんつうか、そこまで他力本願でどうするんだという気もする。
最近傍法のアルゴリズムくらい、考えるほどのもんでもないだろう。
それぞれの名前で検索すりゃ、情報はいくらでも出てくると思うが・・・
673デフォルトの名無しさん:04/05/04 10:41
>>671
別にニアレストネイバー、バイリニア、バイキュービックは縮小でも使えるけどな。
画質はともかく、普通に使うよな
むしろ、面積平均法が縮小専用のアルゴリズムだ、という言い方をするべき
っていうか、バイリニアと面積平均法って兄弟みたいなものなんじゃ…
ソースはまだですか?
>675
ぜんっぜん違うだろ
>>678
ふざけんな!

ソースをかけるのはちゃんぽんではなく皿うどん
(´−`)・・・
681671:04/05/04 12:51
ニアレストネイバーは縮小にも使えますね。すみません。
>>673
解像度を9/10に縮小、ぐらいだったらバイリニアやバイキュービックは使えるけど、
解像度を1/10に縮小、とかだったらバイリニアやバイキュービックは意味がないでしょう。ニアレストネイバーとほとんど同じ結果になるし。



682デフォルトの名無しさん:04/05/04 12:56
>>681
意味無いわけねーって。
フォトショなら2回に分けて縮小したりするがな。
683デフォルトの名無しさん:04/05/04 13:30
つーわけで、拡大も縮小も最終画像を得るにはlanczos3を使うのがまぁ妥当というとこだな。
ニアレストだとエイリアス大杉だし、高速モードにはバイリニアかな。
>>677
補完対象をsrcとdestで交換しただけなんじゃ…
685デフォルトの名無しさん:04/05/04 14:33
>>684
意味不明…
それぞれ説明してみろ。
むしろ>>685が説明して意味不明なことを証明すべきだな
687デフォルトの名無しさん:04/05/04 14:44
>>686
分からんなら分からんと正直に言おうね。
バイリニアってのは常に4点しか使わんのよ。
面積平均はその名の通り縮小率が上がるほど使うピクセルは多くなる。
子供かお前らはw
689デフォルトの名無しさん:04/05/04 14:57
>>688
じゃぁLanczos3よりいいの教えてくれ。
>>689
Lanczos3のソースを貼れば教えてやるよ
691デフォルトの名無しさん:04/05/04 18:11
>>690
Lanczosも知らんやつにそれは無理だな。
だいたいググることも知らんのは低脳そのもの。
692初めてのTIFF:04/05/04 22:12
あちこちのスレを見て、libtiff3.dll を知って、自分のブラウザに組み込みました。
bitmap への翻訳は、tiffile.c を参考にしました。
で、pics フォルダにある .tif ファイルを見たのですが、5枚は出てきません。
不審になり、他の viewer (といっても Kodak....exe, ZoomBrower, など数種
ですが)を試しましたが、デジカメに付いていた ACDsee 以外はこの5枚は出て
きませんでした。
安直な質問ですが、TIFF viewer はこのレベルで、通用するものと思ってよろしい
のでしょうか。(IrfanView は出ませんねえ)
諸兄の所見を聞かせて下さい。
693デフォルトの名無しさん:04/05/05 13:16
lanczosあげ
ソースまだ〜チンチン
なんで荒れてるの?
画像処理って良い情報がwebにないからかな。
697初めてのTIFF:04/05/05 17:20
692 で5枚というのは、4枚の間違いでした。(全部で22枚)
で、1枚は 64 bit data で非対応、2枚は解凍非対応で、1枚はなんもメッセージを
返さないことが分かりました。
>692
その程度でTIFFに完全対応というのは...
行儀の悪いTIFFが世の中になんて多いことか
でも、100%全てのTIFFが読めるViewerはおそらくないので徐々に対応していけばいいと思うが
699初めてのTIFF:04/05/06 00:03
>>698
ご意見をどうもありがとうございます。
完全対応しようとは思いもよりませんが、他で、Canon のデジカメのデータは
非公開とか聞き、先々 EOS かなと思っていたので、詮索し出したところです。

半分愚痴ですが、jpeg, zlib 関係の library はあっちでもこっちでも、
それぞれの名前のを入れないといけないというのは、鬱陶しいですねえ。
>>682
1/整数 で縮小するんなら、バイリニアもバイキュービックもニアレストネイバーと全く一緒。
>700
言いたい事はわかるが、だから縮小に使えない、とは別の話だな

それにしても、写真屋ではそういう場合でもきちんと綺麗に縮小するんだよね。
まあ、縮小時にもその3つしか選択が無いので綺麗に出来なきゃ困るんだけど、
どういうやり方してるのか、ちょっと気になったりもする。
702縮小質問者(670):04/05/08 00:04
プログラミングをしない人でも聞いたことがあるような
名前だけは有名なアルゴリズムなので簡単に見つかるかと
思って自分でも探したのですが結構見つからないものですね
本屋で書籍も結構調べてますが、画像の加工(エフェクトとか)やレイトレーシングに
ついての本や公式のみが書いてある本がほとんどで縮小に関してはバイリニア等の
名前すらでてない本がほとんどです
Cマガで連載していた昌達K'z氏の画像処理を極めるアルゴリズムラボに
縮小に関してのアルゴリズムがでていたらしいのですがCDロム化より古い時に
連載されてるようなので入手困難になってるようです
書籍ででたら即購入したいのですが・・・とほほ・・・
703デフォルトの名無しさん:04/05/08 00:14
>>700
そんなわけねーw

>>701
どういうって、素直にやってるだけに見えるが。

>>702
結局単なる畳み込み。Lanczos3でやれば必要十分だ。
>703
知らないって事は、けして恥ずかしい事じゃない。
自分の無知を認めない事が恥ずかしい事なんだ。

よーく考えてみるんだな。
706デフォルトの名無しさん:04/05/08 00:41
>>705
釣りじゃなく本気のようだなw

例えばだな、1ピクセルごとに白、黒、白、黒…となっているイメージを1/2に縮小すること
を考える。ニアレストネイバーなら真っ白か真っ黒になるわけだ。それが他と同じなのか?
>>705
で、お前は認めないのか?
恥ずかしいな。
>704の下のとこのアルゴリズムの説明を読めば、目から鱗が落ちるかもな
>>708
その辺はまだまだレベルが低かったようだな。
こっちにはLanczosのことも書いてあるな。まぁアニヲタなんてこんなもんだろ。
http://www.marumo.ne.jp/db2001_7.htm#4
(゚Д゚)ハア?
>>700 >>708
ab
cd
の4点を1/2(つまり1点ね)にバイリニアで縮小するなら(a+b+c+d)/4にするだろ。
なんでaにするのかね。そりゃそんな取り方すれば同じになるさw
「レベルが低い」「詳しくない」は、大抵「俺には理解できない」を指す言葉です

どこがバイリニアだ
>>713
おいおい、お前もかw
少しは考えろよ。お前式で計算するとどうなるのが正しい?w
>>711
頭悪くて固そう
単純な1/2しかしないっていうんならともかく、
一般の縮小が可能なアルゴリズムを考えるときに、
どこが縮小の中心になるかによるとは思わんのだろうか。
で、普通は整数座標が縮小の中心になるもんだ。
>711
なんだそれ・・・バイリニアのアルゴリズム知らんのか?

画像を縮小する場合の考え方として、縮小後のとあるピクセルが
元画像のどこにあるかを計算して、そこから各縮小アルゴリズムに拠って
そのピクセルの画素を計算するわけだ。

で、整数で割った場合。
0、1、2 という位置のピクセルが元はどこにあったかを計算するのに、
(縮小後位置÷倍率)と言う式にあてはめると、例えば2で割ったなら
0、2、4 となるわけだ。
このように、元画像での位置が整数の場合、バイリニアやバイキュービックの
アルゴリズムを使って周囲のピクセルに重みをかけても、
結果はそこのピクセルをそのままつかうだけになる。
つまり、706にある通り、真っ白か真っ黒になるわけだよ。

ただ、これには多少問題がある。
この(縮小後位置÷倍率)という位置の割り出し方をすると、
縮小の基準点が左上の原点になるわけだ。
そうすると、微妙に右端が切れたりとかするわけ。

だからこれを、画像の中心を基準にして縮小しようと思ったら、
(縮小後位置+0.5)÷倍率+0.5 という式を使う。
この場合は、706の画像の縮小結果は灰色一色になる。
あ、まちがった・・・

(縮小後位置 + 0.5)÷倍率 - 0.5

が正解だな
これくらい、実際に書いたことがあれば誰でも知ってる事だ。
というわけで、711はもっと勉強するべし。
どうせ、さっきから主張しまくってるLanczos3も。自分じゃソース書けないんだろ?
>>717
だから灰色になるのが正しいわけだよ。

>>719
Lanczosも単に2次元重畳の係数がそうなだけ。SSE化までならしてみたが?
>>720
ちなみにPentium4 1.8GHzで2500x2000の画像で1枚2秒くらいだ。
まともにやってるから結構時間はかかるな。
>720
いるよなあ、こういう、人が解説した後に「そういう事なんだよ」っていばる奴。
711みたいな事言った後に何を言っても説得力はないぞ。

「やった」ってのもいくらでも言えるしな。一部でもいいからソースだしてみろって。
723デフォルトの名無しさん:04/05/08 12:54
そういう事なんだよ。
この雰囲気なら訊ける。

ローパスフィルタってなんですか?
725デフォルトの名無しさん:04/05/08 14:16
ぼかし。
あー、なるほど。
あらかじめぼかしてから縮小する事によって、ごまかすって事かあ。
サンクス、勉強になった。
727デフォルトの名無しさん:04/05/08 14:30
>>724
LPF, Low Pass Filter == High Cut Filter
HPF, High Pass Filter == Low Cut Filter
BPF, Band Pass Filter
728デフォルトの名無しさん:04/05/08 14:33
>>726
あぁ、アニヲタのページ見たのか?
そんな2度手間しなくとも重畳すれば1発なのにな。絵も綺麗になるし。
>>722
しかし、お前なんでこのスレにきてるんだ?バイリニアも知らずに。

ppackは楽でいいね。
    w0 = _mm_mul_ps(_mm_set_ps1(p[0]), *(__m128 *)(q + 4 * 0));
    w1 = _mm_mul_ps(_mm_set_ps1(p[1]), *(__m128 *)(q + 4 * 1));
    w2 = _mm_mul_ps(_mm_set_ps1(p[2]), *(__m128 *)(q + 4 * 2));
    w3 = _mm_mul_ps(_mm_set_ps1(p[3]), *(__m128 *)(q + 4 * 3));
お、ソース出てきたね。すごいすごい。誉めてやるよ。

ところで、バイリニアを知らんのは>711だろ
>>730
おいおい、711も俺だよ。
だからお前式を書いてみろよ。
式は>704のリンクで十分だろ。
711のやり方だと、9点を3で割る場合も全部足して9で割るつもりか?
すげえバイリニアだな、おいw
733デフォルトの名無しさん:04/05/08 15:36
>>732
おいおい...
いいからその1/2の場合の式をここに書いてみろって。
(a * 0.5 + b * (1 - 0.5)) * 0.5 + (c * 0.5 + d * (1 - 0.5)) * (1 - 0.5)

書いたが?

0.5 * 0.5 * (a - b - c + d) + 0.5 * (b - a) + 0.5 * (c - a) + a

こっちのほうがいいか?

735デフォルトの名無しさん:04/05/08 15:44
>>734
で、それは>>711とどう違うんだね。
>735
結果が違うかどうかが問題じゃないだろ、アホかよ
そうすると、4点を1/2にする場合、バイリニアだけでなく
バイキュービックも平均画素も(a+b+c+d)/4になるな。こりゃすげえ。

これらは全て、711の脳内では同じアルゴリズムだったわけだ。
むしろ、>711に>732の場合の式を書いてもらいたいな
739デフォルトの名無しさん:04/05/08 15:52
>>736
おいおい…ちゃんと流れを読めよ。
>>700の間抜けに説明するのにバイリニアを簡単に説明するのに4点1/2で説明した
だけだぞ…
結果が違うかどうかか問題じゃない?どういう意味?w
下手な説明は混乱の元って事かな
>バイリニアで縮小するなら(a+b+c+d)/4にするだろ。

これのどこがバイリニアを簡単に説明したものなのか、
お前の思考順路を覗いてみたいもんだな。

いいからその1/3の場合の式をここに書いてみろって。
>>741
真中1点の色になる。
バイリニアだと縦横1/2より縮小すればエイリアスが出るってこった。
>>742
あぁ、一応言っておくと、バイリニア(に限らんが)常にエイリアスは出る。
もちろん、エイリアスの出る周波数成分があればだが。
>式をここに書いてみろって

文盲ですか?
745デフォルトの名無しさん:04/05/08 16:36
>>744
結局ただのバカか?
はあ、、、なんつうか、人の話を聞かない人間と話すのは疲れるよ

とにかく、(a+b+c+d)/4 という式は、バイリニア縮小の式じゃないだろ?
たまたま結果が同じだろうがそんな事は関係ない。
>742にしてみても、お前の脳内計算の結果なんか誰も聞いてないし。

知識があるのか無いのか知らんが、もう少しまともな会話ができるようにしろよ・・・。

>結局ただのバカか?
こりゃ思いっきり俺のセリフだ。
係数ごとにいちいちソースを書くんだよ。
もちろん少数倍率にも対応するため膨大なサイズになる。
>>746
ほんとに流れを無視する間抜けだな...
>>711はバイリニアで縮小した結果の話をしてるんだよ。

>>747
誤爆か?w
>748
はいはい、次はもう少し相手に理解してもらえる話が出来るようにがんばろうね
>>749
かわいそうに。
751デフォルトの名無しさん:04/05/08 17:07
ここも一気に低レベル化したなw
小学生が必死に聞きかじりの知識を喚きあっているようだ・・・・。
で、670は少しは先に進んだのか?
753デフォルトの名無しさん:04/05/08 20:02
>>751
なんだかレベルが高そうなので教えて下さい。
ピントの暈けたデジカメ画像を復元するソフトを作りたいのですが、そういう
ツールやライブラリがあれば教えてくれませんか?
このソフトはどうやってるか分かりますか?
http://www.nyanko-web.com/rescue/
逆フィルターとかウィナーフィルターというのを使えばいいのかなと思うのですが。
誰が誰なのかわからん…
>>748
過程が重要な話題で結果だけ書くのはどうかと。
ましてや関係ない式を書いて誤解されたら逆切れってのは…。
756縮小質問者(670):04/05/08 21:06
なんだか話が活発になってるというか荒れてるのでしょうか・・・

>>752
とりあえず >>704氏のリンク先でバイリニアを勉強中です
自分でしっかり理解してからソース書いてみます
ニアレストは「創作プログラミングの街」のに載ってました
平均画素法も載ってるかも?(未検証)
日記のほうのHPにバイキュービック、平均画素法、Lanczosの
アルゴリズムについて載ってるようなのでじっくり勉強してみます
>755
アホはほっとけよ。
常に自分が一番、自分の事を理解できない奴はクソって世界で生きてるんだから。
>>757
こんな初歩のレベルで可哀想に...
759晒し上げ:04/05/08 21:35
画像処理の初歩=バイリニア=(a+b+c+d)/4
760デフォルトの名無しさん:04/05/08 21:40
761デフォルトの名無しさん:04/05/08 21:53
マスク付きの画像にアンチエイリアスをかけたいのですが、
マスクとマスクでない部分との境界がどうしてもギザギザになってしまいます。
何か良いアルゴリズムはないでしょうか。
ただしアルファは使わないアルゴリズムでお願いします。
762デフォルトの名無しさん:04/05/08 21:59
>>753

アンシャープマスクじゃ物足りない?
あと、この種のアルゴリズムは、ライブラリより自分で実装して行ったほうが楽しいよ。
763デフォルトの名無しさん:04/05/08 22:05
>>761
マスクが無いように読んで計算、書くときにマスクを考慮、でダメなの?

>>762
はい。
もちろん、自分で実装できるだけの情報があればしてもいいと思っています。
>>754
うん。せめて過去に発言したレス番号を名前欄に入れるくらい、やって欲しいな・・・
>>764
2chで何言ってんだかw
>>765
ん? 2ちゃんでも、議論になったら捨てハン使ったりするのは珍しくないと思うが・・・ ?
先日ゴールデンウィークが終わったと思ったら、もう夏がきたのか。
時が経つのは早いなぁ。
768デフォルトの名無しさん:04/05/09 04:51
>>721
少し計りなおした。Lanczos3で、3000x2000の画像を1/4縮小で0.5秒、
720x480->640x480だと0.04秒くらいだった。25(フレーム/秒)相当。
Pentium4 1.8GHz、画像ファイルの読み書きは除いたメモリ上での変換時間。
遅い?速い?
>>721
は10枚変換する時間だった。
>>768
遅い
>768
聞いてねえよカス
速度なんか環境によって違うし、比較しようがないだろ
772デフォルトの名無しさん:04/05/09 10:10
>>771
そうだな。
720x480->640x480、少し最適化して35(フレーム/秒)。

>>771
心配するな、お前には言ってない。
>>768
遅いか速いかは用途にもよる。
文書画像ビューワに使うには、お話にならないほど遅い。
動画像表示向けなら、かなり遅い。
デジカメ画像専用ビューワなら、許せるかも。
なんかすっかり痛いスレになってるなぁ
アニヲタ、アニヲタって○もを見下したいようだけどさ
そんなつまらない自尊心のためにこのスレでそんなやつと比較しようなんて考えるなよ。
最適化スレとか、AVIUtlプラグインスレで自慢してくれば?
778デフォルトの名無しさん:04/05/09 19:36
「○も」って何でつか?
縮小で盛り上がっている?ので便乗質問させてください。
画像向きのマルチレート信号処理についてなんか良い本しりませんか?
洋書でも良いですけど、1万円ちょっとまでで買えるのが良いです。
780名無し@沢村:04/05/11 01:47
おまいらよ、おれが無圧縮GIFについて教えてやるから、ちょっと聞け!!
特許に触れずにGIFがつくれる完全な解説だから、ROMれ。
まずGIFフォーマットだが、いろんなサイトに解説が書いてあり、読めばこれは幼稚園でもわかるから、フォーマットについては書かん。
問題はGIFのデータ列だ。これは検索しても、英文の技術文書しか出てこんから、英語のできんおまいらにはわからんだろう?
また英語ができても幼稚園でもわかるようには解説してないから、読んでもわからんはずだ。
だがこれを読めば幼稚園でもわかるよ。
さて問題のGIFのデータ列だが、フォーマットには、圧縮ビットサイズ、ブロックサイズ、データ列、ブロックターミネータと書いてある。
これは全部重要だ。
さてGIFをつくる場合、まず圧縮ビットサイズを求めることから始めるんだ。
そこで圧縮したいビットマップのカラーテーブルを見る。カラーテーブルの配列数が16なら、16を表すには4ビット必要だから4になる。
最大の256色が使われている場合は、8だ。
次にデータ列だが、データ列はクリアコードからはじまる。
クリアコードは圧縮ビットサイズ*圧縮ビットサイズだ。
つまり2なら4。4なら16。8から64だ。
そしてふつーのデータ列が続くが、ふつーのデータ列のひとつのサイズは、圧縮ビットサイズ+1だ。
つまり2なら3ビット。4なら5ビット。8なら9ビットだ。
だがふつーデータは8ビットごとに表されるから、8ビットの中に例えばひとつ3ビットずつのデータを右から左にパックしていくんだ。
例をあげると、ビットマップのカラーテーブルが、
RGB[0]=00,00,00
RGB[1]=FF,FF,FF
と白と黒の2つで、ビットマップデータが0,1,0、つまり黒、白、黒と3ピクセルのデータだった場合、
GIFでは、まず圧縮ビットサイズが2だから、クリアコードは4になり、
GIFのデータ列は、最初がクリアコードだから、100。
データ列は圧縮ビットサイズ+1の3ビットで表されるから、000,001,000になる。
これを右から左にパックして、8ビットずつで表すと、01000100,0000だ。
781名無し@沢村:04/05/11 01:49
続きーー

またデータ列の最後には終了コードがくることになっていて、終了コードはクリアコード+1で表される。つまりこの例の場合4+1で5だ。
だから終了コードを加えると、01000100,01010000になる。つまり16進数で44 50になるというわけだ。
つまりビットマップの00 01 00というデータ列が、GIFでは44 50というデータ列になったというわけだ。
これが無圧縮GIFエンコードのすべてだが、たくさんのデータ列を扱うときには、
2の圧縮ビットサイズ−2乗個ごとにクリアコードを挿入しなければならないことを付け加えておくぞ。
おまいらよ、これで特許に触れないGIFエンコーダができるぞ。
おれは神だ。
>>780-781
まぁ来月には特許も切れるらしいがw
http://tohoho.wakusei.ne.jp/wwwxx051.htm
>>780-781
すばらしい。神業だ。

あたしゃ、未だに動くやつが分からん。いつか解説して。
>2の圧縮ビットサイズ−2乗個ごとにクリアコードを挿入しなければならないことを付け加えておくぞ。
たいていの場合もっと沢山入れなきゃいけなかったような気が・・・
画像処理とはちょっと違うと思うんですが、
適当なスレが見つからないのでここで質問させてもらいます。

レイトレでボリュームライトなどの発光体を描画するにはどんなデータ構造や
処理を行えばいいのでしょうか。
>>785
レイトレでやるなら点光源のかたまりにするしかない。
ボリューム内に一定間隔おきに分布する点光源を作って、あとは点光源として処理する。
データ構造については、ボリュームをどういう形式で持つか次第だな。


787785:04/05/20 02:12
>>786
やっぱりというかなんというか、そんな感じにするしかないですか。
自分は、光源ていうのは実際に光る光源じゃなく、理論上の光源を与えて
物体の鏡面反射・拡散反射を計算するくらいしかやったことないんですが、
点光源の集合として処理するというのは、輝度を持ったボリュームデータとして
扱うということになるんですよね?
あ、それとも「ボリューム」ライトって言っちゃうと
ボリュームレンダを前提とした話になっちゃうんでしょうか。
言葉の細かい定義は詳しくないんですが、今求めてるのは
グロー(グレア?)が近いかも知れません。
と言ってもチンダル現象とかも描き出したいので結局のところ
ボリュームデータを扱うことになるかも。

MAYAのイナズマなんかはかなりはやいレンダリング処理を
してるみたいですが、どんな計算してるんでしょうね。
788786:04/05/20 09:29
>>787
それはボリュームライトじゃないですね。
レイトレの場合(というか3DCGの場合)、光源とは画面上にレンダリングされない「理論上の光源」のことを指し、
「実際に光る光源」(たぶん、蛍光灯とかを表現したいということですよね)
なんていうのは光源とは呼びません。

で、そういうグローを表現したいのでしたら、

・非常に明るい物体としてレンダリングする
・作画後の画像に、後処理として、オーバーフローした画素の明るさを周りに分配する

という処理になります。
>オーバーフローした画素の明るさ
現実世界では、瞳孔が閉じて見えてくるわけだけど、
静止画でそれを模倣するのは所詮無理なのかしらん・・
790786:04/05/21 20:33
>>789
画素の明るさを浮動小数点とかで持っておいて、
表示の段階で整数に変換すればいけるよ。
絞りを開けてる=0.0〜1.0 を 0〜255 に変換
絞りを絞ってる=0.0〜10.0 を 0〜255に変換
みたいな感じ。

キーワードは HDRI (High Dynamic Range Image)かな。
>>789
瞳孔以外にも、網膜には感応性が高い細胞と低い細胞があるんで、
眼のダイナミックレンジ自体も結構広いんだよね。

逆光でフラッシュたかなくても普通に人の顔とか良く見えるでそ。
792785:04/05/21 23:55
たぶん的確な方法ではないと思いつつ、他に思い当たらなかったので
点光源の周りの空間にランダムにフォトンをとばす感じで
改悪擬似ボリュームレンダリングをしてみました。

・・・煙みたいになりました。

正直>>789-791あたりの話まで深く考えてなかったというか
言われて初めてああそんな話もあったな、なんてレベルですが、
市販ソフトがやってるような綺麗な発光体や
窓から差し込む光なんかを記述するのは無謀でしょうか。
レンズフレアはすでに当面諦めてますが。
793786:04/05/22 21:41
>>792
・発光体
そのやりかただと、発光体の手前に半分覆うような物体があった場合、覆われてない側にしかグローもどきが作画されない。
実際には、光源より手前の物体にもグローが加法混色される。

これは、現実の世界の話として、発光体の周りのグローは撮影するレンズやフィルム上で発生するものだから。
三次元空間的に処理するのは間違いで、レンダリング後の画像に二次元的に処理するべき。

で、やり方は >>788 で書いた通り。もうちょい詳しく説明すると、
・通常の作画が明るさ 0.0 〜 1.0 になるようにしているとしたら、発光体はたとえば明るさ 10.0 になるように質感設定する。
・作画後の明るさが 1.0 を超えるピクセルについて、1.0 を超えている分についてぼかし処理をかける。(この場合
明るさ 9.0 をぼかし処理する)
・1.0を超えてない部分のピクセル値と、1.0を超えてぼかし処理を行った結果のピクセル値を合計する
といった感じ。
794786:04/05/22 21:42

・レンズフレア
これもあまり難しくない。作画後の2次元レベルの処理として、輝点と画面中心を結ぶ直線上に、
輝点と画面中心との距離を基準として、円(や六角形)を重ねていくだけ。
たとえば、Photoshopの「逆光」は
・中心から輝点方向に1.3倍の位置を中心に、白い円環(小)を描く
・輝点と同じ位置を中心に、赤い円環(中)を描く
・中心から輝点方向に0.2倍の位置を中心に、橙の円(小)を描く
・中心から輝点と逆方向に0.5倍の位置を中心に、橙の円(中)を描く
・中心から輝点と逆方向に1.4倍の位置を中心に、白い円環(大)を描く
・以下略
みたいな感じになる。どの位置にどんな大きさの円を描くかがキモかな。
まずは Photoshop の逆光を見てまねをするのがいいかと思う。

・窓から差し込む光
これがいちばん難しい。
たぶん手っ取り早いのはシャドウポリゴン方式
光源方向から見た物体の輪郭に対して、光の方向に沿ったポリゴンを生成するのが「シャドウポリゴン」で、
これは本来、Zバッファで影表現するための「影の内外判定用ポリゴン」なわけだが、
言い換えれば「光の内外判定用ポリゴン」でもあるわけだ。
で、レイをトレースする過程で、シャドウポリゴンと交差して光の中を進んでいる間、
チンダル現象的輝度上昇に合わせた輝度加算を行うようにする。

あ、レイトレだったらポリゴンにまで落とす必要はないから、
「光源方向からみた物体の輪郭を光の方向に延長したボリューム」を
「光の中だよボリューム」として、レイがそのボリュームを通った距離に比例した輝度加算を行えばいいかな。

795名無し@沢村:04/05/22 22:20
おい、おまいらよ、無圧縮GIF変換ソフトつくったから、
ちょっと見ちみれ?

http://hp.vector.co.jp/authors/VA015412/

アルゴリズムは>>780>>781で紹介しているとおりだ。おれは神だ。
今更作ってもなぁ・・・
797785:04/05/23 05:22
>>793-794
発光体はなんとか形になりました。
フレアもなんとかなりそうです。
でも差し込む光は・・・勉強してなんとかします。
ボリュームって、概念について書かれたものはよく見かけるんですが、
サンプルプログラムとかはあんまり見かけなくて
データ構造とかあたり判定とかイマイチつかめないので、
ポリゴンのほうがうまくできそうです。
詳しい説明ありがとうございました。
無圧縮GIFで検索すれば色んな情報やソフトがボロボロでてくるわけだが・・・
つーかUNISYSの特許に抵触しないGIF圧縮アルゴリズムと称するもののが発表されてから
もう何年たってるよ?
そもそも特許切れ目前なんですがw
801名無し@沢村:04/05/23 22:32
>>798
フリーのGIFコンバータはおれのしかねーよ!!
日本ではUcGIFがあるが、これはコマンドプロンプトから使うやつで、GUIソフトではない。
日本には他にフリーはない。
海外にはビットマップはおろかJPG,PNGなどいろんなフォーマットからGIFに変換できる高性能のがあるが、
あいにくおれは英文読めなくて使い方わからんので、ないのと一緒だ。
また一般のユーザーは英文読めないから、これまた一般のユーザーにとってもないのと一緒。
つまりフリーでGUIのGIF変換ソフトは、おれのしかないの。現時点ではね。おわかり?
802名無し@沢村:04/05/23 22:43
>>799
ここのことか?
http://homepage1.nifty.com/uchi/index.html
このアルゴリズムで実際にソフトつくったやつはいねーよ!!
おれも読んだが、理解できんかった…^^;
>801
既存の情報で、しかももう価値の無いものを作るバカはお前だけってこった
804デフォルトの名無しさん:04/05/23 23:08
AIって知ってる?
>>801
ペイント
>>802
理解できない?そんな簡単なものが?

susieのプラグインとして、実装してあるぞ。
807名無し@沢村:04/05/24 05:46
>>806
簡単?おまいが実装したのか?
>>806
俺だってわかるぞ。

自分でまったく0から考案するならそれなりに時間は必要だろうが、
そこに書いてあることを理解するのもそう造作もないだろ。
うちのばあちゃんも理解できるって言ってました
8月に生まれる予定の子供も(略
Tkの出力するGIFはLZW使ってないからTcl/Tkで
GUIソフト作れば10分で作れると思うけど。なんで
そんなことをがんばってんの
http://tohoho.wakusei.ne.jp/wwwxx051.htm

米国で 2003年6月20日、特許の有効期限が切れました。心配されていた期間延長目的の追加特許の申請も無いようです。日本でも 2004年6月20日に有効期限が切れます。もう少しの辛抱ですね。

>795はアホ。
やべ沢村にレスしちゃった・・・
814名無し@沢村:04/05/24 20:47
>>808
おれは書いてあることを理解するのは苦手だ。
自分で0から考案するほうが楽だ。
815名無し@沢村:04/05/24 20:56
>>811
うおっ!!Tcl/Tkでくぐってみた。
これは何か良さげだな。これがあるのは知らなかったな…
いまDLしているところだが、おれがいま研究しているコンパイラでパクれそうなところがあるかもしれんから調べてみる。
これを改良して日本人向けの高級言語につくりなおすというひらめきが沸いてきたところだ。
HSPを超えそうな人気言語がこれでつくれそうかどうか、ちょっと研究してみるぜ。
これは知らなかったな…
>>811よ、価値ありそうな情報をありがとうよ。
>814
うわあ、一緒に仕事したくないタイプ。
規約も慣習も無視して自分勝手に突っ走るタイプだろ。
817816:04/05/24 21:14
やべっ、沢村にレスしちゃった
>>812
いや、6月20日までにGIF使いたい奴にとっては価値がある。
819名無し@沢村:04/05/24 22:49
>>818
すると6月20日までは、おれは日本一の人気者になれるかな?
蓮池さん以上の人気者に…
820名無し@沢村:04/05/24 23:45
>>811
Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?
実行ファイル作成できんのか?HSP以下か?ゴミソフト!!!
>>819
無圧縮GIFよりPNG使う人の方が多いよ
>820
感慨深いレスだなあ。
>820
>Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?

確かに画像処理には速度が求められる。
が、好奇心が無いと長続きしない。
>>820
> Tcl/Tk、DLしたが、何やこれわぁ!?スクリプトやないか?

どうしてダウンロードする前に気が付かないのだ??????
825デフォルトの名無しさん:04/05/26 20:23
複数枚のエロ画像を一枚の画像に結合させたいのですが、
いまいちやり方が分りません。JPGのファイル形式だけでも
理解できたらなんとかなりそうなものですが、それに関する
資料も見当たらないので途方に暮れています。
どなたかファイル形式に関してよいサイトを知りませんか?
wowsiteだかそんなページ
>>826
ありがとうございます。imagemagickというのもあるようで
よく分りませんが試してみます。Gentooにはperlmagickという
インターフェイスも用意してありました;-)
829名無し@沢村:04/05/26 21:17
Starpack
Tcl/Tkでつくったスクリプトを実行ファイルに変換するツールだな。
が、わし英文読めんけん、このページのどっからDLしていいかわからんのよ。
このページの何行目の何という文字をクリックするとDLできるか、教えて〜♪

http://www.interq.or.jp/japan/s-imai/tcltk/tclkit.html
沢村氏ねよ
>>825
プログラムを組む必要すらありませんでした。
$montage -tile 2 -mode Concatenate * all.jpg
これだけです。素晴らしいです。
沢村は831を見習え。
833名無し@沢村:04/05/27 16:13
おれのGIF変換ソフトだが、某GIFアニメソフトで開こうとしたら、開けんかった。
おまいらよ、おれのGIF変換ソフトに欠陥があるのか、そのGIFアニメソフトに欠陥があるのか、どっちだと思う?
おれは、そのGIFアニメソフトに欠陥があるほうだ思うな。
というのは、おれのGIF変換ソフトでつくったGIFはちゃんとIEで開けるから、欠陥はないはずなのよ。
GIFアニメソフトも自前でつくるしかないかな…?
834名無し@沢村:04/05/27 16:22
そのGIFアニメソフトは、画像も表示できん低レベルなものなんで、やはりそのGIFアニメソフトのイメージ読み込みルーチンに欠陥があるんだろうな…。
それにしてもGIFアニメのほうは、ユニシスの特許に触れずにつくることができる割にはフリーのものが少ないな…
vecotorでくぐったらまともなフリーは2つ出てきたが、ひとつはVBのランタイムが必要なもので、もうひとつはその画像も表示できん低レベルなものだった。
こりゃ、ホームページビルダーに付属しているような感じのGIFアニメソフトつくっというたら、ユニシスの特許が切れた後にも、人気者になれるかもな…?新しい発見だ!!
あんたなにさまのつもり?
バカ殿
やべっ、沢村にレスしちゃった
名前とメル欄まちがった・・・_| ̄|○
せんせい、しつもんです。
えいごがよめないさわむらくんが、なぜてんさいなんでしょうか?
ぼくはえいごがすこしよめるのですが、ぼくはさわむらくんよりあたまがわるいのでしょうか?
ttp://www.geocities.co.jp/Playtown-Spade/6515/geobook.html

やっぱり名無し@沢村さんはム板のアイドルですね
841デフォルトの名無しさん:04/05/31 18:58
動的輪郭を使って物体の輪郭抽出をしたいのですが
プログラムをどうやって書けばいいかさっぱり分かりません
何か参考になる本とかないですか?
創作プログラミングの街
>>841
コーディング方法がわからないってこと?
それともアルゴリズムがわからないってこと?
844名無し@沢村:04/06/01 11:43
おまいらよ、
おれは>>833で、
おれのGIF変換ソフトだが、某GIFアニメソフトで開こうとしたら、開けんかった。
おまいらよ、おれのGIF変換ソフトに欠陥があるのか、そのGIFアニメソフトに欠陥があるのか、どっちだと思う?
と聞いたが、
おれのGIF変換ソフトに欠陥があったほうだったよ。
というのはちょっと手直ししたら、そのGIFアニメソフトで開けるようになったからよ。
まあ、ちょっとしたミステイクだったのよ。
猿も木から落ちる、孔母も筆の誤りというやつよ。わかるかな?
一番の欠陥は沢村自身な。覚えとけ。

>孔母も筆の誤り
弘法も筆の誤り。
ラスタデータで描かれた曲線をベクタデータに変換する
Adobe Streamlineでやっているようなアルゴリズムについて、
資料があったら教えてください。
847デフォルトの名無しさん:04/06/01 23:45
> 846、841他
http://www.utp.or.jp/booksearch/cgi/jump.cgi?id=061119

ここでぐだぐだいってないで、↑を購入シル。ハイエンドCPUを
買うのを我慢すれば、これぐらい買えるだろう。
>>847
takeeeeeeeeeeee!
849名無し@沢村:04/06/02 00:27
おみゃーらよ、おれの「「Visual E++」」がバージョンアップしたから見ちみれ。
実はおみゃーらよ、今度のバージョンから密かに裏機能をつけているのだ。
どんな裏機能だと思う?ふふふ…教えん!自分じ探せ、おみゃーらよ!

http://hp.vector.co.jp/authors/VA015412/
>>847
漏れ東大生だからそのうち図書館で見ようっと。
>>847
なんか漏れ怖ぇよ。こんなの一般人が購入していいのか?
黒服の男たちにマークされたりしない?
「そして851は謎の失踪を遂げた」とかシャレになんねー。
>>851
だったら、全くの興味だけで丸善の本を買いまくっている俺は、かなりの要注意人物ってことか。
>>847
宣伝乙!
いや、でもこういう本今までなかったからいいかも。
1850円とまちがえた
>847
1850ページか
前が750ページで25000円だからコストパフォーマンスは良くなっているみたいだけど
ここ10年あまりで1000ページ分以上アルゴリズムが増えたのか
> 851
でかい本屋いくと、医者や、建築家がこの類いの本のかご一杯買ってるのと同じく、
 グラフィックプログラマーとして食ってるものが普通にこれを買っても
おかしくない。
 ただ、これを買って成果を出しても、薄給はかわらず仕事だけが増えていく
のがとてもつらい。

857名無し@沢村:04/06/02 23:36
おみゃーらよ、おれは昨日謎をかけたろ?
「Visual E++」に裏機能をつけたってな…わかるかな?
おみゃーらよ、それはマシン語とアセンブリ言語のハイブリッド化だったのよ。
まあ、アセンブリ言語のほうは、まだcall、ret、jmp、intの4つにしか対応してないけどな…
これから日々少しずつハイブリッド化を進行させる予定よ。
おみゃーらよ、このプロジェクトが完成した暁には、マシン語だけでも書け、アセンブリ言語だけでも書け、
またマシン語とアセンブリ言語をどんなふうに組み合わせても書ける、前代未聞の恐るべきプログラミングソフトができあがるぞ!!
自分じダウンロードしちみれ?おみゃーらよ?

http://hp.vector.co.jp/authors/VA015412/
PhotoShopのフィルムグレインみたいなものってどうやって作ればいいでしょうか。
859名無し@沢村:04/06/05 22:38
突然だが、おみゃーらよ、おれはもうtcl/tkについて完璧にわかったよ。
というのは、みんなから嫌われながらもム板で質疑応答を繰り返して、完璧にわかったという次第よ。自分じわかるかな?
tcl/tkはGUIが簡単につくれるし便利だよ。おみゃーらよ、おれはちょっとtcl/tkでフリーソフトでもつくってみるよ。
楽しみに自分じ待ってろよ、おみゃーらよ♪
860デフォルトの名無しさん:04/06/06 12:51
今JPEGを解析して、画像サイズ等の情報を取り出そうしています。
JPEGの情報はマーカーによって区切られていて、そのフィールドサイズは
マーカーのすぐ後ろに必ず書いてあると思っていたのですが、
http://siisise.net/jpeg.html
↑のサイトには、
「可変長のマーカのサイズは、普通、マーカのすぐ後ろに
書かれている。書かれていないものもある。」
と書かれていまいした。
マーカーのすぐ後ろにフィールドサイズが書かれていない
ものがあるということは、目的のマーカーを探す処理は、
@マーカーのフィールドサイズを利用して、次のマーカーの位置を算出
Aそのマーカーのフィールドサイズを利用して、次のマーカーの位置を算出
         ・
         ・
         ・

という単純な処理の繰り返しのみでは、フィールドサイズが書かれていない
マーカーがあった場合に、次のマーカー位置算出で失敗してしまうので、
駄目なのでしょうか?

861名無し@沢村:04/06/06 13:50
>>860
単純な処理の繰り返しのみでは駄目だ。
工夫が必要だ。
>>860
漏れもJPEGを完璧に知っているわけではないけど
漏れが経験した限り、サイズが書かれていないマーカは
 RSTn - 0xd0〜0xd7 (Restart Interval)
 SOI - 0xd8 (Start of Image)
 EOI - 0xd9 (End of Image)
のみ。SOI はファイルの一番最初に出てくるマーカだし
EOI はファイルの一番最後に出てくるもの。無視すりゃいいよね。

RSTn はきちんと展開処理しないならばファイルの途中にいきなり
出てくるような印象を受けるけど、画像サイズとかが欲しいだけならば
RSTn が出てくるよりも前に必要な情報は受け取れているはず。

そうでなくても、JPEG の scan の中には無意味な 0xff は
出てこないわけなんだから、単純に次々に 0xff を探していけば
必ず何らかのマーカが見つかる。
JPEG は小難しい技使ってるわりには、かなり扱いやすいファイルだ。
863860:04/06/06 23:54
>>862
情報サンクス!
大変参考になりました!
JPEGは扱いにくいファイルだと思っていましたが、
そうでもないみたいですね。
864デフォルトの名無しさん:04/06/08 02:29
佐世保首切り事件の加害者宅の郵便受けがモザイク入り写真で載ってるんだけど、
誰かこのモザイク外せない?

http://www.tanteifile.com/diary/index2.html
>>864
ぼかしは外せないけど、外さなくても分かる文字は多いな。

あと、スレ違い。
モザイクはずしてどうするのか考えたらとても
協力する気になれない。
win で、画面を Print Screen キーみたいに保存するのに、GetDIBits() を
使ったら、BI_BITFIELDS で出てきた。よく分からないのでMSDNを調べていたら、
biBitCount = 16 なんてのがある。
メモリとか HD とか小さい時代には、こういうのが流行ったのでしょうか。
アクセサリの「ペイント」にも、こんなの、保存形式にない。
まるで今は16bppのビットマップが存在しちゃいけないかのような言い回しだな。
フォトショップとかで使える16bitから―ってどうやってあつかえばいいですか?
>>869
扱いたいように扱え。
871867:04/06/08 23:37
>>868
存在しちゃいけないとは、毛頭いうつもりはありませんが、テストにデータを
入手したくて、ペイントで保存し直せばできるかと思ったら、できない。
MSDN には、16 bit を説明していないのもある。鬼っ子みたいな気がしたもん
で、聞きました。
>>867
GetDIBits() が今でも 16 bit で返すのか、API スレで聞いた方がいいんじゃない?
>>871
とりあえずネット上で参照可能なMSDNにはbiBitCount = 16は明記されてるが。
XPでも画面の色数として16ビットが選択可能な以上ないほうがおかしいだろ。
>>867
流行りはどうだか知らんが、画面の DC から GetDIBits して 16bpp の絵が取れたんなら、
それは画面の色数が 16bit に設定されてるからでしょう。
漏れは大抵 32bit にしてるけど、画面の色数 16bit にするのって流行ってるの?
笑える奴がいるな
876867:04/06/09 14:06
>>874
サンプルの savebmp.c を下敷きにしていて、biBitCount = 0 で最初の
GetDIBits() を出しているのですが、これが 32 bits で返って来るのは、
画面設定の反映なんですね。
表示している絵によって変わるのかと思っていたところでした。で、全体
どんなものが返るのかを調べていました。(この後、色数が少ないなら、
サイズの小さいファイルにしたいなと)
どうもありがとうございました。
877867:04/06/10 22:37
ヒマそうなので、ヨタ話を。
1996年頃の資料に、1,4,8,24 bit color が valid で、16 bit は将来サポートって
説明があった。biCompression も、BI_RGB, BI_RLE4, BI_RLE8 とあって、
BI_BITFIELDS だから、追加されたと予想。後、JPEG も。
ということは、mspaint.exe は、対応していないということかと。
しかし、gif, jpeg は、入っている。気まぐれですかね。
libpngを使って特定の1pixelの色情報を取得したいんですがどうすればいいんでしょう?

libpng.txtの日本語訳とかないのかなぁ
>>878
png_read_image でまとめて読むか、
png_read_row/png_read_rows で行単位に読んで
ほしい場所のデータを参照する。
カラータイプがパレットだったら png_get_PLTE でパレットデータを読んどく。
後はガンマとか他のチャンクで補正するかどうかだね。
>>879
ありがとう
881デフォルトの名無しさん:04/06/15 19:59
ビットマップを直接、バイナリでファイルに書き出して作りたいのですが、質問があります

実際のビットマップファイルをバイナリエディタで開いてみると、ヘッダ部分の解析はできたのですが、
画素の部分の解析ができません。
BGRの順番で左下の画素から順に書かれていることはわかりました。
でも、その画像の横幅分の画素まで到達すると何バイトか0が入っている部分があります。
この部分は画像によって大きさが違うことがわかりました。
この画像によって違う大きさを持つ0の数はどのような規則で決められているのでしょうか?
>>881
解析なんぞせんでもおまいさんが知りたい程度の情報なら「プログラミングWindows(下)」
に分かりやすく解説されてる。

「行のサイズが4バイトの倍数になるように、行の末尾が0でパディングされている場合がある」
>>881
GDI+ 使うとこんなに簡単。

Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(100,100);
Gdiplus::Graphics* gr = Gdiplus::Graphics::FromImage(bitmap);
// gr に何か描く
delete gr;
CLSID pngClsid;
Gdiplus::GetEncoderClsid(L"image/bmp", &pngClsid);
bitmap->Save(L"test.bmp", &pngClsid, NULL);
delete bitmap;

jpeg でも png でも一箇所変えるだけ。
>>882
>>883
ありがとうございます。
たった今、自分で気づいて自己解決た旨を伝えようと思ったら、早速レスがついてました。
どうもありがとうございました。
お騒がせしました。
885名無し@沢村:04/06/15 20:24
>>881
おみゃ〜よ、そりは幼稚園の問題だが、教えちやるよ。おみゃ〜よ。
おみゃ〜よ、ビットマップ画像には縦幅と横幅があるのよ。まあ縦幅のことは高さともいうわな。
で横幅よ。おみゃ〜よ。
横幅は4の倍数なのよ。
でもあるビットマップ画像は縦幅が21ピクセルしかなかった。でも4の倍数なのよ。
おみゃ〜よ、4の倍数は24だろもん?
だから21ピクセルしかなかったら、3ピクセル足りなかろもん?
だから3バイト分、0で埋められるのよ。おみゃ〜よ。
そんんあことよりおりはいまPE実行形式のリソースセクションの詳細が知りたいのよ。
もちろんわがプログラミングソフト「Visual E++」でつくるソフトにリソースをサポートするためなのよ。わかる?
>>885
やっぱこれからの時代E言語っすよね
機械語ができれば何でもできるし
887名無し@沢村:04/06/16 10:21
おみゃ〜らよ、質問があるんだが、人の顔の正面から見た画像から、
人の顔の横から見た画像を生々したいんだが、どうすりゃいいの?
また人の顔の画像から人の尻の画像を生々するには?
なまなま?
漏れの自慢のしゃくれ顎が、正面から見ただけで簡単に想像されてたまるかよ。クソッ
>>887
よーわからんけど六角大王のソースを読んで
研究してみは・・・。
やべえまた沢村にレスしてしまった・・・
892デフォルトの名無しさん:04/06/16 18:46
フリーで使える画像処理ライブラリを探しています
画像取り込みまではこちらでやるとして
エッジ検出、パターンマッチング、ブロブ処理、フィルタリング
あたりが出来れば良いです
開発環境くらい書けぼんくら
894デフォルトの名無しさん:04/06/16 18:50
>>893
すいません、LinuxかWindowsでお願いします
895892:04/06/16 18:56
>>893
開発環境を書き忘れていました
VC6,7,gcc,でリンクできればどんなライブラリでも
構いません。ソースがあればそれに越したことはないですけど
グレースケールに対応していれば良いです
896892:04/06/16 19:03
画像処理と書いてあったので書き込んでみましたが
過去発言読んでみると、お門違いな気がしてきました
よーわからんけどGraphicsMagickはなんでダメなの?
GIMPのを使うとかな。
>>895
OpenCVは?
ippでDIB扱う部分は自分で作る必要あるの?
画像処理だけどさ、基本的なフレームワーク何使ってる?
GEGLとかTEOとかImlibとかImageMagickとかGDとか腐るほどあるみだいだけどさ。
画像処理業界って求人少なくないですか?
転職を考えているんですが
募集してる件数がかなり少ないように思えるのですが。
>>902
画像処理にもいろいろあるが
904デフォルトの名無しさん:04/06/23 09:46
>>902
医療機器の開発とか、大手写真メーカーや電機メーカーがいつも募集しているぞ。
ただし、「いい人がいれば採りたい。人がいないなら欠員でも仕方ない」というタイプの
求人だから、常時募集していても簡単には入れないけどね。
回転の話題がありましたがアンチエイリアスを適応する回転のコードとか
ありませんか。
>>902
ロボット・車両関係の画像認識関連も大いに人不足。
ただし、やぱーり採用は >>904 だが。
907904:04/06/24 00:48
>>902
あと、色んな工場向けの検査装置の需要も結構ある。地味な分野だけど、日本の製造業は
人件費で中国に勝てるわけないから省力化は必須で、人間の目視検査でやっていたものを
コンピュータ化するというのは、それなりに需要があるよ。工場が生産するものそれぞれに
応じて、画像処理のカスタマイズが必要だから、時として、その場しのぎのヤッツケ仕事に
なってしまうことも多いけどね。

今後の需要で期待されているのは、やっぱりセキュリティ関連。ステレオカメラとか
動画像から特徴抽出とか、いろんな案件がある。工場の検査機器と同じで、同じものを
画像処理装置を量産するんじゃなくて、たいていは顧客の要望に即したカスタマイズが
必要になるから、これまた仕事はいろいろある。テーマパークなんかで、お客さんたちの
流れを計測してあれこれ案内を流す装置みたいな、目立たないものが多いけどね。

残念ながら、この手の仕事は、大企業なら研究所で細々とやっていて転職者の募集は
あまりやってない。世間一般には全く名前を知られていない中小企業(しばしば大企業
から独立した人が作った会社)が、大企業から仕事を請け負っている場合が多いし、
中途採用をやっているのもそういうところだったりする。

大企業にこだわるなら、家電メーカーやカメラメーカーのデジカメの開発部門でもあたって
みては? そういえば、サムソン横浜研究所がデジカメの技術者を求めていたなぁ
コダックも、デジカメの開発は日本に集中させると言っていた。
これ以上はマ板だな
「新編 画像解析ハンドブック」ってどこで買えるの?
どこにも売ってないよ…
http://www.utp.or.jp/index.html
版元で買える。

と思ったら、まだ未刊らしいよ。
911デフォルトの名無しさん:04/07/01 01:03
おまいら、PCカメラの映像から、物体の移動を検知する手法を教えてください。

発言元
http://pc5.2ch.net/test/read.cgi/tech/1088022524/272-274
なるほと、フレームの前後をマスクして割り出すのですね
とてもよくわかりました。ありがとうございます
GTK+ とか GDK とかの説明を読んでいて、急に思い出したのですが、
昔、GKS とかの graphics interface ?がありましたが、今、どう
なっているか、なになにに生きているとか、無くなったとか、ご存知の
方いらしゃいませんか。(1985 年頃、Nova Graphics International,
Austin, Texas でやっていたと google では出てくるのみ)
915デフォルトの名無しさん:04/07/02 20:20
顕微鏡などの被写界深度の浅い画像の
全焦点画像の合成って、どうやってやるのでしょうか?

顕微鏡でピントをずらしながら複数フレームの画像をとりこんで、
全フレームの中で周辺8近傍との差分の絶対値の和がいちばん大きい画素を、
一枚のフレームに集めこんだら、できるだろうと思ってやってみました。

まぁまぁ予想した感じにはなったのだけど、
キーエンスとかオムロンとかの合成ソフトの画像ほど、
きれいに合成されませんでした。

やっぱり、こんな単純なアルゴリズムでは、だめなのでしょうか。
空間領域ではなくて、周波数領域とかで処理したりするんでしょうか?
>915
>全フレームの中で周辺8近傍との差分の絶対値の和がいちばん大きい画素を、

もうちょっと頭を使えw
917デフォルトの名無しさん:04/07/04 02:12
>>916
915ではないが、もうちょっと頭を使ったアルゴリズムキボンヌ
各画像のベンチマークとかあったらおせーて。
あと解凍アルゴリズムも。
919デフォルトの名無しさん:04/07/09 13:22
2値画像のラベリングを再帰をつかってやりたいのですが
わかりません。どなたかソースもってませんか!?
教えていただけるとうれしいです
>>919
なんで再帰限定なの?宿題?
921716:04/07/09 17:24
リアルタイム処理したいので高速なのが必要なのです。あとちょっと時間ないので特殊な
データ構造とかいらない簡単なものだと再帰がいいのかなと。
もちろん論文よめば複雑なアルゴリズムあるんでしょうけど・・・。
922デフォルトの名無しさん:04/07/09 23:26
↑919です
>> 921
image MLの1998年8月くらいにラベリングに関するQAがあって、ソースもでていた
ので探してみ
>>921
「再帰」がいいのなら、トランジスタ技術2003年2月号P.201にあります。
"USB接続のパソコン用カメラで物体認識と動き検出"という章。

紹介したはいいけど、再帰って、いまいち気持ち悪いんですよねー。
リアルタイムでキャプチャということですから、
そんなに画像サイズがでかくないんでしょうけど、
再帰コールによるスタックオーバーフローにご注意です。

ついでに再帰を使うアルゴリズムは激遅ですよ、いいのかなー。
Floydが1976年に書いたError Diffusionの論文
"An adaptive algorithm for spatial grayscale", Proc. of the S.I.D, vol17, no.2, pp.75-77
がPDFで見れるとこ探してるんですけどどこかにないでしょうか?
末尾再帰になるならコンパイラによる最適化もじゅうぶん望めて、
スタックも食わないが。
末尾再帰ってなんですか?
927 です、web検索したら、わかりました。
>>925
それ俺も探してたけど結局見つかんなかったなぁ.
極論だけどもし参考文献に引く程度なら読まなくても大丈夫なんじゃない?w
今でもまだ読んでみたいし,見つかったら教えるよ.
930デフォルトの名無しさん:04/07/12 02:50
RGB表色系からCIE L*a*b*表色系への変換方法ってか
RGB→XYZの変換行列が色々あってよくわからないのですが,
RGBからフォトショのLabを得るためにはどうやったらいいのですか?
教えていただけると助かります.
面積平均法って、英語で何て言うんですか?
日本語の文献が少ないようで、海外の文献を
調べようと、ぐぐりたくても、名称が分かりません
> 931
> 面積平均法って、英語で何て言うんですか?

area averaging method
>>915
こんなのもあるけど。
ttp://www.vector.co.jp/soft/win95/edu/se113943.html
何とかってソフトほど綺麗には出来ないかもしれないけど、フリーだしソース付きだから、見てみたら?
934デフォルトの名無しさん:04/07/18 21:18
ベースラインJPEGの画像縦横サイズを取得したい場合、
まずマーカ「FFC0」を探すことになります。しかし実際に
JPEGファイルをバイナリエディタで開いてみたところ、
JPEGファイルによっては、マーカ「FFC0」が2つ存在する
ことが判明しました。しかも、最初に見つかった「FFC0」
のところに書かれている画像縦横サイズは間違った値で、
2回目に見つかった「FFC0」のところに書かれている
画像縦横サイズは正しい値でした。
正しい画像縦横サイズのみ取得するには、
どうしたらよいのでしょうか?

後にくるもので上書きすればいい
>>935
確かにそのようにすれば、2回目に見つかった「FFC0」の値が
取得できますが、後に見つかった「FFC0」の方が必ず正しい値
であるかは分からないので、ちょっと不安です。
>>934
こんなアルゴリズムでどうよ?
これは厳密な BaselineJPEG のデコードの考え方のはずなんだ。
これがダメなら、よければ漏れにも問題の JPEG ファイルをくれるか。

unsigned short get_marker () {
 return (0xff で始まる 2 バイトをストリームから探し、読み、返す)
}
void get_jpeg_image_size () {
 unsigned short marker;
 do {
  marker = get_marker();
  switch (marker) {
   case 0xffd8: // start of image
    break; // 何もせずに次のマーカを処理する。
   case 0xffda: // start of scan
    // これより前に画像の大きさは得られているはず。
    break;
   case 0xffc0: // start of frame 0
    // 本物の start of image 0 のはず。
    process_start_of_frame_0();
    break;
   default:
    // セグメント長を得てストリームをスキップ
    // もしくは、無視してはいけないはずのマーカならば
    // エラーを報告してループを抜ける等。。。
  }
 } while (marker != 0xffda); // start of scan でループを抜ける
}
938デフォルトの名無しさん:04/07/19 00:20
>>937
うーむ、そのアルゴリズムでも駄目かも。
問題のJPEGは、「Windows XP.jpg」で
OSインストール後、↓のフォルダに入ってます。
「C:\WINDOWS\Web\Wallpaper」
漏れ XP 持ってNEEEEEEeeeeeeeee
ちょうだいヽ(;´Д`)ノちょーだい
サブピクセルレンダリングとアンチエイリアスの比較やってみたんですが、
ピクセル補完に二次補完を使った場合は明らかに前者のほうが優れていますが、
三次補完になるとほとんど差がありません。

二次のサブピクセルレンダリングと三次のアンチエイリアスだと、
後者のほうが明らかに画質が高く計算量も少ないのに、なぜAdobeReaderとか
XPでは二次のサブピクセルレンダリングが使われてるんでしょうか?
>>941
サンクスコ。
つーか見てみたけど、20バイト目から始まる「セグメントApplication13」を
指示通り 2280 バイトスキップして、さらに 2302 バイト目から始まる
「セグメントApplication2」も指示通り 3160 バイトスキップして、
さらに 5464 バイト目からの「セグメントApplication14」も指示通りに
14 バイトスキップすればいいんだよ。
つまり >937 のアルゴリズムでいいじゃん。
「セグメントApplication-N」なんて、ほとんど無視して大丈夫。
ちなみに >937 のダメなところは start of frame 0 しか処理していない事。
web上にはプログレッシブJPEG、つまり start of frame 2 を持つものも多くあるよね。
そいつらも処理できた方が cool だ。
もっとも、セグメントの構造はどちらも全く同じだから、
画像サイズを得るには何ら難しい事は考えなくて良いけど。
>>940
漏れの予想だけど、サブピクセルレンダリングの方が
・メモリは必要だけどアルゴリズムが簡単
・細い線をレンダリングできる
からじゃない?間違ってたらスマン
>>933

915です。どうも、ポインタをありがとうございます。
Delphiのソースですね、さっそくDelphi6 Personalをインストールせねば。
(でも *.pas だけテキストエディタで読めばいいのか)

いろいろ資料を探しておりました....
フォトロン社&&産総研の共同研究にブチあたりました。
それを読むと、あんまり頭つかうアルゴリズムではないような気がします。
(NTSCレートで実現しようとしているので、そうなのかもしれませんが)
>>942
>>943

934です。
大変参考になりました!
ちゃんとセグメント長を得てストリームをスキップ すれば
問題ないと言うことですね。
どうもありがとうございます。