1.图像二值化代码:
A=imread('hw1.chips1.GIF'); %读取到一张图片
%thresh = graythresh(A); %自动确定二值化阈值
I2 = im2bw(A,120/255); %对图像二值化
figure();
subplot(1,2,1);
imshow(A); %显示二值化之前的图片
title('原图');
subplot(1,2,2);
imshow(I2); %显示二值化之后的图片
title('二值化');
2.求目标和背景均值和方差
oriImg = imread('hw1.chips1.GIF');
grayImg = oriImg;
%grayImg = rgb2gray(oriImg); %转换为灰度图
grayImg = double(grayImg);
[m, n] = size(oriImg);
foreCount = 0;
foreTotal = 0;
backCount = 0;
backTotal = 0;
for x = 1:m
for y = 1:n
if(grayImg(x,y) >= 128)
foreCount = foreCount + 1;
foreTotal = foreTotal + grayImg(x,y);
else
backCount = backCount + 1;
backTotal = backTotal + grayImg(x,y);
end
end
end
backMean = backTotal / backCount;
foreMean = foreTotal / foreCount;
backSqu = 0;
foreSqu = 0;
for x =1:m
for y = 1:n
if(grayImg(x,y) >= 128)
foreSqu = foreSqu + (grayImg(x,y) - foreMean)^2;
else
backSqu = backSqu + (grayImg(x,y) - backMean)^2;
end
end
end
backSqu = sqrt(backSqu / backTotal);
foreSqu = sqrt(foreSqu / foreTotal);
disp(strcat('背景均值', num2str(backMean)));
disp(strcat('背景标准差', num2str(backSqu)));
disp(strcat('前景均值', num2str(foreMean)));
disp(strcat('前景标准差', num2str(foreSqu)));
3.求目标和背景高斯分布(双峰直方图)
x = 0:0.1:256;
y1 = gaussmf(x,[backSqu^2 backMean]);
plot(x, y1);
hold on;
y2 = gaussmf(x,[foreSqu^2 foreMean]);
plot(x, y2);
title('高斯分布');