数字图像处理算法整理

更新时间:2023-06-05 18:53:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字图像处

数字图像算法整理

1. 图像锐化

2. H=imread('C:\Users\home\Pictures\zhengqiji.jpg'); 3. H=rgb2gray(H); 4. [M,N]=size(H);

5. G2=H;B2=H;g=0;K=A;gmax=0;

6. --------------------用索贝尔算子对图像锐化------------------------- 7. for i=2:M-1

8. for j=2:N-1

9. GX2=(H(i+1,j-1)+2*H(i+1,j)+H(i+1,j+1))-(H(i-1,j-1)+2*H(i-1,j)+H(i-1,j+1)); 10. GY2=(H(i-1,j+1)+2*H(i,j+1)+H(i+1,j+1))-(H(i-1,j-1)+2*H(i,j-1)+H(i+1,j-1)); 11. 12. 13. 14. 15.

G2(i,j)=abs(GX2)+abs(GY2); if G2(i,j)>0 B2(i,j)=1; else B2(i,j)=0;

end

16. end 17. End

18. --------------------------------------------------------------- 19. 20. 21. 22. 23.

---------------给图像填充颜色--------------------------------- for r=1:M for t=1:N if B2(r,t)==1 E(r,t)=255;

24. else E(r,t)=0;%给图像填充颜色% 25. end

26. end 27. End

28. ------------------------------------------------------------- 29. imshow(E);title('显示图像');

数字图像处

2.图像腐蚀算法

H=imread('C:\Users\Administrator\Desktop\zhengqiji.jpg'); H=rgb2gray(H); [M,N]=size(H); G2=H;B2=H; Express=H; bottle=zeros(M,N);

-----------------------图像锐化--------------------------------- for i=2:M-1 for j=2:N-1

GX2=(H(i+1,j-1)+2*H(i+1,j)+H(i+1,j+1))-(H(i-1,j-1)+2*H(i-1,j)+H(i-1,j+1));

GY2=(H(i-1,j+1)+2*H(i,j+1)+H(i+1,j+1))-(H(i-1,j-1)+2*H(i,j-1)+H(i+1,j-1));

G2(i,j)=abs(GX2)+abs(GY2); if G2(i,j)>0 B2(i,j)=1;

数字图像处

else B2(i,j)=0; end end end

--------------------------------------------------------------------- 图像腐蚀---------------------------------

for i=2:M-1 for j=2:N-1

if&& B2(i,j+1)==1

bottle(i,j)=B2(i,j); end end end

---------------------填充黑白颜色-------------------------

for r=1:M for t=1:N

if bottle(r,t)==1 Express(r,t)=255;

else Express(r,t)=0; end end end

--------------------------------------------------------------------- subplot(1,2,2);

imshow(Express);title('显示图像');

数字图像处

3.图像膨胀

H=imread('C:\Users\home\Pictures\zhengqiji.jpg'); H=rgb2gray(H); [M,N]=size(H); G2=H;B2=H; Express=H; bottle=zeros(M,N);

------------------------图像锐化-------------------------- for i=2:M-1 for j=2:N-1

1,j)+H(i-1,j+1));

1)+H(i+1,j-1));

G2(i,j)=abs(GX2)+abs(GY2); if G2(i,j)>0 B2(i,j)=1; else B2(i,j)=0;

数字图像处

end end end

------------------------------图像膨胀------------------------- for i=2:M-1 for j=2:N-1 if B2(i,j)==1 bottle(i,j-1)=1;

bottle(i-1,j)=1; bottle(i+1,j)=1; bottle(i,j+1)=1; end end end for r=1:M for t=1:N

if bottle(r,t)==1 Express(r,t)=255;

else Express(r,t)=0;%填充颜色 % end end end

------------------------------------------------------------- subplot(1,2,2);

imshow(Express);title('显示图像');

--------------------------填充颜色----------------------------

数字图像处

4.图像分割

H=imread('C:\Users\Administrator\Desktop\zhengqiji.jpg'); H=rgb2gray(H); T1=mean(H(:)); a=T1;

[m,n]=size(H); B=zeros(m,n); D=H;

t=0;T=0;bottle1=0;bottle2=0;n1=0;n2=0;

---------------迭代法确定阈值------------------------------ while T1~=T

T=T1;bottle1=0;bottle2=0;n1=0;n2=0; for i=1:m for j=1:n

B(i,j)=H(i,j); if B(i,j)>T

(1)

数字图像处

(2) else bottle2=bottle2+B(i,j); n2=n2+1; (3) T1=(bottle1/n1+bottle2/n2)/2; end end end end

-------------------------用阈值对图像进行处理---------------------- for i=1:m for j=1:n if H(i,j)>T D(i,j)=0; else

D(i,j)=H(i,j);

end end end

imshow(D)

数字图像处

5.图像匹配

D=imread('C:\Users\Administrator\Desktop\zhengqiji.jpg'); B=imread('C:\Users\Administrator\Desktop\zhengqiji1.jpg'); D=rgb2gray(D); B=rgb2gray(B) [M,N]=size(D); [m,n]=size(B); D1=D(1:m,1:n); inital1=10000000000;

-----用原图像和小图像中矩阵的灰度值相减,后的累加和判断相似程度,找到匹配点---- for i=1:M-m+1 for j=1:N-n+1

D1=D(i:i+m-1,j:j+n-1); inital2=sum(sum(abs(D1-B)));

if inital1>inital2 inital1=inital2; ANSWER1=i; ANSWER2=j; end end end

-------------------------在原图像中显示方框,表示出小图像位置--------- data = imread('C:\Users\Administrator\Desktop\zhengqiji.jpg'); pointAll = [ANSWER1,ANSWER2]; windSize = [m,n];

[state,results]=draw_rect(data,pointAll,windSize); return;

-----------------------------方框显示函数------------------------(不用

数字图像处

掌握)

function [state,result]=draw_rect(data,pointAll,windSize,showOrNot) % 函数调用:[state,result]=draw_rect(data,pointAll,windSize,showOrNot) % 函数功能:在图像画个长方形框

% 函数输入:data为原始的大图,可为灰度图,可为彩色图

% pointAll 框的左上角在大图中的坐标(每行代表一个坐标),

% 注意:在图中的坐标系为第一列为y,第二列为x(很奇怪的) % windSize 框的大小 windSize=[112,92] 分别表示长宽 % showOrNot 是否要显示,默认为显示出来 % 函数输出:state -- 表示程序结果状态 % result - 结果图像数据

% 函数历史: v0.0 @2013-01-27 created by Aborn

if nargin < 4 showOrNot = 1; end

rgb = [255 255 0]; % 边框颜色 lineSize = 3; % 边框大小,取1,2,3

windSize(1,1)=windSize(1,1); windSize(1,2) = windSize(1,2);

if windSize(1,1) > size(data,1) ||... windSize(1,2) > size(data,2)

state = -1; % 说明窗口太大,图像太小,没必要获取

disp('the window size is larger then image...'); return;

数字图像处

end

result = data; if size(data,3) == 3 for k=1:3

for i=1:size(pointAll,1) %画边框顺序为:上右下左的原则

result(pointAll(i,1),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2),pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2),k) = rgb(1,k);

if lineSize == 2 || lineSize == 3

result(pointAll(i,1)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)-1,k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)-1,k) = rgb(1,k);

if lineSize == 3

result(pointAll(i,1)-1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+windSize(i,1)+1,k) = rgb(1,k);

result(pointAll(i,1)+windSize(i,2)+1,pointAll(i,2):pointAll(i,2)+windSize(i,1),k) = rgb(1,k);

result(pointAll(i,1):pointAll(i,1)+windSize(i,2),pointAll(i,2)+1,k) = rgb(1,k);

end

数字图像处

end end end end

state = 1;

if showOrNot == 1 figure;

imshow(result); end

原图

数字图像处

截图

显示结果

本文来源:https://www.bwwdw.com/article/jl41.html

Top