用matlab写出计算图片的边缘强度 ,图像清晰度,互信息(mi),相对标准差的代码
时间: 2024-05-03 11:19:31 浏览: 88
image-quality-evaluation.rar_交叉熵代码_信息熵_图像空间频率_标准差_边缘强度
5星 · 资源好评率100%
以下是用MATLAB计算图像边缘强度、清晰度、互信息和相对标准差的示例代码:
计算图像边缘强度:
```matlab
% 读取图像
img = imread('image.jpg');
% 转为灰度图像
gray_img = rgb2gray(img);
% 计算Sobel算子
sobel_x = [-1 0 1; -2 0 2; -1 0 1];
sobel_y = [-1 -2 -1; 0 0 0; 1 2 1];
% 计算x方向和y方向的梯度
grad_x = conv2(double(gray_img), sobel_x, 'same');
grad_y = conv2(double(gray_img), sobel_y, 'same');
% 计算梯度幅值
grad_mag = sqrt(grad_x.^2 + grad_y.^2);
% 显示梯度幅值图像
imshow(uint8(grad_mag));
```
计算图像清晰度:
```matlab
% 读取图像
img = imread('image.jpg');
% 转为灰度图像
gray_img = rgb2gray(img);
% 计算Laplacian算子
laplacian = [0 -1 0; -1 4 -1; 0 -1 0];
% 计算Laplacian响应
lap_resp = conv2(double(gray_img), laplacian, 'same');
% 计算图像清晰度
sharpness = sum(sum(abs(lap_resp)));
% 显示Laplacian响应图像
imshow(uint8(abs(lap_resp)));
% 显示图像清晰度
disp(['Sharpness: ', num2str(sharpness)]);
```
计算图像互信息:
```matlab
% 读取两张图像
img1 = imread('image1.jpg');
img2 = imread('image2.jpg');
% 转为灰度图像
gray_img1 = rgb2gray(img1);
gray_img2 = rgb2gray(img2);
% 计算直方图
hist_2d = histcounts2(double(gray_img1), double(gray_img2), 256);
% 计算概率分布
p = hist_2d / sum(sum(hist_2d));
% 计算互信息
mi = 0;
for i = 1:size(p, 1)
for j = 1:size(p, 2)
if p(i,j) > 0
mi = mi + p(i,j) * log2(p(i,j) / (sum(p(i,:)) * sum(p(:,j))));
end
end
end
% 显示图像互信息
disp(['MI: ', num2str(mi)]);
```
计算图像相对标准差:
```matlab
% 读取图像
img = imread('image.jpg');
% 转为灰度图像
gray_img = rgb2gray(img);
% 计算图像均值和标准差
mean_val = mean(mean(double(gray_img)));
std_val = std2(double(gray_img));
% 计算相对标准差
rstd = std_val / mean_val;
% 显示图像相对标准差
disp(['RSTD: ', num2str(rstd)]);
```
阅读全文