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

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

新規登録して質問してみよう
ただいま回答率
85.35%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

解決済

1回答

1078閲覧

Rで、画像情報に対する条件式を作る。

ques346

総合スコア47

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2021/06/23 10:52

編集2021/06/24 14:23

R

1install.packages("imager") 2library(imager) 3img = load.image( "boats.png" ) 4plot( img ) 5boats[ , , 1, 1 ]

上のコードで、boatsの画像情報を表示できます。また、

R

1boats[ 10, 20, 1, 1 ] # x = 10, y = 20 座標の R の画素値

上のコードで、boats画像のある座標のRGB情報を得られます。
この、各位置のRGB情報に対して

R

1 x <- 2 2 if (x > 0) { # if ( 条件式 ) 3 sum(1:x) # 条件式が TRUE のときに実行される部分 4 } else { 5 x <- -x # 条件式が FALSE のときに実行される部分 6 sum(1:x) # 7 } 8 9if (x > 0) { # if ( 条件式 ) 10 sum(1:x) # 条件式が TRUE のときに実行される部分 11} else { 12 x <- -x # 条件式が FALSE のときに実行される部分 13 sum(1:x) # 14}

こんな感じのifや、forを使って、ある条件を満たすものだけを抽出したりなどしたいのですが、どうするのでしょうか・・・。
boats[ 10, 20, x, y ] などできればいいのですが、いまいちやり方が。

回答を受けて
ちょっと説明が足りていなかったようです、自分でもコードを組みましたができなかったので、
どうやるのかなと。自分で組んだコードを以下に貼ります。例えば、

R

1for (x in 1:5) { 2boats[ x, 20, 1, 1 ] 3}

こういうのです。boatsは、ちゃんと表示されます。
boats[ 1, 20, 1, 1 ]とすればちゃんと小数が表示されます、しかしこのようない、
1から5まで表示、ということができない、これを実行しても「何も表示されません」。
これはfor文ですが、if文は、以下はちゃんと実行、表示されます。

R

1x <- 1 2if (boats[ x, 20, 1, 1 ] > 0.5) { 3print(x) 4} else { 5print(0) 6}

試行錯誤した結果、なぜか

R

1for (x in 1:5) { 2z <- boats[ x, 20, 1, 1 ] 3print(z) 4}

これだとできたんですが、他にやり方あります?

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ques346

2021/06/23 23:41

やはりRの質問はあまり好ましくないんでしょうか・・・
Munosuke222

2021/06/24 01:18

いや長沼テラテイラーさんの丸投げの質問スタイルが好ましくないだけですよ。何度も言われてると思うけど基礎的なことやりなよ。質問の内容見る限りif文とかfor文とかのレベルなんだから、もうちょっと自力で頑張ってみれば?「これでも頑張ってるんです!」って思うかも知れないけど、今のところそれが何も伝わってないし、それを伝えるために質問のテンプレートがあるわけで。現状だと自分のブログかTwitterで一人で一生やってれば?って感じです。
ques346

2021/06/24 03:30

Rのプロの書き込みがなく、全然分からない
KojiDoi

2021/06/24 03:36

だって、最終的にどういう処理をしたいのか全然わからないじゃん。 ただ抽出したいとだけいわれても、「質問文で書いているようなパターンでできるはずだよ」以上のことをどう答えろと?
ques346

2021/06/24 04:54

>できるはずだよ できないです
KojiDoi

2021/06/24 05:08

>できないです なら学校に通え。 あなたの要求は、見ず知らずの相手にタダで教えてもらおうという範囲を超えています。教えてくんの居場所はここにはありません。
K_3578

2021/06/24 07:00 編集

>Rのプロの書き込みがなく 少なくとも貴方の質問に回答、コメントを残してくれているKojiDoiさんは R総合一位の方ですが。 それに、プロに教えてもらうと言うことは当然その労力に見合った対価を払うべき事です。
ques346

2021/06/24 07:23

プロ(というか、Rがタグに入っている人)の書き込みがない、と書いた後に書いて頂いたKojiさんは確かにR1位ですね。
guest

回答1

0

ベストアンサー

Rのプロの書き込みがなく、全然分からない

とのことですがRのプロどころか触ったことすらない私が10分調べたので回答しますよ!!!
自分でコードのコメントに

boats[ 10, 20, 1, 1 ] # x = 10, y = 20 座標の R の画素値

と書きながら

boats[ 10, 20, x, y ] などできればいいのですが、いまいちやり方が。

と書いてるので座標指定を間違っていますね!うまく行かない理由がわかりましたね。
あとはx,yにそれぞれfor文で座標値を入れて、boats[x, y, depth, channel]の値をif文で処理すればできますね。
手元でも同じような感じでfor文で画素値を得てif文で何やらする、みたいなことができました。やったぜ解決!

投稿2021/06/24 06:32

Munosuke222

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ques346

2021/06/24 07:52 編集

ちょっと色々説明が足りていなかったようです、x.yの位置は適当に書いたのですが(ようは上手く変数化できればという) 自分で作ったfor.ifだと上手くいかないんですね、作ったものを貼りました。
Munosuke222

2021/06/24 13:03

追記見ましたけど、boatsの画素値表示するのが目的なんですか?
ques346

2021/06/24 13:43

いきなり難しい事はできないと思い、ひとまずboatsの画素表示をして、正しく機能しているかどうか 確認しようとしたのですが、画素表示すらできません。 boats[ 10, 20, x, y ] と書けば自動的に表示されるはずなのですが、forの中に入れるとできない。 実際は表示することはなく、計算等できれば良いのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問