matlab数字图像处理-找不同
生活随笔
收集整理的這篇文章主要介紹了
matlab数字图像处理-找不同
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、問題描述
下面兩幅圖像中主要有三處不同,編程把它們找出來。
二、算法原理
讀取兩張圖像,見圖一,圖二。
因為兩圖存在位置上偏移,直接作差導致極大誤差,找不到兩幅圖的不同之處。所以先進行配準,找到兩幅圖的位置偏移。
任意取一圖中一部分作為模板,見圖三,這里取的是100×100的模板。在二圖中取同樣大小的區域。每次移動一個像素,與模板作差,求得這一區域的差和,找到差和的最小值,即為二圖的相同位置,見圖四,得到像素的位置(左上角)與一圖像素位置(左上角)作差,即為位置的偏移量。
得到偏移量之后,對圖二(有色圖)進行移動,得到與圖二相同位置的圖,見圖五。
圖一與圖五作差,變為灰度,找出兩者的不同,見圖六,找到相應像素的位置并在原圖中使不同之處變成較為明顯的顏色,這里用的是紅色,見圖七。
三、算法步驟
(1)讀取圖像并轉灰度圖像
(2)配準
(3)移動
(4)作差
四.程序代碼(matlab)
%% %絕對誤差和算法(SAD) clc; clear; close all; f11=imread('hw1_painting_1.jpg'); f1=rgb2gray(f11); f22=imread('hw1_painting_2.jpg'); f2=rgb2gray(f22); figure(1); imshow(f11); %% 配準 % 取原圖中一部分為模板 mask=f1(301:400,201:300); figure(4); imshow(mask); [a,b]=size(f2); [m,n]=size(mask); N=n; M=a; dst=zeros(M-N,b-N); for i=1:M-N %子圖選取,每次滑動一個像素 for j=1:b-N temp=f2(i:i+N-1,j:j+N-1); %當前子圖 dst(i,j)=dst(i,j)+sum(sum(abs(temp-mask))); end end abs_min=min(min(dst)); [u,v]=find(dst==abs_min); figure(5); imshow(f2); hold on; rectangle('position',[v,u,100,100],'edgecolor','r'); hold off;title('搜索圖'); %% 移動 x=301-u; %x=2 偏移量 y=201-v; %y=-2 y=-y; g=zeros(a,b,3); g((x+1):a,1:b-y,:)=f22(1:a-x,(y+1):b,:); %向左移x,向下移|y| g(1:x,b-(y-1):b,:)=f22(a-(x-1):a,1:y,:); g=uint8(g); figure(2); imshow(g); %% 作差比較 i=rgb2gray(f11-g); figure;imshow(i); [r,c]=size(i); for m=1:rfor n=1:cif i(m,n)>1f11(m,n,1)=255;f11(m,n,2)=0;f11(m,n,3)=0;endend end figure; imshow(uint8(f11));五、處理結果
圖一:
圖二:
圖三:
圖四:
圖五:
圖六:
圖七:
總結
以上是生活随笔為你收集整理的matlab数字图像处理-找不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特洛伊木马程序_历史著名的特洛伊木马计,
- 下一篇: java移位运算_Java移位运算符 “