步骤:1、确定模板大小 n*n
2、将图像进行扩展,因为对边界处的处理会使得图像无法与模板达到一一对应。
3、从图像的第一个像素开始,与模版点乘,点乘后的局部区域进行直方图均值化,并将局部的中心元素的作为图像的当前值
代码如下:
clear;
close all;
img=imread('C:\Users\Administrator\Desktop\复件 BN1121.bmp');
figure,imshow(img);
title('原始图像');
%构建模板
n=15;
model(1:n,1:n)=1;%a为n*n大小的模板,像素值为1
%对原图进行扩展,因为模板中心从图像的第一个像素开始,模板必然有点在图像外,无对应点,所以进行扩展,是的图像一一对应
imgTend=wextend('2D','sym',img,n);
tendTrans=double(imgTend);%变成double型便于后期的点乘计算
[row,col]=size(imgTend);%获取扩展后的图像的大小
tendTransTmp=tendTrans;
%model(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素
for i=n+1:row-n
for j=n+1:col-n %因为进行了扩展,所以原图像的第一个像素在扩展后的图像中对应的是(n+1,n+1)这个点
modelResult=tendTrans(i:i+(n-1),j:j+(n-1)).*model(1:n,1:n);%在图像中取n*n大小,与模板对应点乘,生成点乘后的n*n大小的矩阵m
modelEpual=histeq(uint8