デジタル画像処理: 実験 3

序文:

Matlab プログラムと画像リソースのリンク

1. グレースケール線形変換法 (g(x,y)=k*f(x,y)+d) を使用して、画像 (カスタマイズ) に対してコントラスト強調、輝度増加、反転を含む 3 つの画像グレースケール変換を実行します。元の画像とグレースケール変換後の画像を提示し、処理過程と処理結果を説明する必要があります。

Matlab プログラム: (バージョン 2016a)


	clc;  
	clear;  
	close all;  
	% 对灰度图进行灰度线性变换  
	img = imread('hua.jpg');  
	img = rgb2gray(img);  
	%k大于1 增大图像的对比度,图像的像素值在变换后全部增大,整体效果被增强  
	k = 1.25;  
	d = 0;  
	gray1 = img * k + d;  
	%k等于1 通过调整b ,实现对图像亮度的调整  
	k = 1;  
	d = 50;  
	gray2 = img * k + d;  
	%k∈(0,1) 图像的对比度被削弱  
	k = 0.5;  
	d = 0;  
	gray3 = img * k + d;  
	%k小于0 原来图像亮的区域变暗,原来图像暗的区域变亮 取反  
	k = -1;  
	d = 255;  
	img_1 = im2double(img);  
	gray4 = img_1 * k + 1.0;  
	subplot(5,2,1),imshow(img),title('原图');  
	subplot(5,2,2),imhist(img),title('原图直方图');  
	subplot(5,2,3),imshow(gray1),title('k>0 d=0');%增大对比度  
	subplot(5,2,4),imhist(gray1),title('k>0 d=0直方图');  
	subplot(5,2,5),imshow(gray2),title('k=1 d=50');%调节亮度  
	subplot(5,2,6),imhist(gray2),title('k=1 d=50直方图');  
	subplot(5,2,7),imshow(gray3),title('k=0.5 d=0');%对比度削弱  
	subplot(5,2,8),imhist(gray3),title('k=0.5 d=0直方图');  
	subplot(5,2,9),imshow(gray4),title('k=-1 d=255');%取反  
	subplot(5,2,10),imhist(gray4),title('k=-1 d=255直方图');  

元画像、加工画像:

ここに画像の説明を挿入

処理の説明と処理結果:

グレースケール線形変換は、指定された一次関数を通じて画像のピクセル値を変換し、画像のグレースケールを強化または低減することです。
グレースケール線形変換の公式は一般的な 1 次元線形関数です:
g(x,y)=k*f(x,y)+d
x を元のグレースケール値とし、変換後のグレースケール値 y を計算します:
y= kx +d (0≦y≦255)
KとDの値を変更することで、画像の線形階調処理を実現できます。プログラムの実行結果から、k>1 の場合、花のテクスチャが元の画像よりも鮮明になり、画像のコントラストが増加します。0<k<1 の場合、コントラストと全体的な効果が向上します。イメージが弱くなっています。k=1の場合、D値を調整することで画像全体の明るさを調整できます。反転した画像構成 k<0 を取得するには、取得した画像が元の画像に比べて大きく変化し、元の画像の明るい部分がより暗くなり、暗い部分がより明るくなっていることがわかります。写真が得られます マイナスの効果。

2. グレースケールしきい値変換の方法を使用して、ターゲット画像の 2 値値と画像上の背景を表示するには、元の画像とグレースケールしきい値変換後の画像を提示し、処理プロセスと処理結果を説明する必要があります。

Matlab プログラム: (バージョン 2016a)

    %清空工作区  
	clc,clear,close all;  
	%读入原图像  
	img = imread('paizi.jpg');  
	imggray=rgb2gray(img);  
	%采用OTSU算法来获取全局阈值,自动选取阈值  
	img_i = graythresh(img);    
	Image2 = im2bw(img,img_i);%二值化  
	%人工选定阈值进行分割,选择阈值为观察直方图波峰所得  
	T1=70;  
	[width,height]=size(imggray);  
	Image1 = zeros(width,height);  
	for i=1:width  
	    for j=1:height  
	        if(imggray(i,j)<T1)  
	            Image1(i,j)=0;  
	        else   
	            Image1(i,j)=1;  
	        end  
	    end  
	end  
	subplot(3,2,1);imshow(img);title('原图');  
	subplot(3,2,2);imhist(imggray);title('原图直方图');  
	subplot(3,2,3);imshow(Image1),title('全局阈值分割效果图');  
	subplot(3,2,4);imhist(Image1);title('全局阈值分割直方图');  
	subplot(3,2,5);imshow(Image2),title('OTUS分割效果图');  
	subplot(3,2,6);imhist(Image2);title('OTUS分割直方图');  

元の画像、処理された画像。

ここに画像の説明を挿入

処理の説明と処理結果:

この情報から、グレー ヒストグラムはグレー レベル分布の関数であることがわかります。グレースケール画像の絵柄が比較的単純で、物体の階調分布が比較的規則的である場合、画像のグレースケールヒストグラムでは背景と物体がピークを形成し、そのピークの間に谷が形成されるため、二重ピークが発生します。間隔の谷に対応するグレー値がしきい値であり、これにより 2 つの領域を分離できます。この原理に基づいて、まず画像をグレースケール画像に変換し、グレースケール ヒストグラムとして出力し、グレースケール ヒストグラムを観察して、より明らかなピーク間の谷を手動のしきい値として選択します。
二値化セグメンテーションには 2 つのアルゴリズム (グローバル閾値セグメンテーション法とグローバル閾値 Otsu 法) が選択されます。
大域閾値分割法:
画像全体で 1 つの閾値のみを使用し、画像全体を対象物体(黒)と背景物体(白)の 2 つの領域に分割する方法を大域閾値法といいます。グローバルしきい値は、画像全体のグレースケールを一定値にしきい値に設定します。ここでは、ヒストグラムに従って処理するための初期しきい値として 70 を選択します。効果図は、この方法が実現可能であること、背景と看板がセグメント化され、ブランドの広告文が明確であることを示しています。Otsu アルゴリズムは主に greythresh 関数を通じてグレーのしきい値を取得し、im2bw 関数を使用して変換し
ます
。それをバイナリ値に変換します。
2 つの操作から、Otsu アルゴリズムの処理効果が明らかに優れていることがわかります。また、画像のしきい値処理プロセスは明らかにピクセル値に分散しており、ヒストグラム内の単一のしきい値によるグローバル セグメンテーション効果よりもさらに改善されています。 。

3. セグメント化されたグレースケール線形変換 (図 3.1 に示す) によって、画像 (図 3.2 に示す) でコントラスト強調が実行されます。元の画像とグレースケール変換後の画像を提示し、処理過程と処理結果を説明する必要があります。

ここに画像の説明を挿入

図 3.1 区分的線形変換
ここに画像の説明を挿入

図 3.2 元の画像

Matlab プログラム: (バージョン 2016a)

	clc;clear;close all;  
	Image = im2double(rgb2gray(imread('zuoye.jpg')));  %读取并对图做处理  
	[h,w] = size(Image);        % 获取图像尺寸  h:height,高度;w:width 宽度  
	NewImage1 = zeros(h,w);      %  赋初值  
	NewImage2 = zeros(h,w);         
	NewImage3 = Image;             
	%确定abcd四个参数的值 
	a = 30/256;b = 100/256;c= 75/256;d= 200/256;             
	for x = 1 : w               % 最外层循环 宽度  
	    for y = 1 : h           % 内层循环   高度  
	        % 在灰度图像中 按列从上至下循环   
	        if Image(y,x)<a     %若(y,x)处值<a时   
	            NewImage1(y,x) = Image(y,x)*c/a;   
	        elseif Image(y,x)<b  % 若(y,x)处值<b时   
	            NewImage1(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;  
	        else                 % 其他情况 做以下处理  
	            NewImage1(y,x) = (Image(y,x)-b)*(1-d)/(1-b)+d;  
	        end  
	        if Image(y,x)>a&& Image(y,x)<b    % 介于(a,b)之间  做下行处理  
	            NewImage3(y,x) = (Image(y,x)-a)*(d-c)/(b-a)+c;  
	        end  
	    end  
	end  
	NewImage2 = imadjust(Image,[a;b],[c;d]);     
	figure;  
	subplot(2,2,1);imshow(Image);title('原始图像');    
	subplot(2,2,3);imshow(NewImage1);title('分段线性灰度级变换图像');  
	subplot(2,2,2);imhist(Image);title('原始图像直方图');    
	subplot(2,2,4);imhist(NewImage1);title('分段线性灰度级变换图像直方图');  
	figure;  
	subplot(2,2,1);imshow(NewImage2);title('截断式灰度级变换图像');    
	subplot(2,2,3);imshow(NewImage3);title('高低灰度级保持不变图像');  
	subplot(2,2,2);imhist(NewImage2);title('截断式灰度级变换图像直方图');    
	subplot(2,2,4);imhist(NewImage3);title('高低灰度级保持不变图像直方图');  

元の画像、処理された画像。

ここに画像の説明を挿入
ここに画像の説明を挿入

処理のプロセスと結果の説明。

画像が露出アンダーまたは露出オーバーの場合、画像のグレー レベルが狭い範囲に限定される場合があり、そのときに表示されるのはグレー レベルのないぼやけた画像になります。線形単一値関数を使用して画像内の各ピクセルを線形に拡張すると、画像の視覚効果が効果的に向上します。
線形グレースケール変換と同様に、区分的線形変換は、画像のグレースケール区間を 2 つ以上のセグメントに分割し、それぞれ異なる線形変換を実行するセグメント単位で実行される線形変換です。区分的線形変換の目的は、対象となるターゲットまたはグレースケール間隔を強調表示し、対象ではないグレースケール領域を相対的に抑制することです。変換は次のように表現できます:
ここに画像の説明を挿入
f は元の画像のグレー値、g は線形グレー スケール変換後の画像のグレー値;
プログラミングのアイデア:
最初に画像を読み取って処理し、画像サイズを取得し、初期値を割り当てます。複数の画像への値は、後続のストレージに使用されます。abcd の 4 つのパラメーターの値を決定した後、2 つのループ ネストを使用して画像配列を走査し、セグメント関数の操作を実現します。次に、さまざまな状況に応じて、さまざまなセグメント値に対して対応する操作が実行されます。最後に、結果がヒストグラムに表示されます。
実験分析:
abcd 値が異なることがわかっているため、(y, x) < a の値、(y, x) < b の値、(a, b) の間の値、およびその他の 4 つの状況が考えられます。 、4 つのケースの傾きは異なり、グレー値の変換則によれば、
傾きが画像のコントラストに影響を与えることがわかり、低いグレー値の部分を圧縮する必要があり、その効果は暗い部分がより暗くなり、コントラストが低くなっているということですが、画像の結果としては、暗い背景がより暗くなっていることがはっきりとわかり、ヒストグラムと組み合わせると、低グレー値部分が圧縮されていることがわかります。より低いグレー値。
これに対応するのが高グレー値部分であり、変換曲線からこの部分の値が増加していることがわかり、高グレー値部分全体が x 軸の右側にシフトし、その結果明るい結果となっていることがわかります。部分が明るくなります。
概要:
区分的線形関数は、点演算、ピクセルベースの画像強調、つまりコントラスト ストレッチでもあります。一般的な原理は、異なるマッピング関数を通じて、異なるグレー スケール間隔のグレー値を別のグレー スケール間隔にマッピングするプロセスです。

おすすめ

転載: blog.csdn.net/TianHW103/article/details/127840769