質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • MATLAB

    165questions

    MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Matlabで画像の要素の最大値を求めることができません。

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 3,927

shogon700

score 16

Matlabでimg = im2double(imread('finger.png'));により読み込んだ変数imgの
要素の最大値を取り出すことができません。

imgは189×390 doubleという型になっており、身は下図のようになっております。

検索すると、行列については
https://charmie11.wordpress.com/2010/05/20/matlab%E3%81%A72%E6%AC%A1%E5%85%83%E9%85%8D%E5%88%97%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E6%9C%80%E5%A4%A7%E5%80%A4%E6%A4%9C%E5%87%BA/
のようにmax関数を2回使うことで最大値が求まる(1回目のmax関数で最大要素の行ベクトルが求まる)とのことでしたが、変数img(もしくはA(:)のように1次元配列化したもの)に対してこれを実行すると
"添字インデックスは、実数の正の整数か、論理値のいずれかでなければなりません。"
のようにエラーを吐かれて実行することができません。
(この行列に対してmean関数やmedian関数などは実行することができています。)

どのように対処すればよろしいでしょうか?
初歩的な質問で申し訳ありません。宜しくお願い致します。


行列の中身][WIDTH:600
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

誤ってコメント投稿欄に回答してしまいましたので、こちらに再掲します。

以下回答

max が組み込み関数として認識されていないようです.
ワークスペース上にmaxという名前の変数が定義されていることが原因ではないでしょうか.ご確認ください.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

具体的に,どういうコードを実行したのか書いてください.
そのコードが間違っている可能性があります.

A = [1.0 3.0 4.0; 3.4 5.6 1.2]
[maxvec, rowvec] = max(A)
[maxval, column] = max(maxvec)
A(rowvec(column),column)
ans = 5.6000
で正しく受け取ることができましたよ.

画像がカラーで3次元の配列になっていると,2回ではだめかもしれません.
whos img
でsizeが「○×○」(2次元)になっているか確認してみてください.

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/18 12:59

    ご返答頂き、かつ試して頂き有難うございます。

    指摘頂いたコードですが、
    以下のコードをtemp.mとしました。

    img = im2double(imread('finger.png'));
    img = imresize(img,0.5);

    [maxvec, rowvec] = max(img)
    [maxval, column] = max(maxvec)
    fprintf('Max: %6.4f %%\n',img(rowvec(column),column));



    上記のコードを実行しましたところ、以下のような結果となります。
    >> temp
    インデックス付けは複数の結果を出すことはできません。

    エラー: temp (line 4)
    [maxvec, rowvec] = max(img)



    また、ご指摘を受けましたwhos imgを実行してみましたところ

    >> whos img
    Name Size Bytes Class Attributes

    img 189x390 589680 double

    のよう結果でした。

    これらを基にアドバイス頂けると幸いです。
    宜しくお願い致します。

    キャンセル

  • 2015/07/18 17:08

    すみません,手元環境がOctaveで,im2doubleが使えない状態です.
    (パッケージをインストールしようとしたのですが,なぜかサイトが一時的にオフラインでした)
    im2doubleを使用せず,uint8型の2次元グレースケールのファイルで試したところ,
    同じコードでうまく動作しました.
    im2double無しで試してみて頂けますか?

    キャンセル

  • 2015/07/20 16:07

    ご丁寧な対応に大変感謝しております。
    とりあえず、一時的な解決はすることができました。

    im2doubleを使用しないなどいろいろ試してみたところ、
    どうやらMatlabの起動直後はim2doubleを使用して(上記のコード)で
    うまく動作するのですが、なぜか起動してしばらく経つと同じコードでも
    エラーが出るという状況でした。

    原因はまだ分からず、根本的な解決はできていないので今後原因を探りつつ引き続き実装を続けて行こうと思います。

    キャンセル

  • 2015/12/11 16:04

    max が組み込み関数として認識されていないようです.
    ワークスペース上にmaxという名前の変数が定義されていることが原因ではないでしょうか.ご確認ください.

    キャンセル

関連した質問

  • 受付中

    波形の繋ぎ方について質問です。

    aという変数に入っている波形とbという変数に入っている波形をプログラムでつなぎたいです。 このようなことをしたいです。 よろしくお願いします。

  • 受付中

    figureの上書き保存

    例えば「data.dat」というバイナリデータのファイルを画像化したときに、できた画像を「data.png」としてその「data.dat」に上書き保存できないでしょうか。 要

  • 解決済

    matlabで計算した結果を変える

    matlabで計算した結果をほかの文字に割り当てた行列に保存したいのですがうまくいきません。 aがある波形のを読み込んだものです。((200,3)のデータがあるとします。)

  • 解決済

    ファイル保存指定することができるのか

    matlabのaudiowriteやcsvwriteなどをする時に、指定のフォルダに保存することは可能なのでしょうか?

  • 解決済

    Matlab での画像の領域抽出

    前提・実現したいこと Matlabを用いて画像の特定の領域のトリミング 発生している問題・エラーメッセージ 現在、研究でMatlabを用いて以下の花の画像の中心の黄色の花

  • 受付中

    ある範囲内における、10点の和が閾値を超えたところから音声を切り取りたい

    matlabを使用し音声について研究しているのですが、 音声の出力が出ている部分だけを切り取るために、値を二乗し、その音声データの範囲内で10サンプルの和を取って、その値が閾値を超

  • 解決済

    音をフーリエ変換した各音階の差

    前提・実現したいこと MATLABで3つの音の和音を鳴らした後、フーリエ変換してグラフにプロットしています。 発生している問題・エラーメッセージ 各音階のy軸の値に差が出ていま

  • 受付中

    【MATLAB】2次元行列を回転させることで3次元行列を作りたい

    下記の様な51*51の行列を回転させて3次元の配列にすることで3次元の行列を作りたいのですが、その方法についてアドバイス頂けないでしょうか。よろしくお願いします。 以下2次元行

同じタグがついた質問を見る

  • MATLAB

    165questions

    MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。