数列の計算式の作成(画像処理,差分画像作成)

조회 수: 14 (최근 30일)
Atsuhiko Ninomiya
Atsuhiko Ninomiya 2023년 2월 2일
댓글: Hiro Yoshino 2023년 2월 3일
JPEG画像で,連続する差分画像を作成しています.
JPEGデータの名前が「1.jpg, 2.jpg, 3.jpg, ・・・ k.jpg, k+1.jpg」となっていたとします.
I(k) = imread ("k.jpg");
def(k) = I(k+1) - I(k);
figure(def(k))
という数列式を作成したいと思います.
I(1) = imread ("1.jpg")
I(2) = imread ("2.jpg")
I(3) = imread ("3.jpg")
・・・
というように,一つ一つ画像を読み込ませて,差分画像をつくることはできるのですが,
for 関数を用いて,k = 1~n で連続する自然数で展開しようとすると,うまくいきません.
数式について教えていただけますでしょうか.

채택된 답변

Atsushi Ueno
Atsushi Ueno 2023년 2월 2일
n = 0; % 画像(I)の枚数、差分画像(def)の枚数はn-1
for k = 1:n
I{k} = imread(k+".jpg"); % k枚目の画像を読み込む
if k > 1 % 2枚目から差分画像を計算する
def{k-1} = I{k} - I{k-1}; % 差分画像を計算する
imshow(def{k-1}); % 差分画像を表示する
end
end
  • データ型は8bit符号無し整数型(uint8)です
  • 差分が負の値になる場合は0(黒)に飽和します
  • 画像の枚数は n、差分画像の枚数は n-1 です
  댓글 수: 1
Atsuhiko Ninomiya
Atsuhiko Ninomiya 2023년 2월 2일
早速,ご教示くださいましてありがとうございます.
まさに,私が行いたかった処理でした.imshow(~) の前に,”figure” を挿入して,すべての差分画像が matlab figure として表示されました.
{} が,数列の n に相当することが理解できました.
また,下の cellfun の関数についてもご教示くださいましてありがとうございました.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Atsushi Ueno
Atsushi Ueno 2023년 2월 2일
편집: Atsushi Ueno 2023년 2월 2일
恒例の「for文を使ったら負け」シリーズ
imds = imageDatastore(pwd); % 現在のフォルダに 1.jpg, 2.jpg, 3.jpg... が存在すると仮定
I = readall(imds);
def = cellfun(@minus,I(2:end),I(1:end-1),'uni',false);
imshow(cell2mat(def));
  댓글 수: 1
Hiro Yoshino
Hiro Yoshino 2023년 2월 3일
「for 文使ったら負け 」 その通りです!
@Atsushi Ueno さんのこちらのスマートな方法をお薦めします。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Biomedical Imaging에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!