Download presentation
Presentation is loading. Please wait.
1
アルゴリズム演習2 画像処理 岩崎 慶
2
今週の目標 MATLABによる画像処理 画像データは画素(ピクセル)𝑝(𝑥,𝑦)の集まり
ピクセルはR(赤)G(緑)B(青)の3成分の数値データからなる グレースケール画像では1成分の数値データ 𝑝(1,1) 𝑦 𝑥 255 ⋯ 0 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ 128 ⋯ 16 画素 画像 画像データは行列として表現される
3
グレースケール画像 各ピクセル(画素)𝑝(𝑥,𝑦)は濃淡を表す 通常256段階(8ビット)で表される 8ビットで表現すると白は255、黒は0
各画素は濃淡を保持
4
カラー画像 R(赤)G(緑)B(青)の3成分の濃淡で色を表現 各成分を行列で表現 3次元行列[縦×横×3成分]で表現される
𝑦 𝑥 255 ⋯ 0 ⋮ ⋱ ⋮ 128 ⋯ 16 R成分 255 ⋯ 0 ⋮ ⋱ ⋮ 128 ⋯ 16 G成分 B成分 255 ⋯ 0 ⋮ ⋱ ⋮ 128 ⋯ 16 B成分 G成分 カラー画像 R成分
5
MATLABによる画像読み込み 画像読み込み : imread(ファイル名) 画像表示 : image・imagesc
画像を読み込み画像データを返す 各画素のデータはuint8 型(8ビット) 画像表示 : image・imagesc グレースケール画像は色情報(colormap)を指定 グレースケール画像 imagesc(X);colormap(色調名) 色調名は通常gray カラー画像 image(X); 例 X = imread(‘duck.bmp’); image(X); axis image; %読み込んだ画像の縦横比を用いて表示 X(3,4,1);%左上から縦3横4の赤成分の要素(濃淡)
6
MATLABによる画像処理 imreadで読み込んだデータはuint8型なのでそのまま数値計算することができない
double(倍精度浮動小数点)に変換して0から1の変数に正規化する uint8型の変数 uをdouble型の変数xに変換・正規化 x = double(u) / 255; %uint8型は0から255までの値なため doubleに変換して数値計算し、最終的にimageで表示するためにuint8型に戻す必要がある double型の変数xからuint8型の変数uへ変換 u = uint8(round(x * 255)); %xは0から1でuは0から255 roundは四捨五入する関数 切捨てでもいい
7
MATLABによる画像処理 ネガ画像への変換プログラム 各画素の値を反転 %ネガ画像変換プログラム clear;%データをクリア
X = imread(‘duck.bmp’); p = double(X) / 255;%Xの各要素(uint8型)をdoubleに変換・正規化 [m,n,o] = size(p); %画像サイズの取得 for i=1:m for j = 1:n p(i,j,1) = 1.0 – p(i,j,1); p(i,j,2) = 1.0 – p(i,j,2); p(i,j,3) = 1.0 – p(i,j,3); end X = uint8(round(p * 255)); %doubleからuint8への変換 image(X); axis image;
8
問題1のヒント エッジ検出 エッジは画素の濃度の変化率(勾配)が激しい場所
画素𝑝(𝑥,𝑦)の𝑥方向の変化率 𝜕𝑝 𝑥,𝑦 𝜕𝑥 ≈ 𝑝 𝑥+1,𝑦 −𝑝 𝑥−1,𝑦 2 画素𝑝(𝑥,𝑦)の𝑦方向の変化率 𝜕𝑝 𝑥,𝑦 𝜕𝑦 ≈ 𝑝 𝑥,𝑦+1 −𝑝 𝑥,𝑦−1 2 画素𝑝(𝑥,𝑦)の変化率Δ𝑝(𝑥,𝑦)≈ 𝜕𝑝 𝑥,𝑦 𝜕𝑥 𝜕𝑝 𝑥,𝑦 𝜕𝑦 2 clear;%データをクリア X = imread(‘duckgs.bmp’); P = p = double(X) / 255;%Xの各要素(uint8型)をdoubleに変換・正規化 [m,n] = size(p); %画像サイズの取得 for i=2:m-1 %1からはじめるとp(0,:),p(:,0)となりエラーが出るので for j = 2:n-1 P(i,j) = ...%変化率を各画素p(i,j)で計算し行列Pに保存 end X = uint8(round(P * 255)); %doubleからuint8への変換 imagesc(X);colormap(gray);axis image;
9
問題2のヒント1 ラプラシアン演算 𝛻 2 = 𝜕 2 𝜕 𝑥 2 + 𝜕 2 𝜕 𝑦 2 1 −4
𝛻 2 = 𝜕 2 𝜕 𝑥 𝜕 2 𝜕 𝑦 2 ラプラシアン演算 𝜕 2 𝑝 𝑥,𝑦 𝜕 𝑥 2 = 𝜕 𝜕𝑥 𝜕𝑝 𝑥,𝑦 𝜕𝑥 = 𝜕 𝜕𝑥 𝑝 𝑥+1,𝑦 −𝑝 𝑥,𝑦 =𝑝 𝑥+1,𝑦 −𝑝 𝑥,𝑦 − 𝑝 𝑥,𝑦 −𝑝 𝑥−1,𝑦 =𝑝 𝑥+1,𝑦 −2𝑝 𝑥,𝑦 +𝑝(𝑥−1,𝑦) 𝜕 2 𝑝 𝑥,𝑦 𝜕 𝑦 2 = 𝜕 𝜕𝑦 𝜕𝑝 𝑥,𝑦 𝜕𝑦 = 𝜕 𝜕𝑦 𝑝 𝑥,𝑦+1 −𝑝 𝑥,𝑦 =𝑝 𝑥,𝑦+1 −𝑝 𝑥,𝑦 − 𝑝 𝑥,𝑦 −𝑝 𝑥,𝑦−1 =𝑝 𝑥,𝑦+1 −2𝑝 𝑥,𝑦 +𝑝(𝑥,𝑦−1) 𝛻 2 𝑝 𝑥,𝑦 =𝑝 𝑥+1,𝑦 +𝑝 𝑥,𝑦+1 +𝑝 𝑥−1,𝑦 +𝑝 𝑥,𝑦−1 −4𝑝(𝑥,𝑦) i,jとx,yが混同している 𝑝(𝑥−1,𝑦−1) 𝑝(𝑥,𝑦−1) 𝑝(𝑥+1,𝑦−1) 𝑝(𝑥−1,𝑦) 𝑝(𝑥,𝑦) 𝑝(𝑥+1,𝑦) 𝑝(𝑥−1,𝑦+1) 𝑝(𝑥,𝑦+1) 𝑝(𝑥+1,𝑦+1) 1 −4 ラプラシアンフィルタ
10
問題2のヒント2 画素𝑝(𝑥,𝑦)の近傍4画素を取り出す操作 %行列の一部を取り出す操作例 A=[1 2 3; 4 5 6; 7 8 9];
clear;%データをクリア X = imread(‘duck.bmp’); p = double(X) / 255;%Xの各要素(uint8型)をdoubleに変換・正規化 [m,n] = size(p); %画像サイズの取得 for i=2:m-1 for j=2:n-1 v = p(i-1:i+1,j-1:j+1);%vにはp(i-1,j-1)からp(i+1,j+1)が保持される %ラプラシアン演算を行う end ... %行列の一部を取り出す操作例 A=[1 2 3; 4 5 6; 7 8 9]; v = A(1:2 , 1:2); v = 1 2 4 5 行列の1~2行 1~2列目を取り出す
11
問題4のヒント clear;%データをクリア X = imread(‘duck.bmp’);
p = double(X) / 255;%Xの各要素(uint8型)をdoubleに変換・正規化 size = 16; %サブマトリックスの大きさ for j = 1:size:256 %jとkはサブマトリックスの左上隅のインデックス for k = 1:size:256 %サブマトリックスのRGBの各要素をそれぞれ足し合わせる submatrix_r = p(j:j+size – 1, k:k + size – 1, 1); r = sum(submatrix_r(:)); ... %平均の色を計算 %平均の色をサブマトリックスの色とする end %画像表示
12
レポートの提出方法 提出期限:1/23(木) 19:00 提出方法:メール 提出物:スクリプトMファイルと実行結果(jpgファイル)
メールの件名はreport14とすること(受信確認メールを送るため) 提出物:スクリプトMファイルと実行結果(jpgファイル) スクリプトMファイルは問題ごと作成 スクリプトMファイルの名前は以下にすること p+学籍番号の下2桁+何回目の課題+問題番号 例:学籍番号171000の学生で14回目の課題の1~4問目 p m, p m, p m, p m 実行(出力)結果をメール本文にコピーすること 提出先 : 担当TA : 学籍番号の下2桁で分類 : (学籍番号下2桁) 雪本: : (学籍番号下2桁) : 51- & 3回生以上
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.