本站所有资源均为高质量资源,各种姿势下载。
% 基于Itti显著图的图像显著区域提取
% 清除工作空间和命令窗口
clear;
clc;
% 读取图像
image = imread('image.jpg');
% 转换为灰度图像
gray_image = rgb2gray(image);
% 参数设置
n_scales = 5; % 金字塔层数
sigma = 2; % 高斯滤波器的标准差
k = 0.1; % 调整显著图的对比度参数
% 计算高斯金字塔
pyramid = cell(n_scales, 1);
pyramid{1} = gray_image;
for i = 2:n_scales
pyramid{i} = imresize(pyramid{i-1}, 0.5);
end
% 计算显著图
saliency_map = zeros(size(gray_image));
for i = 1:n_scales
% 计算边界图
boundary_map = imfilter(pyramid{i}, fspecial('log', 2*ceil(3*sigma)+1, sigma), 'same', 'replicate');
% 计算亮度图
intensity_map = imfilter(pyramid{i}, fspecial('gaussian', 2*ceil(3*sigma)+1, sigma), 'same', 'replicate');
% 计算颜色图
color_map = imfilter(pyramid{i}, fspecial('gaussian', 2*ceil(3*sigma)+1, 2*sigma), 'same', 'replicate');
% 计算显著图
saliency_map = saliency_map + (abs(boundary_map) + abs(intensity_map) + abs(color_map));
end
% 归一化显著图
saliency_map = (saliency_map - min(saliency_map(:))) ./ (max(saliency_map(:)) - min(saliency_map(:)));
% 调整显著图的对比度
saliency_map = saliency_map.^k;
% 显示原始图像和显著图
figure;
subplot(1,2,1), imshow(image), title('Original Image');
subplot(1,2,2), imshow(saliency_map), title('Saliency Map');
% 扩展:提取显著区域
threshold = graythresh(saliency_map); % 使用Otsu方法选择阈值
binary_map = imbinarize(saliency_map, threshold); % 二值化显著图
saliency_region = image;
saliency_region(repmat(~binary_map, [1, 1, 3])) = 0; % 将非显著区域置为黑色
% 显示原始图像、显著图和显著区域
figure;
subplot(1,3,1), imshow(image), title('Original Image');
subplot(1,3,2), imshow(saliency_map), title('Saliency Map');
subplot(1,3,3), imshow(saliency_region), title('Saliency Region');