画像処理について
47 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
画像を二値化し、白黒の濃さに応じてRGBの値を変更し、画像の色を変えたいのですが、どのようにすれば良いかわかりません。
二値化はできているのですが、それ以降がなかなかうまくいかないので、教えていただけますと幸いです。
0 Kommentare
Antworten (1)
Atsushi Ueno
am 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 Kommentare
Atsushi Ueno
am 22 Jun. 2023
Verschoben: Atsushi Ueno
am 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);
Siehe auch
Kategorien
Mehr zu イメージ タイプの変換 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!