Rの画像行列<480×720 uint8>をX,Y​それぞれ5分割し、真​ん中(96×144)​の平均値を算出したい​。

R = rgbValues(240, 360, 1); のような一画素の値は出力ではなく、 (96×144)の範囲の平均値を出したい。
cam1=vcapg2;%カメラから画像行列取得 image(cam1);%画像表示 pause(0.02);
rgbValues = cam1;%RGBの画像行列
%RGB RGB = rgbValues(240, 360, :); RGB = reshape(RGB, [1,3]);

1 Kommentar

michio
michio am 13 Jul. 2018
Bearbeitet: michio am 13 Jul. 2018
コード表示を編集しました。添付の画像のように、コード部分を選択し、{}Code ボタンを押すことでできますので、ぜひご利用ください。

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Kei Otsuka
Kei Otsuka am 13 Jul. 2018

1 Stimme

画像を5分割するためのインデックスの作成ができればよさそうですね。
ご参考 :  行列のインデックス 
今回のケースですと、まず画像を読み込んで適当にリサイズし、
img = imread('AT3_1m4_06.tif');
img = imresize(img, [480 720]);
5分割するためのインデックステーブルを作成
sz = size(img);
tblc = [0 sz(1)/5 * [1:5]];
tblr = [0 sz(2)/5 * [1:5]];
中心部分をROIとして抽出
idx = 3;
roi = img(tblc(idx)+1:tblc(idx+1), tblr(idx)+1:tblr(idx+1));
平均値を求める
mean(roi(:))
また、insertShape等を利用して元画像に抽出した領域を書き込んであげると解りやすいです。
img2 = insertShape(img, 'Rectangle', [tblr(idx)+1, tblc(idx)+1, 144, 96], 'Linewidth', 5);
figure, imshow(img2)

7 Kommentare

025015
025015 am 17 Jul. 2018
Bearbeitet: 025015 am 17 Jul. 2018
非常に参考になりました。ありがとうございます。
img = imread('AT3_1m4_06.tif');
の'AT3_1m4_06.tif'
部分を cam1 のグレースケール画像にしたいのですが、可能でしょうか。
img2 = insertShape(img, 'Rectangle', [tblr(idx)+1, tblc(idx)+1, 144, 96], 'Linewidth', 5);
figure, imshow(img2)
の部分がエラーが出て表示できません。
現在以下のようにしています。
cam1=vcapg2;%カメラから画像行列取得
image(cam1);%画像表示
pause(0.02);
rgbValues = cam1;%RGBの画像行列
hsvValues = rgb2hsv(rgbValues);%HSVの画像行列
V = hsvValues(:, :, 3);%Vの画像行列取得
colormap(gray);
img = image(cam1(:,:,1));
%5分割するためのインデックステーブルを作成
sz = size(V);
tblc = [0 sz(1)/5 * (1:5)];
tblr = [0 sz(2)/5 * (1:5)];
%中心部分をROIとして抽出
idx = 3;
roi = V(tblc(idx)+1:tblc(idx+1), tblr(idx)+1:tblr(idx+1));
%平均値
mean(roi(:))
img2 = insertShape(img, 'Rectangle', [tblr(idx)+1, tblc(idx)+1, 144, 96], 'Linewidth', 5);
figure, imshow(img2);
Kei Otsuka
Kei Otsuka am 17 Jul. 2018
'AT3_1m4_06.tif'は元々グレースケール画像ですので、任意の画像データと入れ替える形で利用できます。
また、insertShape実行時に出ているエラーはどのような内容でしょうか?
insertShapeはComputer Vision System ToolboxにR2014aから導入された関数ですので、
お使いの環境によってはエラーになるかもしれません。
025015
025015 am 17 Jul. 2018
cam1は<480×720×3 uint8>のRGB動画になっており、 そちらをグレースケール画像にし、表示したいです。
hsvValues = rgb2hsv(rgbValues);%HSVの画像行列
V = hsvValues(:, :, 3);%Vの画像行列取得
上記のようなV画像行列からの画像表示でも構いません。
また、insertShapeについてはR2014a以前のものを使用しているため、エラーになることが分かりました。ありがとうございます。
Kei Otsuka
Kei Otsuka am 18 Jul. 2018
RGB画像をグレースケールに変換したいということでしたら、rgb2gray関数が使えます。
製品ドキュメント : rgb2gray
gray = rgb2gray(rgbValues);
figure, imshow(gray)
HSV変換した後のValue成分のみ表示であれば、
hsvValues = rgb2hsv(rgbValues);
V = hsvValues(:,:,3);
figure, imshow(V)
となります。
025015
025015 am 18 Jul. 2018
ありがとうございます。 それぞれ 関数 'imshow' (タイプ'double' の入力引数) が未定義です。 関数 'rgb2gray' (タイプ'uint8' の入力引数) が未定義です。 となってしまいますが、何か必要なのでしょうか。
Kei Otsuka
Kei Otsuka am 18 Jul. 2018
Image Processing Toolboxが必要ですが、お持ちではないですか?
もしくは、R2014b以降のバージョンであれは、imshowとrgb2grayはMATLAB本体の関数として 使うことができますので、アップグレードされるのも良いかと思います。
025015
025015 am 18 Jul. 2018
持ち合わせていないため、アップグレードします。色々とご対応頂きありがとうございました。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu グラフィックス finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2013a

Gefragt:

am 12 Jul. 2018

Kommentiert:

am 18 Jul. 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!