現在、画像を切り出して輝度値を求めるプログラムの作成を行っています。 手法としては、ある一定の高さで横に1pixelずつ平行移動して、1枚の大きな画像から複数の画像を得ることを目標にしております。 この時どの関数を用いるのが最適でしょうか。 ご教示願います。

 채택된 답변

Tohru Kikawada
Tohru Kikawada 2018년 10월 4일

3 개 추천

スライディングウィンドウで切り出すような処理と理解しました。
その場合にはImage Processing Toolboxの nlfilter 関数がお使いいただけるかもしれません。
切り出した画像に適用する関数を引数として渡してあげることができます。

댓글 수: 5

Taiki Murakawa
Taiki Murakawa 2018년 10월 5일
回答ありがとうございます。 スライディングウィンドウ、nlfilter関数について調べてみましたが、いまいちよく分からないです。
質問の補足ですが、画像の切り取りは以下の形で行われます。 元の画像(960*1280)から一定の大きさ(30*30)を高さは一定で横に1pixelずつ移動させ、1250枚の画像を取得するといった形式です。 この場合でもnlfilter 関数は有効でしょうか。
Tohru Kikawada
Tohru Kikawada 2018년 10월 10일
편집: Tohru Kikawada 2018년 10월 11일
nlfilter ですとファイル名の生成などに persistent を使う必要があるなど、ちょっと見通しが悪そうです。簡単なスクリプトで実装した例を紹介します。
ご参考になれば幸いです。
%%1280x960の画像準備
I = imread('peppers.png');
I = imresize(I,[960 1280]);
%%切り出す画像サイズと高さ
box_width = 30;
box_height = 30;
box_y = 480;
%%バウンディングボックスの生成
bboxes = zeros(1280-box_width,4);
bboxes(:,3) = box_width-1;
bboxes(:,4) = box_height-1;
bboxes(:,1) = (1:(1280-box_width));
bboxes(:,2) = box_y;
bboxes_cell = mat2cell(bboxes,ones(1250,1));
%%切り出しと保存
fun = @(x) imwrite(imcrop(I,x),['image_' num2str(x(1),'%04d') '.png']);
cellfun(fun,bboxes_cell);
Taiki Murakawa
Taiki Murakawa 2018년 10월 11일
例を提示していただきありがとうございます。 実際に試してみたのですが、バウンディングボックスの生成の最終行でエラーが発生します。以下に示します。
エラー: mat2cell (line 89) 入力引数 D1 から D2 は、合計するとそれぞれの入力行列のサイズの次元 [1251 4] にならなければなりません。
ドキュメントよりエラーの意味は分かったのですが、bboxes_cell = mat2cell(bboxes,ones(1250,1));で1250行1列の行列の切り出しを行っている理由がよくわかりません。 お時間がございましたら、教えていただけますでしょうか。
Tohru Kikawada
Tohru Kikawada 2018년 10월 11일
失礼しました。誤ったコード貼り付けていたので、修正させていただきました。 mat2cell の部分は行列を 1 x 4 づつセル配列に切り出している処理になります。 ご参考まで。
Taiki Murakawa
Taiki Murakawa 2018년 10월 15일
無事に切り取ることができました。 ご教示ありがとうございました。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

질문:

2018년 10월 3일

댓글:

2018년 10월 15일

Community Treasure Hunt

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

Start Hunting!