显著性区域检测matlab_code_20170412
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.Main_program
%====test1
clear
close all
clc
%img_in,输入的待处理的图像
%n,图像分块的patch的大小
%img_rgb:缩放后的rgb图
%img_lab:rgb2lab后的图
%h,w,图像高宽
%mex_store,存储矩阵
img=imread('test1.jpg');
% img=imread('E:\例程\matlab\显著性分割\假设已知均值\test picture\0010.tif');
max_side=120;
yu_value=0.8;
img_lab = pre_rgb2lab(img,max_side);
[ img_scale_1,img_scale_2,img_scale_3,img_scale_4 ] = get4Scale( img_lab );
[ DistanceValue_scale_1_t1,DistanceValue_scale_1_exp,DistanceValue_scale_1_t1_rang,DistanceValue_scale_1_exp_rang] = distanceValueMap_search_onescale_2( img_scale_1,max_side );
[ DistanceValue_scale_2_t1,DistanceValue_scale_2_exp,DistanceValue_scale_2_t1_rang,DistanceValue_scale_2_exp_rang] = distanceValueMap_search_onescale_2( img_scale_2,max_side );
[ DistanceValue_scale_3_t1,DistanceValue_scale_3_exp,DistanceValue_scale_3_t1_rang,DistanceValue_scale_3_exp_rang] = distanceValueMap_search_onescale_2( img_scale_3,max_side );
[ DistanceValue_scale_4_t1,DistanceValue_scale_4_exp,DistanceValue_scale_4_t1_rang,DistanceValue_scale_4_exp_rang] = distanceValueMap_search_onescale_2( img_scale_4,max_side );
value_C_1=Center_weight( DistanceValue_scale_1_exp_rang,yu_value );
value_C_2=Center_weight( DistanceValue_scale_2_exp_rang,yu_value );
value_C_3=Center_weight( DistanceValue_scale_3_exp_rang,yu_value );
value_C_4=Center_weight( DistanceValue_scale_4_exp_rang,yu_value );
[h,w]=size(value_C_1);
value_C_1_resize=value_C_1;
value_C_2_resize=imresize(value_C_2,[h,w]);
value_C_3_resize=imresize(value_C_3,[h,w]);
value_C_4_resize=imresize(value_C_4,[h,w]);
value_C_sum=(value_C_1_resize+value_C_2_resize+value_C_3_resize+value_C_4_resize)/4;
figure,
imshow(value_C_sum);
figure,
imshow(value_C_1_resize);
figure,
imshow(value_C_2_resize);
figure,
imshow(value_C_3_resize);
figure,
imshow(value_C_4_resize); 8888888888888888888888888888888888888888888888888888888888888888888888888888
2.Center_weight
function [ img_out ] = Center_weight( img_in,yu_value )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
img_in=mat2gray(img_in);
[h,w]=size(img_in);
[row,col]=find(img_in>yu_value);%找到所有大于阈值的点,记录坐标
l=length(row);
a(1,:)=row;
a(2,:)=col;
for i0=1:h
for j0=1:w
for i=1:l
c_store(i)=norm(a(:,i)-[i0;j0]);
end
min_c(i0,j0)=min(c_store);
end
end
min_c_rang=mat2gray(min_c);
img_out=img_in.*(1-min_c_rang);
end 888888888888888888888888888888888888888888888888888888888888888888888888888888888888
3.distanceValueMap_search_onescale
function [ DistanceValue_t1,DistanceValue_exp,DistanceValue_t1_rang,DistanceValue_exp_rang] = distanceValueMap_search_onescale( img_in,max_side )
%UNTITLED7 Summary of this function goes here
% Detailed explanation goes here
[h,w]=size(img_in(:,:,1));
img_scale1=img_in;
%================================================================================ %在计算块之前,考虑边缘点,所以先对矩阵进行填充
q=3;%填充边缘像素个数
img_scale1_pad(:,:,1)=padarray(img_scale1(:,:,1),[q,q],'replicate','both');
img_scale1_pad(:,:,2)=padarray(img_scale1(:,:,2),[q,q],'replicate','both');
img_scale1_pad(:,:,3)=padarray(img_scale1(:,:,3),[q,q],'replicate','both');
%----------------------------------------------------------------------------------
%计算该尺度下存储patch相量的矩阵,各三个像素取一个patch
for i=1:h
for j=1:w
img_scale1_patchVstore_all(i,j,:)=reshape(img_scale1_pad(i:i+6,j:j+6,:),1,147);
end
end
img_scale1_patchVstore_x=img_scale1_patchVstore_all(1:q:h,1:q:w,:);%将代表patch的相量存为一个矩阵
disp('img_scale1_patchVstore_x complete');
%-----------------------------------------------------------------------------------------
%开始计算每一点的距离的值
[h_x,w_x]=size(img_scale1_patchVstore_x(:,:,1));%记录存储矩阵的大小
for i0=1:h
disp(num2str(i0));
for j0=1:w
temp1=img_scale1_patchVstore_all(i0,j0,:);
store_tp1_all=reshape(img_scale1_patchVstore_all(i0,j0,:),1,147);
for i=1:h_x
for j=1:w_x