impixelを使用​して矩形領域のピクセ​ル値を取得するにはど​うすればよいですか。

impixel関数を用いて、画像の矩形領域(例えば5行5列の25ピクセル)のピクセル値を取得したいです。
c = [ ];
r = [ ];
impixel (Image , c, r)
において、cとrをどのように定義すればよいでしょうか。

6 Comments

実直に従えばこうなります。c と r にスカラ値を加算すれば矩形領域の座標を動かす事が出来ます。
Image = imread('peppers.png');
c = [1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5] + 130;
r = [1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5] + 140;
Pixel = impixel (Image , c, r)
Pixel = 25×3
121 119 22 116 115 10 113 110 12 125 94 23 141 48 31 122 118 17 115 113 10 126 97 22 141 56 34 148 22 34
%imshow(uint8(reshape(Pixel,[],5,3)))
Atsushi Ueno
Atsushi Ueno on 6 Apr 2023
Moved: Atsushi Ueno on 6 Apr 2023
もう少し改善すると
Image = imread('peppers.png');
[r,c] = meshgrid(1:5,1:5);
Pixel = impixel(Image,c(:)+130,r(:)+140);
HI
HI on 6 Apr 2023
Moved: Atsushi Ueno on 6 Apr 2023
分かりやすくご回答頂きありがとうございました。
HI
HI on 7 Apr 2023
meshgridの初期位置は、座標(1, 1)でしょうか。ご教授ください。
>meshgridの初期位置は、座標(1, 1)でしょうか。ご教授ください。
⇒はい。オフセット無しなら座標(1, 1)です。実際にプログラムを動かしてみれば一目瞭然です。
[r,c] = meshgrid(1:5,1:5)
r = 5×5
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
c = 5×5
1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5
[r,c] = meshgrid(11:15,20:22) % 書いた通りに生成されます
r = 3×5
11 12 13 14 15 11 12 13 14 15 11 12 13 14 15
c = 3×5
20 20 20 20 20 21 21 21 21 21 22 22 22 22 22
HI
HI on 7 Apr 2023
ありがとうございました。

Sign in to comment.

Answers (1)

Hiroshi Iwamura
Hiroshi Iwamura on 6 Apr 2023

1 vote

余談ですが、対話型ですので
I = imread('peppers.png');
[x, y, p] = impixel(I)
としてマウスクリックで指定すれば(リターンで終了)座標も得られます。
その座標をそのまま使って
p2 = impixel(I,x,y);
とすることもできます。

1 Comment

HI
HI on 10 Apr 2023
追加の情報ありがとうございました。

Sign in to comment.

Products

Release

R2022b

Asked:

HI
on 6 Apr 2023

Commented:

HI
on 10 Apr 2023

Community Treasure Hunt

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

Start Hunting!