數字圖像處理--(02)數字圖像的增強之灰度轉換(點運算)(MATLAB)

圖像增強技術 是一大類基本的圖像處理技術 , 其目的是對圖像進行加工 , 以得到對具體應用來說視覺效果更 “ 好 ” 、 更 “ 有用 ” 的圖像 。
目標: 改善圖像視覺效果,便於觀察和分析,便於人工或機器對圖像的進一步處理。
標準: 相當主觀 , 因人而異,沒有完全通用的標準,可以有一些相對一致的準則。

圖像空域增強

在圖像處理中 , 空域 是指由像素組成的空間 , 也就是圖像域

空域增強方法指 直接作用於像素改變其特性的增強方法 。 具體的增強操作可僅定義在每個像素位置( (x x, , y y) ) 上 ,此時稱爲 點操作 ;增強操作還可定義在每個( (x x, , y y) ) 的某個鄰域上 , 此時常稱爲 模板操作或鄰域操作。
點處理 是作用於單個像素的空間域處理方法,包括圖像灰度變換、直方圖處理、僞彩色處理等技術;
模板處理 是作用於像素鄰域的處理方法,包括空域 平滑、空域銳化等技術。

圖像直接灰度轉換

灰度變換也被稱爲圖像的點運算(只針對圖像的某一像素點)是所有圖像處理技術中最簡單的技術,其變換形式如下:
s=T(r)

其中,T是灰度變換函數;r是變換前的灰度;s是變換後的像素。
圖像灰度變換的有以下作用:

  • 改善圖像的質量,使圖像能夠顯示更多的細節,提高圖像的對比度(對比度拉伸)
  • 有選擇的突出圖 像感興趣的特徵或者抑制圖像中不需要的特徵
  • 可以有效的改變圖像的直方圖分佈,使像素的分佈更爲均勻

線性灰度變換-截取和分段式(一次函數式)

線性灰度變換函數是一個線性函數:B=f(A)=kA+b.其中A爲輸入圖像灰度值,B爲輸出圖像灰度,a爲線性函數的斜率,c爲在Y軸的截距。
當a>1時,輸入圖像的對比度將增大,當a<1時,輸出圖像的對比度將減小;
當a=1時且c≠0時,c的變換僅使所有的灰度值上移或者下移,其效果使整個圖像更暗或更亮,
當a<0時暗區域將變亮,亮區域將變暗。這種線性變換可能由於像素達到飽和(小於0或者超過255)從而丟失一部分細節;
特殊情況a=1,c=0輸入圖像和輸出圖像相同;a=-1,c=255輸出圖像的灰度正好反轉。

k>1 增大圖像的對比度,圖像的像素值在變換後全部增大,整體效果被增強
k=1 通過調整b,實現對圖像亮度的調整
0<k<1 圖像的對比度被削弱
k<0 原來圖像亮的區域變暗,原來圖像暗的區域變亮

imadjust

J = imadjust(I)
將灰度圖像 I 中的亮度值映射到 J 中的新值並使 1% 的數據是在低高強度和飽和,這增加了輸出圖像 J 的對比度值。此用法相當於 imadjust(I,stretchlim(I))

J = imadjust(I,[low_in; high_in],[low_out; high_out])
將圖像I中的亮度值映射到J中的新值,即將low_in至high_in之間的值映射到low_out至high_out之間的值。low_in 以下與 high_in 以上的值被剪切掉了,也就是說,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它們都可以使用空的矩陣[],默認值是[0 1]。

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
將圖像 I 中的亮度值映射到 J 中的新值,其中 gamma指定描述值I和值J關係的曲線形狀。如果gamma小於1,此映射偏重更高數值(明亮)輸出,如果gamma大於1,此映射偏重更低數值(灰暗)輸出,如果省略此參數,默認爲(線性映射)。

clc;
clear all;close all;
img = imread('pout.tif');
o_img = imadjust(img,[0.3 0.6],[0 1]);
subplot(1,2,1);imshow(img);
subplot(1,2,2);imshow(o_img);

效果
在這裏插入圖片描述

線性灰度變換­—圖像反轉

灰度線性變換最常見的就是圖像反轉,在灰度圖像灰度級範圍在這裏插入圖片描述中,其反轉的公式如下所示:
在這裏插入圖片描述
其中,表示原始圖像的灰度級,表示變換後的灰度級。

反轉法一:

i=imread('reverse.jpg');
%I=im2gray(i);
I1=255-i;
imshow(I1);

反轉法二:

使用函數:

incomplement

調用格式:
IM2 = imcomplement(IM)  函數功能: 對圖像數據進行取反運算(實現底片效果)。

參數說明: IM是源圖像的數據, IM2是取反後的圖像數據。

一個簡單的例子:

X = uint8([ 255 10 75; 44 225 100]); 
X2 = imcomplement(X)
X2 = 0 245 180 211 30 155

注意點:

  1. 圖像文件中用uint8來表示256級灰度。 對於真彩色位圖, 一個像素用3個uint8分別表示該像素的R、G、B分量。
  2. uint8表示的數據範圍: 0~255。圖像的底片效果便是拿255 減去原圖像數據。
    代碼:
clc;
clear all;close all;
img = imread('../img1.jpg');
o_img = imcomplement(img);
subplot(1,2,1);imshow(img);
subplot(1,2,2);imshow(o_img);

在這裏插入圖片描述

非線性變換:

圖像灰度對數變換一般表示如下所示:
在這裏插入圖片描述

其中,表示原始圖像的灰度級,表示變換後的灰度級,爲常數。

假設,下圖所示的對數曲線的形狀表明,改變換將輸入中範圍較窄的低灰度值映射爲輸出中較寬範圍的灰度值。相反的,對高的輸入灰度值也是如此。我們使用這種類型的變換來擴展圖像中暗像素的值,同時壓縮更高灰度級的值。反對數變換的作用與此相反。
在這裏插入圖片描述

對數變換

對數變換主要用於將圖像的低灰度值部分擴展,將其高灰度值部分壓縮,
以達到強調圖像低灰度部分的目的。增加圖片細節。

對數變換的 實質 : 將一幅窄帶低灰度輸入圖像映射爲一寬帶輸出圖像
變換方法由下式給出。

在這裏插入圖片描述
這裏的對數變換,底數爲在這裏插入圖片描述,實際計算的時候,需要用換底公式。其輸入爲在這裏插入圖片描述,其輸出也爲在這裏插入圖片描述。對於不同的底數,其對應的變換曲線如下圖所示。
在這裏插入圖片描述

底數越大,對低灰度部分的強調就越強,對高灰度部分的壓縮也就越強。相反的,如果想強調高灰度部分,則用反對數函數就可以了。

clc;
clear all;close all;
img = imread('../gray1.jpg');
D=double(img);
D_1 = 10*(log(D+1));
o_img = uint8(D_1);
subplot(1,2,1);imshow(img);title("原始圖像");
subplot(1,2,2);imshow(o_img);title("輸出圖像");

在這裏插入圖片描述

伽馬變換

伽瑪變換又稱爲 指數變換 或 冪次變換,是另一種常用的灰度非線性變換。
圖像灰度的伽瑪變換一般表示如下所示

在這裏插入圖片描述
其中,表示原始圖像的灰度級,表示變換後的灰度級,和正常數

1)當>1時,會拉伸圖像中灰度級較高的區域,壓縮灰度級較低的部分;

2)當<1時,會拉伸圖像中灰度級較低的區域,壓縮灰度級較高的部分;

3)當=1時,該灰度變換是線性的,此時通過線性方式改變原圖像。
在這裏插入圖片描述

clc;
clear all;close all;
img = imread('../gray1.jpg');
img =rgb2gray(img);
img = double(img);
C=1;
gamma=0.4;
o_img1=C*(img.^gamma);
gamma=1;
o_img2=C*(img.^gamma);
gamma=10;
o_img3=C*(img.^gamma);
img = uint8(img);
o_img1 = uint8(o_img1);
o_img2 = uint8(o_img2);
o_img3 = uint8(o_img3);
subplot(2,2,1);imshow(img);title("原始圖像");
subplot(2,2,2);imshow(o_img1);title("輸出圖像gamma=0.4");
subplot(2,2,3);imshow(o_img2);title("輸出圖像gamma=1");
subplot(2,2,4);imshow(o_img3);title("輸出圖像gamma=10");

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章