画像処理について

38 views (last 30 days)
佳之助
佳之助 on 21 Jun 2023
Moved: Atsushi Ueno on 22 Jun 2023
画像を二値化し、白黒の濃さに応じてRGBの値を変更し、画像の色を変えたいのですが、どのようにすれば良いかわかりません。
二値化はできているのですが、それ以降がなかなかうまくいかないので、教えていただけますと幸いです。

Answers (1)

Atsushi Ueno
Atsushi Ueno on 21 Jun 2023
I = imread("peppers.png");
BW = im2gray(I) > 128; % 二値化データを作成
BW3 = repmat(BW,1,1,3); % 二値化データをRGBの3枚分重ねる
I(BW3) = 255; % 元画像の内、BW=TRUEの画素を白(255,255,255)に変更する
% 因みに、I(BW)=255だと意図しない結果(R成分のみ変化)となる
imshow(I);
配列データのアクセス方法を下記に示します。添え字によるアクセスの他に、logical 配列によるアクセスも可能です。
A = 1:10
A = 1×10
1 2 3 4 5 6 7 8 9 10
B = A([3 5 8]) % 添え字によるアクセス
B = 1×3
3 5 8
C = A([false false true false true false false true false false]) % logical 配列によるアクセス
C = 1×3
3 5 8
さて、モノクロ画像データは2次元配列、カラー画像データは3次元配列(R,G,B)です。
元画像データを二値化データでアクセスすれば、TRUEの画素のみ選択して色を変える事が出来ます。
但し、カラー画像データをモノクロ画像データに変換する際にRGB3要素あったデータが1要素に減ってしまっているので、二値化したデータを3枚分重ねてやらないと、期待するようなアクセスになりません。
  2 Comments
佳之助
佳之助 on 22 Jun 2023
Moved: Atsushi Ueno on 22 Jun 2023
ありがとうございます。
I(BW3) = 255; % 元画像の内、BW=TRUEの画素を白(255,255,255)に変更する
ここで、白ではなく、紫などの他の色に変えたい場合はどのようにすればよいでしょか。
また、
BW = im2gray(I) > 128; % 二値化データを作成
ここで、128以上ではなく、例えば100から128の間と指定したい場合はどのようにすればよいでしょうか
Atsushi Ueno
Atsushi Ueno on 22 Jun 2023
Moved: Atsushi Ueno on 22 Jun 2023
MATLABでは2次元データのインデックスをX要素、Y要素に分けて入力出来ないので、線形インデックスを使って指定する方法を提案致します。
I = imread("peppers.png");
G = im2gray(I); % グレースケール化。rgb2gray(I)も可
idx = find(100 <= G & G <= 128); % 二値化データの線形インデックスを作成
N = numel(G); % 画素数
C = ones(numel(idx),1); % 線形インデックスと同サイズのベクトル(値は1)
I([idx; idx+N; idx+N+N]) = [C*187; C*66; C*246]; % RGBの順に係数を調整する
imshow(I);

Sign in to comment.

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!