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

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

采纳的回答

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 个评论
Atsushi Ueno
Atsushi Ueno 2021-7-31
論理notは不要だったのでanyに変更し、変数名等を整理しました。
この回答はImage Processing Toolbox無しでも動作します。
金子 夏実
金子 夏実 2021-7-31
ありがとうございます!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!