画像処理について
20 views (last 30 days)
Show older comments
画像を二値化し、白黒の濃さに応じてRGBの値を変更し、画像の色を変えたいのですが、どのようにすれば良いかわかりません。
二値化はできているのですが、それ以降がなかなかうまくいかないので、教えていただけますと幸いです。
0 Comments
Answers (1)
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
B = A([3 5 8]) % 添え字によるアクセス
C = A([false false true false true false false true false false]) % logical 配列によるアクセス
さて、モノクロ画像データは2次元配列、カラー画像データは3次元配列(R,G,B)です。
元画像データを二値化データでアクセスすれば、TRUEの画素のみ選択して色を変える事が出来ます。
但し、カラー画像データをモノクロ画像データに変換する際にRGB3要素あったデータが1要素に減ってしまっているので、二値化したデータを3枚分重ねてやらないと、期待するようなアクセスになりません。
2 Comments
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);
See Also
Categories
Find more on イメージ タイプの変換 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!