1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MATLAB】画像の背景を透過する方法

1
Last updated at Posted at 2025-12-29

背景

MATLABで画像をインポートするとき、例え元画像で背景が透明であっても、その透明部分は黒(RGBがそれぞれ0)としてインポートされてしまいます。

↓MathWorksロゴ(Technical Articles)をpptで背景透過した画像
 PCのビューアで見ると背景が透過されていたが、Qiita上だと白になっている…。

↓MATLAB上で imreadimshow した結果

今回は、グラフに画像をプロットする上で、この背景を透過する(任意の色を透過する)方法をご紹介します。

問題設定

axes上に、image関数を使ったオブジェクトとして画像を描画することを考えます。

使用する画像 (目がチカチカする…)

コード

main.mlx
fig = figure;
ax = axes(fig);

img = imread("sample.png");
obj = image(ax,img);
axis equal

出力

本題

方法としては、下記ページで紹介されている"条件を満たす配列要素の検索"をベースとしています。imreadでインポートした画像配列に対して、RGBを条件としてこの方法を適用し、その検索結果であるインデックスを画像オブジェクトのAlphaDataへ使用するというアイデアです。


RGBを条件として検索をかけるため、まず各色味のRGBを確認します。
用意した画像のRGBはそれぞれ下記の通りです。

Color R G B
Red 248 63 0
Blue 111 129 206
Gray 116 116 116
Black 46 29 27
White 255 255 229

なんでこんな中途半端な値なんだという点はご容赦ください。
私が好きなゼルダの伝説に登場する色を抜粋しただけで、趣味以上の理由はないです…。


それぞれの色に対して検索条件を設定しましょう。
下記のように記述して、各色を抽出します。

色検索の条件
idxMapRed = img(:,:,1) > 245 & img(:,:,2) < 100 & img(:,:,3) < 100;
idxMapBlue = img(:,:,1) < 150 & img(:,:,2) < 150 & img(:,:,3) > 200;
idxMapGray = img(:,:,1) == 116 & img(:,:,2) == 116 & img(:,:,3) == 116;
idxMapBlack = img(:,:,1) < 50 & img(:,:,2) < 50 & img(:,:,3) < 50;
idxMapWhite = img(:,:,1) > 225 & img(:,:,2) > 225 & img(:,:,3) > 225;

補足情報
配列の要素ごとに条件を検索する場合、AND条件の記載には&を使用します。
よくある&&は途中で判定を打ち切る短絡評価と呼ばれるもので、if文のように判定結果がスカラーとなる場合に使用します。


これで、それぞれの色に該当する部分のみが1で、それ以外が0となる論理配列ができました。
あとは、objの透明度を表すプロパティobj.AlphaDataに、これらの論理配列を適用するだけです。
例として、赤色のみ透過させてみましょう。

赤色のみ透過
obj.AlphaData = ~idxMapRed;

出力

意図通りですね。
ちなみに、Notを取って(~をつけて)代入しているのは、AlphaDataの仕様によるものです。
0が透明で、1が不透明というような仕様になっているため、赤色部分のみ0 かつ 赤色以外が1となるような配列にするため、Notを取って0/1を反転させています。

条件式の取り方次第で、いろいろな透過に応用できると思うので、ぜひ試してみてください。
内容としては以上ですが、せっかくなので他の色についても残しておきます。
ご参考までに。


青色
青色のみ透過
obj.AlphaData = ~idxMapRed;

出力


灰色
灰色のみ透過
obj.AlphaData = ~idxMapGray;

出力


黒色
黒色のみ透過
obj.AlphaData = ~idxMapBlack;

出力


白色
白色のみ透過
obj.AlphaData = ~idxMapWhite;

出力

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?