デジタル画像処理実験1:画像階調レベル補正
34849 ワード
Matlabベースの画像階調補正 DIP実験1:画像階調補正 実験目的 実験内容 参照コード 1、呼び出しMatlab付帯関数作成 2、自己作成の線形引張関数、べき乗則変換関数、描画ヒストグラム関数、等化関数 を用いる.実験結果 DIP実験1:画像階調補正
実験の目的
よく使われる画像階調補正方法(階調変換法とヒストグラム等化)を把握し,ヒストグラムの理解を深める.画像の増強効果を観察し,階調補正前後の画像を比較した.
実験内容
1)プログラムは画像の階調変換を実現し、画像の入出力マッピングパラメータ範囲(線形延伸と反比例)を変更する.2)パラメータの修正γ\gamma γ値(より大きい、より小さい、1に等しい)は、処理結果を観察する.3)画像ヒストグラムを等化処理し、等化前後の画像とそのヒストグラムを表示する.
添付:参考になるMatlab関数は、imread、imadjust、imhist、stretchlim、histeq、imshow、axis
出力画像の配置形式は以下の通りです.
オリジナル画像
せんけいひっぱりず
反比例画像
γ\gamma γ>1
γ\gamma γ=1
γ\gamma γ<1
げんぞうヒストグラム
等化された画像
等化画像のヒストグラム
リファレンスコード
1、Matlabの自己関数作成を呼び出す
2、自分で作成した線形引張関数、べき乗則変換関数、ヒストグラム描画関数、等化関数
じっけんけっか
実験の目的
よく使われる画像階調補正方法(階調変換法とヒストグラム等化)を把握し,ヒストグラムの理解を深める.画像の増強効果を観察し,階調補正前後の画像を比較した.
実験内容
1)プログラムは画像の階調変換を実現し、画像の入出力マッピングパラメータ範囲(線形延伸と反比例)を変更する.2)パラメータの修正γ\gamma γ値(より大きい、より小さい、1に等しい)は、処理結果を観察する.3)画像ヒストグラムを等化処理し、等化前後の画像とそのヒストグラムを表示する.
添付:参考になるMatlab関数は、imread、imadjust、imhist、stretchlim、histeq、imshow、axis
出力画像の配置形式は以下の通りです.
オリジナル画像
せんけいひっぱりず
反比例画像
γ\gamma γ>1
γ\gamma γ=1
γ\gamma γ<1
げんぞうヒストグラム
等化された画像
等化画像のヒストグラム
リファレンスコード
1、Matlabの自己関数作成を呼び出す
%
org_img = imread('lena.bmp'); %original picture
figure('NumberTitle', 'off', 'Name', ' 1: ');
subplot(3,3,1);
imshow(org_img);
title(' ');
subplot(3,3,2);
linear_img = imadjust(org_img,[0.2 0.5],[0 1]);
imshow(linear_img);
title(' ');
subplot(3,3,3);
inv_img = imadjust(org_img,[0 1],[1 0]);
imshow(inv_img);
title(' ');
subplot(3,3,4);
gmbig = imadjust(org_img,[ ],[ ],2);
imshow(gmbig);
title('\gamma > 1');
subplot(3,3,5);
gmeq = imadjust(org_img,[ ],[ ],1);
imshow(gmeq);
title('\gamma = 1');
subplot(3,3,6);
gmsmall = imadjust(org_img,[ ],[ ],0.5);
imshow(gmsmall);
title('\gamma < 1');
subplot(3,3,7);
imhist(org_img);
title(' ');
subplot(3,3,8);
adh_img = histeq(org_img);
imshow(adh_img);
title(' ');
% histeq adapthisteq ?
subplot(3,3,9);
imhist(adh_img);
title(' ');
2、自分で作成した線形引張関数、べき乗則変換関数、ヒストグラム描画関数、等化関数
figure('NumberTitle', 'off', 'Name', ' 1: ');
OrgImg = imread('lena.bmp'); %
subplot(3,3,1);
imshow(OrgImg);
title(' ');
subplot(3,3,2);
LinearImg = LinearEnhance (OrgImg, [0.5 0.8], [0 1]);
imshow(LinearImg);
title(' ');
subplot(3,3,3);
InverseImg = LinearEnhance (OrgImg, [0 1], [1 0]);
imshow(InverseImg);
title(' ');
subplot(3,3,4);
PowerLaw1 = PowerLawTrans (OrgImg, 1, 2);
imshow(PowerLaw1);
title('\gamma > 1');
subplot(3,3,5);
PowerLaw2 = PowerLawTrans (OrgImg, 1, 1);
imshow(PowerLaw2);
title('\gamma = 1');
subplot(3,3,6);
PowerLaw3 = PowerLawTrans (OrgImg, 1, 0.5);
imshow(PowerLaw3);
title('\gamma < 1');
subplot(3,3,7);
OrgHist = Histo(OrgImg);
bar(0:255, OrgHist, 'b');
title(' ');
subplot(3,3,8);
EquImg = Equalization(OrgImg, OrgHist);
imshow(EquImg);
title(' ');
subplot(3,3,9);
OrgHist2 = Histo(EquImg);
bar(0:255, OrgHist2, 'b');
title(' ');
% LinearEnhance
function TransImg = LinearEnhance (OrgImg, RangeIn, RangeOut)
% OrgImg
% RangeIn ,a、b 0 1
% RangeOut ,c、d, 0 1
a = RangeIn(1);
b = RangeIn(2);
c = RangeOut(1);
d = RangeOut(2);
if (a < 0 || b > 1 || c < 0 || d > 1) %
error(' ');
end
img = im2double(OrgImg);
k = (d - c) / (b - a); %
% a = min(img(:));
% b = max(img(:));
TransImg = ones(256);
for i = 1 : 256
for j = 1 : 256
if (img(i,j) < a)
TransImg(i,j) = c;
elseif (img(i,j) >= a && img(i,j) < b)
TransImg(i,j) = k * img(i,j) + c;
else
TransImg(i,j) = d;
end
end
end
TransImg = mat2gray(TransImg);
end
% PowerLawTrans
function TransImg = PowerLawTrans (OrgImg, c, gamma)
% OrgImg
img = im2double(OrgImg);
TransImg = c * (img .^ gamma) ;
TransImg = mat2gray(TransImg);
end
% Histo
function TransImg = Histo(Img)
TransImg = zeros(1,256);
for i = 0: 255
TransImg(i + 1) = length(find(Img == i)) / (256 * 256);
end
end
% Equalization
function TransImg = Equalization(Img, p)
% p
s = zeros(1,256);
for i = 1 : 256
for j = 1: i
s(i) = p(j) + s(i);
end
end
a = round(s * 255); % round
TransImg = Img;
for i = 0 : 255
TransImg(find(Img == i)) = a(i+1);
end
end
じっけんけっか