本文共 1432 字,大约阅读时间需要 4 分钟。
参考:
其中:
colormap(flipud(colormap('jet'))); 值越小颜色越深,jet呈深红色
保存图像和画出矩阵的代码用到了mexopencv库:
%% %绝对误差和算法(SAD) clear all; close all; %% src=imread('lena512.bmp'); [a b d]=size(src); if d==3 src=rgb2gray(src); end mask=imread('lena_mask.png'); [m n d]=size(mask); mask=mask(1:68,1:68);[m n d]=size(mask); if d==3 mask=rgb2gray(mask); end %% N=n;%模板尺寸,默认模板为正方形 M=a;%代搜索图像尺寸,默认搜索图像为正方形 %% dst=zeros(M-N,M-N); for i=1:M-N %子图选取,每次滑动一个像素 for j=1:M-N temp=src(i:i+N-1,j:j+N-1);%当前子图 dst(i,j)=dst(i,j)+(sum(sum(abs(temp-mask))))/(N*N); %dst(i,j)=dst(i,j)+sum(sum(abs(temp-mask))); %dst(i,j)=dst(i,j)+sum(sum((temp-mask).^2)); %dst(i,j)=dst(i,j)+(sum(sum((temp-mask).^2)))/(N*N); end end[mmm,nnn] = size(dst);[Xedgemesh,Yedgemesh]=meshgrid(1:1:nnn,1:1:mmm);figure(1);% shading interp对曲面或图形对象的颜色着色进行色彩的插值处理,使色彩平滑过渡pcolor(Xedgemesh,Yedgemesh,dst);colormap(flipud(colormap('jet')));shading interpabs_min=min(min(dst)); [x,y]=find(dst==abs_min); figure; imshow(mask);title('模板'); figure; imshow(src); cv.imwrite('lena_gray.png',src);hold on; rectangle('position',[x,y,N-1,N-1],'edgecolor','r'); hold off;title('搜索图');[m, n, ~] = size(src);newsave_I2 = zeros(m,n,3); newsave_I2(:,:,1) = src;newsave_I2(:,:,2) = src;newsave_I2(:,:,3) = src;result=cv.rectangle(newsave_I2,[x,y,N-1,N-1],'Color', [0, 255, 0], 'Thickness', 2);cv.imwrite('lena_result.png',result);
转载地址:http://czwlf.baihongyu.com/