天天看點

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

0、小叙閑言

1、本章整體結構

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

2、書中例子

例2.1 主要是使用函數imadjust,來熟悉一下灰階處理,體驗一把

>> imread(‘myimage.jpg‘);>> f=imread(‘myimage.jpg‘);>> g1 = imadjust(f, [0 1], [1 0]);>>imshow(g1);>>imshow(f);>> g2 = imadjust(f, [0.5 0.75], [0 1]);>>figure;imshow(g2);>> g3 = imadjust(f, [], [],2);>> figure;imshow(g3);

處理前後效果,還可以,f到g1的變換,就是對像素值進行了反轉,也就是書中所講的負片效果,對醫學很有用。

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

g2圖是将[0.5 0.75]間的像素線性變換到[0 1]之間,也就是進行了放大。那麼這裡有點疑問,我們的圖像像素幅值區間不可能隻是有[0.5 0.75],這個參數的意義到底是什麼呢?我對書中的了解如下,上面圖中所用到的是uint8類型圖像,是以圖像幅值區間是[0 255],有一點程式設計基礎的都應該清楚。是以對應uint8類型,它的實際區間為[0.5 0.75]*255=[127.5  191.25]。如果是對應是uint16類型,那麼他的實際區間為[0.5 0.75]*(2^16-1)=[32767 49151],也就是隻取區間[32767 49151]像素幅值。再回到imadjust(f, [0.5 0.75], [0 1]),也就是将區間[127.5  191.25]映射到[0 255],怎麼一個映射法呢?預設的就是線性對應,由兩點(兩個區間形成兩點)确定一條直線。如下圖所示:

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

那麼問題又來了,如果是區間[0.5 0.75]映射到[1 0]又是如何了解的呢,其實是一樣的道理,做好點對點的對應關系,求出線性函數即可。如下圖所示的對應關系,這也就解釋了g1圖效果的原因,從[0 1]映射到[1 0],就是斜率為-1,x取值範圍為[0 255],完全就是一個線性明暗反轉操作。

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

Low_High=strechlim(f),就是幫我們找到圖像f中的像素幅值的最大值和最小值,如果f是一個單值圖像,那麼Low_High就是一個行向量(1*2的矩陣),如果f是一個彩色圖像,那麼Low_High就是一個3*2的矩陣。當我們找到f圖像的最小,最大像素幅值後,再将其映射到整個像素區間[0 1],也就是書中所講,實作對比度拉伸,可以得到不錯的效果。如下圖,從A圖到D圖,D圖就是使用了strechlim(f),然後使用D=imadjust(f,Low_High,[0 1]);得到的圖像,很是清晰。

圖像變換與濾波matlab,數字圖像處理(MATLAB版)學習筆記(2)——第2章 灰階變換與空間濾波...

書中的一個tofloat函數,很短,但寫得很棒,我讀了一下,并添加了一些自己的注釋,代碼如下。

1 function [out, revertclass] = tofloat(in)2 %out=輸入的圖像參數(in)轉化為float型資料點3 %revertclass=一個函數句柄可以将類型轉回去4

5 identity = @(x) x; %一個匿名函數的句柄,表示自身6 tosingle = @im2single; %普通函數句柄 了解為函數指針也行7 tabel ={8 ‘uint8‘, tosingle, @im2uint89 ‘uint16‘, tosingle, @im2uint1610 ‘int16‘, tosingle, @im2uint1611 ‘int16‘, tosingle, @logical12 ‘double‘, identity, identity13 ‘single‘, identity, identity14 };15 %在單元矩陣的第1列中找到輸入參數類型的名字16 classIndex = find(strcmp(class(in), tabel(:, 1)));17

18 ifisempty(classIndex)19 error(‘Unspported input image class.‘);20 end21 %在單元矩陣的第2列中找到索引處轉為flaot型的函數句柄,進行轉換22 out = tabel{classIndex, 2}(in);23%在單元矩陣的第3列中找到索引處反轉為原來類型函數句柄,進行轉換24 revertclass = tabel{classIndex, 3};

3、個人對書中一些知識的了解

心得總結

原文:http://www.cnblogs.com/endlesscoding/p/6681142.html