當前位置:首頁 » 操作系統 » 圖像處理源碼

圖像處理源碼

發布時間: 2022-12-21 22:11:13

❶ 求基於matlab指紋掃描圖像處理的源代碼

clear all,close all,clc % 清理工作空間,關閉運行窗口,清理命令窗口
I=imread('Empreinte.bmp'); % 讀入圖像
imshow(I) % 顯示圖像
set(gcf,'position',[1 1 600 600]); % 得到圖形窗口句柄,設置圖形窗口位置
J=I(:,:,1)>160; % 設定閾值為160,進行黑白化處理
imshow(J) % 顯示處理後的圖像
set(gcf,'position',[1 1 600 600]); % 得到圖形窗口句柄,設置圖形窗口位置
K=bwmorph(~J,'thin','inf'); % 數學形態學運算,圖像細化,~符號代表黑白反色
imshow(~K) % 顯示處理後的圖像,~符號代表黑白反色
set(gcf,'position',[1 1 600 600]); % 得到圖形窗口句柄,設置圖形窗口位置
function y=minutie(x)
i=ceil(size(x)/2);
if x(i,i)==0;
y=0;
else
y=sum(x(:)) - 1;
end
fun=@minutie; % 得到函數句柄
L = nlfilter(K,[3 3],fun); % 濾波處理
LTerm=(L==1); % 選擇端點
imshow(LTerm) % 顯示白色點
LTermLab=bwlabel(LTerm); % 端點標識
propTerm=regionprops(LTermLab,'Centroid'); % 端點區域分析,尋找端點區域中心
CentroidTerm=round(cat(1,propTerm(:).Centroid)); % 端點圓整為整數
imshow(~K) % 顯示隆線細化圖像
set(gcf,'position',[1 1 600 600]); % 得到當前圖形窗口句柄,設置位置
hold on % 在前面的圖形窗口繼續繪制圖像
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 繪制隆線端點標識,紅色圓圈
LBif=(L==3); % 選擇分叉點
LBifLab=bwlabel(LBif); % 分叉點標識
propBif=regionprops(LBifLab,'Centroid','Image'); % 區域分析,尋找區域中心
CentroidBif=round(cat(1,propBif(:).Centroid)); % 分叉點圓整為整數
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 繪制隆線分叉點標識,綠色圓圈
D=6;
Distance=DistEuclidian(CentroidBif,CentroidTerm); % 求端點和分叉點的距離
SpuriousMinutae=Distance<D; % 滿足距離小於D的點
[i,j]=find(SpuriousMinutae); % 查找對應像素點
CentroidBif(i,:)=[]; % 去除該分叉點
CentroidTerm(j,:)=[]; % 去除該端點
Distance=DistEuclidian(CentroidBif); % 求兩個分叉點的距離
SpuriousMinutae=Distance<D; % 滿足距離小於D的點
[i,j]=find(SpuriousMinutae); % 查找對應像素點
CentroidBif(i,:)=[]; % 去除該分叉點
Distance=DistEuclidian(CentroidTerm); % 求兩個端點的距離
SpuriousMinutae=Distance<D; % 滿足距離小於D的點
[i,j]=find(SpuriousMinutae); % 查找對應像素點
CentroidTerm(i,:)=[]; % 去除該端點
hold off % 結束在前面的圖形窗口繪圖
imshow(~K) % 顯示細化圖
hold on % 繼續在前面的圖形窗口繪圖
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 繪制隆線端點標識,紅色圓圈
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 繪制隆線分叉點標識,綠色圓圈
hold off % 結束在前面的圖形窗口繪圖
Kopen=imclose(K,strel('square',7)); % 閉合運算
KopenClean= imfill(Kopen,'holes'); % 填充圖像中的孔洞
KopenClean=bwareaopen(KopenClean,5); % 開運算
imshow(KopenClean) % 顯示處理結果
KopenClean([1 end],:)=0; % 賦值語句
KopenClean(:,[1 end])=0; % 賦值語句
ROI=imerode(KopenClean,strel('disk',10)); % 腐蝕運算
imshow(ROI) % 顯示處理結果
imshow(I) % 顯示原始圖像
hold on % 繼續在前面的圖形窗口繪圖
imshow(ROI) % 顯示感興趣區域
alpha(0.5) % 設置透明度
hold on % 繼續在前面的圖形窗口繪圖
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') % 繪制端點標識,紅色圓圈
plot(CentroidBif(:,1),CentroidBif(:,2),'go') % 繪制分叉點標識,綠色圓圈
hold off % 結束在前面的圖形窗口繪圖
[m,n]=size(I(:,:,1)); % 求圖像尺寸
indTerm=sub2ind([m,n]; % 從下標得到單精度索引
CentroidTerm(:,1),CentroidTerm(:,2)); % 端點
Z=zeros(m,n); % 全零矩陣
Z(indTerm)=1;
ZTerm=Z.*ROI';
[CentroidTermX,CentroidTermY]=find(ZTerm);
indBif=sub2ind([m,n],CentroidBif(:,1),CentroidBif(:,2)); % 從下標得到單精度索引
Z=zeros(m,n);
Z(indBif)=1;
ZBif=Z.*ROI';
[CentroidBifX,CentroidBifY]=find(ZBif);
imshow(I) % 顯示原始圖像
hold on % 繼續繪圖
plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 紅色圓圈
plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 綠色圓圈
Table=[3*pi/4 2*pi/3 pi/2 pi/3 pi/4 % 角度查找表
5*pi/6 0 0 0 pi/6
pi 0 0 0 0
-5*pi/6 0 0 0 -pi/6
-3*pi/4 -2*pi/3 -pi/2 -pi/3 -pi/4];
for ind=1:length(CentroidTermX)
Klocal=K(CentroidTermY(ind)-2:CentroidTermY(ind)+2, ...
CentroidTermX(ind)-2:CentroidTermX(ind)+2);
Klocal(2:end-1,2:end-1)=0;
[i,j]=find(Klocal);
OrientationTerm(ind,1)=Table(i,j);
end
dxTerm=sin(OrientationTerm)*5;
dyTerm=cos(OrientationTerm)*5;
figure % 新建窗口
imshow(K) % 顯示黑白圖
set(gcf,'position',[1 1 600 600]); % 設置圖像窗口屬性
hold on % 繼續繪圖
plot(CentroidTermX,CentroidTermY,'ro','linewidth',2) % 紅色圓圈
plot([CentroidTermX CentroidTermX+dyTerm]',... % 紅色短線
[CentroidTermY CentroidTermY-dxTerm]','r','linewidth',2)
for ind=1:length(CentroidBifX)
Klocal=K(CentroidBifY(ind)-2:CentroidBifY(ind)+2, ...
CentroidBifX(ind)-2:CentroidBifX(ind)+2);
Klocal(2:end-1,2:end-1)=0;
[i,j]=find(Klocal);
if length(i)~=3
CentroidBifY(ind)=NaN;
CentroidBifX(ind)=NaN;
OrientationBif(ind)=NaN;
else
for k=1:3
OrientationBif(ind,k)=Table(i(k),j(k));
dxBif(ind,k)=sin(OrientationBif(ind,k))*5;
dyBif(ind,k)=cos(OrientationBif(ind,k))*5;
end
end
end
plot(CentroidBifX,CentroidBifY,'go','linewidth',2) % 綠色圓圈
OrientationLinesX=[CentroidBifX ...
CentroidBifX+dyBif(:,1);CentroidBifX ...
CentroidBifX+dyBif(:,2);CentroidBifX CentroidBifX+dyBif(:,3)]';
OrientationLinesY=[CentroidBifY
CentroidBifY-dxBif(:,1);CentroidBifY ...
CentroidBifY-dxBif(:,2);CentroidBifY CentroidBifY-dxBif(:,3)]';
plot(OrientationLinesX,OrientationLinesY,'g','linewidth',2) % 綠色短線
MinutiaTerm=[CentroidTermX,CentroidTermY,OrientationTerm];
MinutiaBif=[CentroidBifX,CentroidBifY,OrientationBif];
saveMinutia('John Doe',MinutiaTerm,MinutiaBif); % saveMinutia函數見附件程序

❷ 常用的十大python圖像處理工具

原文標題:10 Python image manipulation tools.
作者 | Parul Pandey
翻譯 | 安其羅喬爾、JimmyHua
今天,在我們的世界裡充滿了數據,圖像成為構成這些數據的重要組成部分。但無論是用於何種用途,這些圖像都需要進行處理。圖像處理就是分析和處理數字圖像的過程,主要旨在提高其質量或從中提取一些信息,然後可以將其用於某種用途。
圖像處理中的常見任務包括顯示圖像,基本操作如裁剪、翻轉、旋轉等,圖像分割,分類和特徵提取,圖像恢復和圖像識別。Python成為這種圖像處理任務是一個恰當選擇,這是因為它作為一種科學編程語言正在日益普及,並且在其生態系統中免費提供許多最先進的圖像處理工具供大家使用。
讓我們看一下可以用於圖像處理任務中的常用 Python 庫有哪些吧。

1.scikit-image
scikit-image是一個開源的Python包,適用於numpy數組。它實現了用於研究,教育和工業應用的演算法和實用工具。即使是那些剛接觸Python生態系統的人,它也是一個相當簡單直接的庫。此代碼是由活躍的志願者社區編寫的,具有高質量和同行評審的性質。
資源
文檔里記錄了豐富的例子和實際用例,閱讀下面的文檔:
http://scikit-image.org/docs/stable/user_guide.html
用法
該包作為skimage導入,大多數功能都在子模塊中找的到。下面列舉一些skimage的例子:
圖像過濾

使用match_template函數進行模板匹配

你可以通過此處查看圖庫找到更多示例。
2. Numpy
Numpy是Python編程的核心庫之一,並為數組提供支持。圖像本質上是包含數據點像素的標准Numpy數組。因此,我們可以通過使用基本的NumPy操作,例如切片、掩膜和花式索引,來修改圖像的像素值。可以使用skimage載入圖像並使用matplotlib顯示圖像。
資源
Numpy的官方文檔頁面提供了完整的資源和文檔列表:
http://www.numpy.org/
用法
使用Numpy來掩膜圖像.

3.Scipy
scipy是Python的另一個類似Numpy的核心科學模塊,可用於基本的圖像操作和處理任務。特別是子模塊scipy.ndimage,提供了在n維NumPy數組上操作的函數。該包目前包括線性和非線性濾波,二值形態學,B樣條插值和對象測量等功能函數。
資源
有關scipy.ndimage包提供的完整功能列表,請參閱下面的鏈接:
https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution
用法
使用SciPy通過高斯濾波器進行模糊:

4. PIL/ Pillow
PIL( Python圖像庫 )是Python編程語言的一個免費庫,它支持打開、操作和保存許多不同的文件格式的圖像。然而, 隨著2009年的最後一次發布,它的開發停滯不前。但幸運的是還有有Pillow,一個PIL積極開發的且更容易安裝的分支,它能運行在所有主要的操作系統,並支持Python3。這個庫包含了基本的圖像處理功能,包括點運算、使用一組內置卷積核的濾波和色彩空間的轉換。
資源
文檔中有安裝說明,以及涵蓋庫的每個模塊的示例:
https://pillow.readthedocs.io/en/3.1.x/index.html
用法
在 Pillow 中使用 ImageFilter 增強圖像:

5. OpenCV-Python
OpenCV( 開源計算機視覺庫 )是計算機視覺應用中應用最廣泛的庫之一 。OpenCV-Python 是OpenCV的python版API。OpenCV-Python的優點不只有高效,這源於它的內部組成是用C/C++編寫的,而且它還容易編寫和部署(因為前端是用Python包裝的)。這使得它成為執行計算密集型計算機視覺程序的一個很好的選擇。
資源
OpenCV-Python-Guide指南可以讓你使用OpenCV-Python更容易:
https://github.com/abidrahmank/OpenCV2-Python-Tutorials
用法
下面是一個例子,展示了OpenCV-Python使用金字塔方法創建一個名為「Orapple」的新水果圖像融合的功能。

6. SimpleCV
SimpleCV 也是一個用於構建計算機視覺應用程序的開源框架。有了它,你就可以訪問幾個高性能的計算機視覺庫,如OpenCV,而且不需要先學習了解位深度、文件格式、顏色空間等。
它的學習曲線大大小於OpenCV,正如它們的口號所說「計算機視覺變得簡單」。一些支持SimpleCV的觀點有:
即使是初學者也可以編寫簡單的機器視覺測試攝像機、視頻文件、圖像和視頻流都是可互操作的資源
官方文檔非常容易理解,而且有大量的例子和使用案例去學習:
https://simplecv.readthedocs.io/en/latest/
用法

7. Mahotas
Mahotas 是另一個計算機視覺和圖像處理的Python庫。它包括了傳統的圖像處理功能例如濾波和形態學操作以及更現代的計算機視覺功能用於特徵計算,包括興趣點檢測和局部描述符。該介面是Python語言,適合於快速開發,但是演算法是用C語言實現的,並根據速度進行了調優。Mahotas庫速度快,代碼簡潔,甚至具有最小的依賴性。通過原文閱讀它們的官方論文以獲得更多的了解。
資源
文檔包括安裝指導,例子,以及一些教程,可以更好的幫助你開始使用mahotas。
https://mahotas.readthedocs.io/en/latest/install.html
用法
Mahotas庫依賴於使用簡單的代碼來完成任務。關於『Finding Wally』的問題,Mahotas做的很好並且代碼量很少。下面是源碼
https://mahotas.readthedocs.io/en/latest/wally.html

8. SimpleITK
ITK 或者 Insight Segmentation and Registration Toolkit是一個開源的跨平台系統,為開發人員提供了一套廣泛的圖像分析軟體工具 。其中, SimpleITK是建立在ITK之上的簡化層,旨在促進其在快速原型設計、教育、解釋語言中的應用。SimpleITK 是一個圖像分析工具包,包含大量支持一般過濾操作、圖像分割和匹配的組件。SimpleITK本身是用C++寫的,但是對於包括Python以內的大部分編程語言都是可用的。
資源
大量的Jupyter Notebooks 表明了SimpleITK在教育和研究領域已經被使用。Notebook展示了用Python和R編程語言使用SimpleITK來進行互動式圖像分析。
http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/
用法
下面的動畫是用SimpleITK和Python創建的剛性CT/MR匹配過程的可視化 。點擊此處可查看源碼!

9. pgmagick
pgmagick是GraphicsMagick庫的一個基於python的包裝。 GraphicsMagick圖像處理系統有時被稱為圖像處理的瑞士軍刀。它提供了一個具有強大且高效的工具和庫集合,支持以88種主要格式(包括重要格式,如DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM和TIFF)讀取、寫入和操作圖像。
資源
有一個專門用於PgMagick的Github庫 ,其中包含安裝和需求說明。還有關於這個的一個詳細的用戶指導:
https://github.com/hhatto/pgmagick
用法
使用pgmagick可以進行的圖像處理活動很少,比如:
圖像縮放

邊緣提取

10. Pycairo
Pycairo是圖像處理庫cairo的一組Python捆綁。Cairo是一個用於繪制矢量圖形的2D圖形庫。矢量圖形很有趣,因為它們在調整大小或轉換時不會失去清晰度 。Pycairo是cairo的一組綁定,可用於從Python調用cairo命令。
資源
Pycairo的GitHub庫是一個很好的資源,有關於安裝和使用的詳細說明。還有一個入門指南,其中有一個關於Pycairo的簡短教程。
庫:https://github.com/pygobject/pycairo指南:https://pycairo.readthedocs.io/en/latest/tutorial.html用法
使用Pycairo繪制線條、基本形狀和徑向梯度:

總結
有一些有用且免費的Python圖像處理庫可以使用,有的是眾所周知的,有的可能對你來說是新的,試著多去了解它們。

熱點內容
手機無線路由器怎麼設置密碼 發布:2025-05-12 05:18:28 瀏覽:815
渝人解壓密碼 發布:2025-05-12 05:18:12 瀏覽:768
備份網站資料庫備份 發布:2025-05-12 05:04:35 瀏覽:53
轉移的存儲卡 發布:2025-05-12 04:51:18 瀏覽:467
c語言大數相加 發布:2025-05-12 04:51:13 瀏覽:589
安卓內存大小有什麼影響 發布:2025-05-12 04:41:36 瀏覽:51
以下c語言常量錯誤的是 發布:2025-05-12 04:40:39 瀏覽:808
怎麼降低qq版本安卓80 發布:2025-05-12 04:40:39 瀏覽:191
一個密碼多少人知道後就不是秘密 發布:2025-05-12 04:26:07 瀏覽:521
ftp埠非21 發布:2025-05-12 04:09:09 瀏覽:229