グレー画像を微分ヒストグラムを用いて2値化する方法を教えてください。
プログラムが書ける程度の詳しさでアルゴリズムの説明をお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

・2値化関数(グレー画像と閾値を引数に与えると2値画像を返す)


・閾値決定関数(グレー画像を引数に与えるとヒストグラムの微分値の
        極大値を返す)
というのがあれば実現できるのでは?

2値化関数は簡単ですよね。グレー画像における画素(i,j)における
2値化作業は、輝度値の閾値Θに対して、Ib[j][i] = Ig[j][i] > Θ
を実行すれば良いですよね。ただし、Ib[j][i]は2値画像の画素(i,j)の
値、Ig[j][i]はグレー画像の画素(i,j)の値。不等号演算子は真なら1、
偽なら0を返す。

さて、閾値決定関数ですが、まず、輝度値ごとのヒストグラムを
作ります。

int hist[256]; // グレー画像が256階調であるとする。
for(i = 0 ; i < x_size ; i++)
 for(j = 0 ; j < y_size ; j++)
  hist[Ig[j][i]]++;

次に、ヒストグラムを使って、微分ヒストグラムを作ります。

int dhist[256];
for(i = 0; i < 256 ; i++)
 dhist[i] = hist[i+1] - hist[i];

こんな感じです。後は微分ヒストグラムdhistを最大にする
輝度値を求めればOKです。

離散値の微分は他の方法もあります。例えば、

 dhist[i] = (hist[i+1] - hist[i-1]) / 2.0f;

なんかも。

あと、画像のサイズが十分に大きくないときには、
工夫(画素ヒストグラムが極端に低い・高い画素が
存在し得るので)が必要かも知れません。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHTML→PHP フォームの値の受け渡しができません

PHPをはじめたばかりの初心者です。
ネットでいろいろ調べましたがわからず困っています。
お助けくださいm(_ _)m

<内容>
フォームの入力内容をPHP側で参照できません。
具体的には、
<form method="post" action="test.php">
<select name="BirthDay" size="1">
<option value="1">1月生まれ</option>
<option value="2">2月生まれ</option>
<option value="3">3月生まれ</option>
</select>
<input type="submit" value="決定">
</form>
で飛ばした値を、
print($BirthDay);
で表示させようとしています。
しかし、$BirthDayには何も入ってきません。
ただ、できないのはローカル環境だけで、
実際、他のサーバーにアップしてやると正常に
動作します。
ローカル環境は
Win2000SP4+PHP4.4.1+Apache1.3.34
です。
httpd.confを見直しましたがわかりませんでした。
ぜひアドバイスをお願いしますm(_ _)m

PHPをはじめたばかりの初心者です。
ネットでいろいろ調べましたがわからず困っています。
お助けくださいm(_ _)m

<内容>
フォームの入力内容をPHP側で参照できません。
具体的には、
<form method="post" action="test.php">
<select name="BirthDay" size="1">
<option value="1">1月生まれ</option>
<option value="2">2月生まれ</option>
<option value="3">3月生まれ</option>
</select>
<input type="submit" value="決定">
</form>
で飛ばした値を、
print($BirthDay);
で表示させようと...続きを読む

Aベストアンサー

そういうときは

$_POST[BirthDay] で受け取ります
GETの場合は
$_GET[]です

Q微分方程式をルンゲクッタ法を用いて解くプログラム

2*(y''(x))+0.5(y'(x))+2.5y=1
Y(0)=0.1,y'(0)=0.1
この微分方程式をルンゲクッタ法を用いて、
x軸が0から50位(0.01刻み)までのyの値を算出するプログラムを作りたいのですが、どうすればいいのかさっぱり分かりません。
ネットで色々と調べてみたのですが、ルンゲクッタ法をどうやってプログラムで表せば良いのかが分かりません。
どうか、回答をよろしくお願いします。

Aベストアンサー

もし学校の課題なら自分で考えないと自分の将来のためによくないよ。
そうでないなら、基本はここで十分でしょう。
http://www.damp.tottori-u.ac.jp/%7Eooshida/edu/ode/
サンプルソフトが欲しければ、ここ。
http://www.unige.ch/math/folks/hairer/software.html

Qhtmlからphpへの値の受け渡しについて

いつも助けてもらってます。
今回も宜しくお願い致します。

現在、複数のhtmlページから一つのphpを呼び出しているのですが、
phpのselect文の中で各ページの持つ定数(変数?)を使用したいと考えています。

phpのselect文
SELECT
*
FROM
ITEM
WHERE
ITEM_DIV = 各ページの定数(文字列)


各ページの定数は、必ず同じ物です(ダイエット、食品etc..)
グーグルなどで調べた結果、
POSTやSESSION、FORMで出来そうな感じだったのですが、

渡すものがいつも決まっていて、かつ一つなので
もっと簡単に渡せるんじゃないかな?と考えて投稿させてもらいました。

宜しくお願いします!!

Aベストアンサー

php側で、どのhtmlからリンクされたかが分かればいいと思いますので、
サーバ環境変数の $_SERVER['HTTP_REFERER'] で可能かと思います。

参考URL:http://lib.stwing.jp/archives/2005/09/php_server.html

QC言語プログラムを用いた画像表示プログラム

おはようございます。

お時間ありましたら、ご教授よろしくお願いいたします。

C言語を使って、画像の表示、画像の処理ができるプログラムを作成したいのですが、私自身、JAVAを少しかじった程度の知識しかなくなかなかうまくいきません。

やっかいなことに、ただ画像を表示させるだけでなく、JPEGライブラリを用いた(JPEG画像を読み込んで処理できる)C言語プログラムのプログラムを作成したいのですがうまくいかずご質問させていただきました。

参照できるサイト、ご自信の作られたプログラム、プログラムを経験されている方の記述など教えていただければ幸いです。

明確な質問ではないのでご回答が非常に難しいと思いますが、よろしくお願いいたします。

早朝からお忙しいと思いますが、お時間がありましたら是非ご教授よろしくおねがいします。

Aベストアンサー

私のホームページにお絵かきソフトがあり、ソースを公開しています。
全体で2万行程度で、そのうち9割は汎用モジュールです。
ウィンドウ周りの処理はC++を使用していますが、
ほとんどの部分はCで書いてあります。
よろしければご参照ください。

参考URL:http://www.fiberbit.net/user/mobf5f2/program.html

Qhtmlファイルからphpファイルへの値の受け渡し

表を使った問い合わせフォームを作成したのですが、データを受け渡す方法がわかりません!!

初めの問い合わせページは以下のようにhtmlファイルで記述しました。

この場合、次のページにデータを引き渡すphpファイルには、どうのような記述をしたら良いのでしょうか?

<form method="post" action="info.php">
<table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0">

<tr>
<td width="190" align="left" bgcolor="#FFF09D">お名前 <span class="tabletext1">※必須</span></td>
<td><input name="name" type="text" class="form01" id="name" /><br />
入力例:山田 太郎
</td>
</tr>

<tr>
<td align="left" bgcolor="#FFF09D">メールアドレス <span class="tabletext1">※必須</span></td>
<td><input name="mail" type="text" class="form01" id="mail" /><br />
入力例:●●●●●●@yamada.co.jp
</td>
</tr>

<tr>
<td align="left" bgcolor="#FFF09D">メールアドレス(確認) <span class="tabletext1">※必須</span></td>
<td><input name="mail2" type="text" class="form01" id="mail2" /></td>
</tr>

<tr>
<td align="left" bgcolor="#FFF09D">お問い合せ内容 <span class="tabletext1">※必須</span></td>
<td>
<select name="list" id="list">
<option>お問い合せ内容をお選びください</option>
<option>事業内容について</option>
<option>求人について </option>
<option>その他</option>
</select>
</td>
</tr>

<tr>
<td align="left" bgcolor="#FFF09D">内容 <span class="tabletext1">※必須</span></td>
<td><textarea name="content" id="内容" cols="45" rows="5"></textarea></td>
</tr>

</table>

<p align="center" class="margin01">
<input type="reset" value="クリア" />
<input type="submit" value="送信内容を確認する" />
</p>
<input type="hidden" name="test" value="cloud" />
</form>

表を使った問い合わせフォームを作成したのですが、データを受け渡す方法がわかりません!!

初めの問い合わせページは以下のようにhtmlファイルで記述しました。

この場合、次のページにデータを引き渡すphpファイルには、どうのような記述をしたら良いのでしょうか?

<form method="post" action="info.php">
<table class="table margin01" width="592" border="0" cellpadding="0" cellspacing="0">

<tr>
<td width="190" align="left" bgcolor="#FFF09D">お名前 <span class="tabletext1"...続きを読む

Aベストアンサー

ここが参考になりますかね。


http://www.phppro.jp/school/phpschool/vol6/1


postの処理をどう判定するのかどうか書いてあります。

若干異なるのは、質問者さんは次の画面で入力チェックを行いたいと言う事ですが、
参考サイトは遷移前で入力チェックを行っています。
入力するたびに次画面に遷移してエラーであれば戻ると言うのは
あまりよろしくないかと思いますが…。

QOpenCVを用いたヒストグラムの比較について

 現在画像の類似度を求めるために、OpenCV1.0を使って色のヒストグラムの距離を求めるということを行っております。OpenCVで公開されているヒストグラム間の距離のサンプルプログラムを使って行っているのですが、結果があまり芳しくないためいろいろ調べなおしたところ、減色処理、量子化というワードにたどり着きました。
 しかし調べてみてもいまいち分からず、行き詰っているのが現状です。どなたか減色処理や量子化について詳しい人がおりましたら、是非回答のほうよろしくお願いします。以下がOpenCVのコードなのですが、どこの部分をどのように変えたらそれが実現できるのかも是非回答お願いいたします。


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

int
main (int argc, char **argv)
{
char text[16];
int i, hist_size = 256, sch = 0;
float range_0[] = { 0, 256 };
float *ranges[] = { range_0 };
double tmp, dist = 0;
IplImage *src_img1 = 0, *src_img2 = 0, *dst_img1[4] = { 0, 0, 0, 0 }, *dst_img2[4] = {
0, 0, 0, 0};
CvHistogram *hist1, *hist2;
CvFont font;
CvSize text_size;

// (1)二枚の画像を読み込む.チャンネル数が等しくない場合は,終了
if (argc >= 3) {
src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
}
if (src_img1 == 0 || src_img2 == 0)
return -1;
if (src_img1->nChannels != src_img2->nChannels)
return -1;

// (2)入力画像のチャンネル数分の画像領域を確保
sch = src_img1->nChannels;
for (i = 0; i < sch; i++) {
dst_img1[i] = cvCreateImage (cvSize (src_img1->width, src_img1->height), src_img1->depth, 1);
dst_img2[i] = cvCreateImage (cvSize (src_img2->width, src_img2->height), src_img2->depth, 1);
}

// (3)ヒストグラム構造体を確保
hist1 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1);
hist2 = cvCreateHist (1, &hist_size, CV_HIST_ARRAY, ranges, 1);

// (4)入力画像がマルチチャンネルの場合,画像をチャンネル毎に分割
if (sch == 1) {
cvCopy (src_img1, dst_img1[0], NULL);
cvCopy (src_img2, dst_img2[0], NULL);
}
else {
cvSplit (src_img1, dst_img1[0], dst_img1[1], dst_img1[2], dst_img1[3]);
cvSplit (src_img2, dst_img2[0], dst_img2[1], dst_img2[2], dst_img2[3]);
}

// (5)ヒストグラムを計算,正規化して,距離を求める
for (i = 0; i < sch; i++) {
cvCalcHist (&dst_img1[i], hist1, 0, NULL);
cvCalcHist (&dst_img2[i], hist2, 0, NULL);
cvNormalizeHis

 現在画像の類似度を求めるために、OpenCV1.0を使って色のヒストグラムの距離を求めるということを行っております。OpenCVで公開されているヒストグラム間の距離のサンプルプログラムを使って行っているのですが、結果があまり芳しくないためいろいろ調べなおしたところ、減色処理、量子化というワードにたどり着きました。
 しかし調べてみてもいまいち分からず、行き詰っているのが現状です。どなたか減色処理や量子化について詳しい人がおりましたら、是非回答のほうよろしくお願いします。以下がOpenCVのコ...続きを読む

Aベストアンサー

量子化
JPEGの圧縮アルゴリズムなんかで出てきますよね。
そっちの分野では一般的な用語の使い方らしい。

# 私は真っ先にAD変換器が思い浮かびました

QHTML データ受け渡し

HTMLのデータ受け渡しをしたいのですが

例えば

・担当者_HTML

担当者選択
A        ←Aを選択(Aという値を年齢_HTMLに転送)


・年齢_HTML

年齢選択
20代     ←20代を選択(20代という値とBという値を実行ファイルに渡したい)
30代

Aベストアンサー

これだけのデーターだとすると、自作自演。

このような事をしたいと思うということは、この手の事をしていないと、この発想をしない。

とりあえず、候補を挙げておくが。

基本的なところから

http://reference.ascii.jp/html/form

ServerSideScriptを使う。POSTなのかGETなのかがポイント。

次にGETの応用

URL#HTML Object Element Name(ID)

これにイベント属性との組み合わせ。

JavaScriptなどを使った、ClientSideScriptで選択した結果を処理し、最後にFORMで送信。

ASPXやJSPなどを使えば、バインドしたHTMLタグを使える、

やり方は、さまざまあるので、基本的な事をまなんでから、何ができそうだから、何を使ってやる場合。などと、再度質問してください。

Q2次関数の最小値をC言語と遺伝的アルゴリズム(GA)を用いて求めたいです汗

私は機会系の大学生のものです。

今回は
2次関数の最小値をプログラムのC言語と遺伝的アルゴリズム(GA)を用いて求めたいのですが
私がC言語が素人のためプログラムを作れません...。例として教えていただけると幸いです。

よろしくお願い致します。

Aベストアンサー

作ってみた
https://gist.github.com/otaks/3c6eebea260ce1296da2b9a2d03fd421

各遺伝子は5要素の配列から成っており、
[3][2][1][0]を2進数に見立てて、これを10進数に変換し
[4]を元に符号をつけている。

ユーザ入力は以下を参考に。
(平方完成後の値を入力するようになっています)
y=a(x+q)2+q
(minx<=x<=maxx)

50世代ぐらい回せば正解が出そう。

中学校当たりの問題は解けそうだけど、今の作りだとxが-15~15しか
表現できないし、精度は整数レベルなので、より難しい問題を解くならば
改造が必要。

Q値の受け渡しについて

JavaScriptを使用しa.htmlからb.htmlへ
値の受け渡しについて分らない事があります。

やりたいことはa.html内にある
<a href="b.html">あああ</a>の「あああ」の値を
b.html内にある<INPUT>に入れたいのです。

現在記述しているコードを下記記しますので
何方かご教授お願いします。

■a.html
<html>
<a href="b.html" onclick="this.href=this.href+'?'+encodeURIComponent(this.innerHTML)">あああ</a>
</html>
■b.html
<html>
<script type="text/javascript">
query = decodeURIComponent( location.search.slice(1,1000) );
document.getElementById('in_name').value = query;
</script>
<form>
<INPUT type="text" id="in_name" name="in_name" value="">
</form>
</html>

JavaScriptを使用しa.htmlからb.htmlへ
値の受け渡しについて分らない事があります。

やりたいことはa.html内にある
<a href="b.html">あああ</a>の「あああ」の値を
b.html内にある<INPUT>に入れたいのです。

現在記述しているコードを下記記しますので
何方かご教授お願いします。

■a.html
<html>
<a href="b.html" onclick="this.href=this.href+'?'+encodeURIComponent(this.innerHTML)">あああ</a>
</html>
■b.html
<html>
<script type="text/javascript">
query = decodeURIComponent(...続きを読む

Aベストアンサー

document.getElementById('in_name').value = query;



window.onload=function(){
document.getElementById('in_name').value = query;
}

としてください

Q暗号化・復号化のアルゴリズムにはどんなものがありますか?

Cでプログラミングを勉強しており、20文字ほどの文字列を暗号化・復号化するプログラムを考えていますが、ネットを検索しても暗号化アルゴリズムでなかなかいいものが見つかりません。

私のリクエストとしては

・暗号化対象は半角英数字、半角記号のみ。
・単に文字コードを1つずつずらしたような簡単な暗号ではなく、複雑なアルゴリズムを使用したい。
・アルゴリズムは複雑でもプログラムは簡潔にできるものがいい。(長くても数百行程度)。
・アルゴリズム自体の仕様が公開されている。
・アルゴリズムは数学式で表せるものがいい。
・スーパーコンピュータを使わなければ解けないほど時間がかかる暗号化アルゴリズムでなくてもいい。
・暗号化のライブラリファイルは使わず、自前で全部コードを書きたい。
・公開鍵や秘密鍵を使わなくてもいい。

上記の条件を満たす暗号化アルゴリズムでいいものがありましたら、教えてください。

以上、よろしくお願いします。

Aベストアンサー

Blowfishはどうでしょうか。

・暗号化対象は半角英数字、半角記号のみ。
> バイナリデータでしたらなんでも暗号化できます。

・単に文字コードを1つずつずらしたような簡単な暗号ではなく、複雑なアルゴリズムを使用したい。
> 簡単に解く方法はまだ見つかっていないはずです。

・アルゴリズムは数学式で表せるものがいい。
> どのようなものを数学式として想定されているのかは分かりませんが、
> 数学式で表せない暗号化方式はコードにできないと思いますので
> 数学式でも表せるでしょう。

・暗号化のライブラリファイルは使わず、自前で全部コードを書きたい。
> サンプルコードを見ていただければ分かるのですが、600行ほどのコードで実現できます。自前で全部書けるでしょう。

> 公開鍵や秘密鍵を使わなくてもいい。
共通鍵暗号方式なので公開鍵や秘密鍵は使いません。

参考URL:http://www.schneier.com/blowfish-download.html


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報