MATLAB Answers

画像の全体サイズを変​更せずに画像中の一部​分のみを縮小する方法

조회 수: 22(최근 30일)
金子 夏実
金子 夏実 2021년 7월 30일
댓글: 金子 夏実 2021년 7월 31일
初歩的な質問で申し訳ありません。画像全体のサイズを変更せずに、画像中に含まれるオブジェクトのサイズのみを変更したいです。重複した説明になってしまい申し訳ないのですがたとえばこのような画像において全体のサイズ変更せずにりんごの大きさだけを縮小したいと考えております。実際の画像はグレースケール画像になっております。よろしくお願いいたします。

채택된 답변

Hernia Baby
Hernia Baby 2021년 7월 30일
편집: Hernia Baby 2021년 7월 30일
境界部分を切り取ってサイズ変更します。
画像を読み込み灰色にします。
a = imread("apple.jpeg");
a = rgb2gray(a);
imshow(a);
同じサイズの画像bを作っておきます
b = a;
b(:,:)=0;
閾値を決めて抜き出します
(このときサイズ変更してるので画像も粗いです)
a(a>230)=nan;
a = imresize(a,0.4);
imshow(a);
貼り付けます(背景を少しグレーにします)
[x,y]=size(a);
b(1:x,1:y) = a;
b(b<5)=240;
imshow(b);
  댓글 수: 1
金子 夏実
金子 夏実 2021년 7월 30일
ご回答ありがとうございます。大変わかりやすく書いていただいたことで、理解が深まりました。imresizeのみを使用すると画像のサイズごと小さくなってしまうためとても困っておりました。自分だけでは貼り付けるという考えに至らず、回答を見て感銘を受けました。これからも精進していきたいと思います。この度はありがとうございました。

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

추가 답변(1개)

Atsushi Ueno
Atsushi Ueno 2021년 7월 30일
편집: Atsushi Ueno 2021년 7월 31일
org = rgb2gray(imread('apple.jpeg')); % 以下括弧内はImage Processing Toolboxの対応関数
WB = org < 253; % 二値化する(imbinarize)
new = org(any(WB,2),any(WB,1)); % 余白を除く(imcrop)
new = imresize_wo_toolbox(new, 0.5); % 拡大・縮小(imresize)
org(:) = 255; % 元画像を白紙にする
left_top = (size(org) - size(new))./ 2;
org(left_top(1):(left_top(1)+size(new,1)-1), ... % 縮小オブジェクトを元画像の中央に貼付
left_top(2):(left_top(2)+size(new,2)-1)) = new;
imshow(org);
function Ii = imresize_wo_toolbox(I, ratio) % Image Processing Toolbox無しのimresize
[m,n] = size(I);
sz = round(size(I).*ratio,0);
[X,Y] = meshgrid(1:n,1:m);
[Xi,Yi] = meshgrid(linspace(1,n,sz(2)),linspace(1,m,sz(1)));
Ii = interp2(X,Y,double(I),Xi,Yi);
end % 詳細(interp2を使う)は下記のMATLAB Answers等を参照
  댓글 수: 3
金子 夏実
金子 夏実 2021년 7월 31일
ありがとうございます!

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

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!