matlab中imread讀入圖像的原理


imread的使用方法是:
I=imread('C:\XXXX\XXXX.jpg');

 I = imread('E:\2012\The standard image\Lena.bmp');
 I1 = imread('E:\\2012\\The standard image\\Lena.bmp');
I3 = imread('E:\2012\數字圖像處理\數字圖像處理標准測試圖\Lena.bmp');

注釋:也就是說Matlab讀取文件沒有類似於C的那種必須有"\\"或者必須用英文字符。



load 是讀取matalab本身附帶的索引圖(具體路徑是C:\MATLAB2009\toolbox\wavelet\wavedemo);而imread是讀取你自己的圖片(也就是你電腦上的圖);問題在於你處理的圖片是真彩圖(256*256*3)還是偽彩圖(256*256);一般我們電腦上的圖片都是真彩圖,而索引圖是偽彩圖,所以如果使用imread的話,需要把圖片格式轉換。

其中轉換代碼有:
gray2ind 將灰度圖像轉換成索引圖像
grayslice 通過設定閾值將灰度圖像轉換成索引色圖像
im2bw 通過設定亮度閾值將真彩色、索引色、灰度圖轉換成二值圖
ind2gray 將索引色圖像轉換成灰度圖像
ind2rgb 將索引色圖像轉換成真彩色圖像
mat2gray 將一個數據矩陣轉換成一副灰度圖
rgb2gray 將一副真彩色圖像轉換成灰度圖像;
rgb2ind 將真彩色圖像轉換成索引色圖像



不管是什么語言,C也好,matlab也好,它要讀取一個文件的信息都必須按照文件數據的格式來讀取,也就是說,matlab讀取圖像的方法和C語言是一樣的。matlab的imread很強大,一個命令可以讀取各種類型的圖像。但是imread並不是一個實際功能函數。不同的圖像格式有不同的編碼方式,因此有不同的讀取方式。實際上,為每種不同格式的圖像編寫各自的讀取函數是適當的,實際中也是這么做的。
matlab就是這樣的,imread只是一個入口函數。它僅僅是做了一些文件名的處理,從你的文件名中,找到絕對路徑,找到圖像后綴名,然后調用合適的讀取函數。比如你打開\toolbox\matlab\imagesci\private文件夾會看到很多諸如readjpg.m,readtif.m的文件。這些才是不同格式圖片讀取的真正函數,但是!這些函數也不是實際功能函數!你打開這些m函數就可以看到里面其實很簡單。它們所做的事情和imread差不多。也是調用了一些別的函數。比如readjpg.m里的實際讀取函數是rjpg8c rjpg16c 這些。你會發現這些文件也存在於上面所說的這個文件夾中,但是它們的后綴名不是.m,而是.mex(.mex64 for 64bit),這些實際功能函數並不是用matlab編寫的,而是用C編寫的,它們是經過編譯的文件,不是文本文件。matlab只是調用他們而已。
也就是說實際上matlab讀取圖像也是調用了C語言編寫的代碼。而且不同格式的圖像有不同的代碼。imread只不過是個入口函數而已。

具體例子:
使用Imread讀取Lena.bmp圖像,
I= imread('Lena.bmp');
format hex;
I(512,:);
%得到的數據就同源文件用二進制查看方式一樣了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM