视觉系统在人类探求、认知客观外在世界及主观内在心理的过程中扮演重要角色。视觉系统是人类获取外界信息的主要途径,统计科学研究表明超过70%的外界信息通过人眼所获得。同时视觉神经系统能快速、有效地解读及分析所采集的信息,从而使人类认知外界事物。因此研究和分析人类视觉系统的组成及其所具有的视觉特性具有重要的理论及实际意义。随着科技的飞速发展,近年来人眼视觉特性的相关研究也在图像处理领域引起了高度的重视。本文主要对人眼视觉特性的亮度掩盖特性进行相关研究,其理论介绍可以参考网上资源,下文主要对其进行编码实现。
亮度探测阈值(即最小可觉差)是指人眼恰可察觉的目标亮度与背景亮度之间的最小亮度差异。心理物理学中,将最小可觉差随背景亮度变化而变化的现象称为人眼的亮度掩蔽特性。Buchsbaum曲线反映了亮度探测阈值ΔBT与背景亮度B之间的关系,并将人眼视觉划分为如图1所示的4个区域:暗区域,德弗里斯区域,韦伯区域,饱和区域。详细内容请参考文献[2]。
对于大范围的背景亮度变化,人眼视觉系统主要作用在韦伯区域。
本人对文献[1,2]中的亮度掩蔽特性内容进行相关研究,并对其进行编码实验,下列代码为亮度掩蔽特性在图像处理领域中的一个应用示例(MATLAB代码):
main函数:
clear;
addpath(genpath(pwd));
%% input the picture
[FileName, FilePath]=uigetfile('*.jpg;*.png;*.tif;*.img;*.bmp;*.gif;','请选择图像数据');
str=[FilePath FileName];
img_rgb=imread(str);
%%
[m n z]=size(img_rgb);
if(z>1)
img_gray=rgb2gray(img_rgb);
end
%% Background brightness
[W,H]=size(img_gray);
X_img=zeros(W+2,H+2);
X_img(2:W+1,2:H+1)=img_gray;
for i=2:W+1
for j=2:H+1
B_right_direction=1/4*(X_img(i-1,j)+X_img(i+1,j)+X_img(i,j-1)+X_img(i,j+1));%directly left, right, up and down of the pixel
B_diagonal_line=1/(4*sqrt(2))*(X_img(i-1,j-1)+X_img(i+1,j-1)+X_img(i-1,j+1)+X_img(i+1,j+1));%the pixels diagonally one pixel away
B(i,j)=1/2*(1/2*(B_right_direction+B_diagonal_line)+X_img(i,j)); % B is the value of brightness
end
end
B_brightness= B(2:W+1,2:H+1);
figure
imshow(uint8(B_brightness));
title('背景亮度图');
%% calculate the max pixel value and the min pixel value in a image
min_value=min(min(img_gray));
max_value=max(max(img_gray));
B_t=max_value-min_value;
%% canny edge detect
BW1 = edge(X_img,'canny'); % 调用canny函数
[out_row_gray,out_colum_gray,out_final_gray]=Gradient_calculation(img_gray);
Gradient_value=out_final_gray;
figure
imshow(uint8(Gradient_value));
title('梯度图');
%% set parameters
a1=0;
a2=0.3;
a3=0.7;
beta=0.02;
B_x1=a1*B_t;
B_x2=a2*B_t;
B_x3=a3*B_t;
%%
K1=beta/100*max(max(Gradient_value./B_brightness));
K2=K1*sqrt(double(B_x2));
K3=K1/B_x3;
%%
% temp_brightness1=B_brightness;
% temp_brightness1(find(temp_brightness1>=B_x1))=0;
% figure
% imshow(img_rgb);
% hold on;
% out=shadow(temp_brightness1,1);
% title('非暗区域');
%%
temp_brightness2=B_brightness;
temp_brightness2(find(temp_brightness2>=B_x1&temp_brightness2<=B_x2))=0;
figure
imshow(img_rgb);
hold on;
out=shadow(temp_brightness2,1);
title('德弗里斯区');
set(gcf,'color','w');
%%
temp_brightness3=B_brightness;
temp_brightness3(find(temp_brightness3>=B_x3))=0;
figure
imshow(img_rgb);
hold on;
out=shadow(temp_brightness3,1);
title('饱和区');
set(gcf,'color','w');
%%
temp_brightness4=B_brightness;
temp_brightness4(find(temp_brightness4>=B_x2&temp_brightness4<=B_x3))=0;
figure
imshow(img_rgb);
hold on;
out=shadow(temp_brightness4,1);
title('韦伯区');
set(gcf,'color','w');
Gradient_calculation function
function [out_row,out_colum,out_final]=Gradient_calculation(input)
[w,h]=size(input);
gradient_row=zeros(w,h);
gradient_column=zeros(w,h);
gradient_final=zeros(w,h);
for i=1:w-1
for j=1:h-1
gradient_row(i,j)=input(i,j+1)-input(i,j);
gradient_column(i,j)=input(i+1,j)-input(i,j);
if(abs(gradient_row(i,j))>= abs(gradient_column(i,j)))
gradient_final(i,j)=abs(gradient_row(i,j));
else
gradient_final(i,j)=abs(gradient_column(i,j));
end
end
end
out_row=gradient_row;
out_colum=gradient_column;
out_final=gradient_final;
shadow function (该函数只是为了标记出相应的区域,运行起来比较费时,各位同行如有新的解决方法,欢迎分享)
function out=shadow(input,value)
hold on;
a=input<value;
% structure image
%%
[m n]=find(a);
for ii=1:length(m)
x=n(ii)+[0 0 1 1];
y=m(ii)+[0 1 1 0];
patch(x,y,'b','edgecolor','none','facealpha',0.4);
end
hold off;
out=1;
实验结果图如下所示:
参考文献
[1] Mandal D, Panetta K, Agaian S. Human visual system inspired object detection and recognition[C]// IEEE International Conference on Technologies for Practical Robot Applications. IEEE, 2012:145-150.
[2] 张菲菲,谢伟, 石强,等. 人眼视觉感知驱动的梯度域低照度图像对比度增强[J]. 计算机辅助设计与图形学学报, 2014(11):001981-1988.
上述内容仅个人的点滴粗见,如有不当之处,请同行批评指正。