声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1856|回复: 0

[图像处理] matlab中图像局部增强

[复制链接]
发表于 2016-5-16 11:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
在冈萨雷斯的《数字图像处理》中看到过一种局部图像增强的方法,可以利用图像的局部信息对图像进行增强,之前一直想尝试一把,没能实现,现在有空搞了一下,代码如下
% 局部增强法
% Igray:灰度图像
% k0,k1:可调参数
% Ibw:提取得到数字区域
function Ibw = LocalEnhance(Igray, k0, k1)
masksize = 3; % 邻域范围,奇数
exsize = floor(masksize/2); % 原图片需要填充的区域
Iex = padarray(Igray, [exsize exsize], 'replicate', 'both'); % 图片填充
Is = zeros(size(Igray)); % 局部标准差
for i = 1:size(Igray, 1)
for j = 1:size(Igray, 2)
subdomain = Iex(i:i+2*exsize, j:j+2*exsize);
localmean = sum(subdomain(:))/masksize^2;
Is(i, j) = sqrt(sum((subdomain(:)-localmean).^2))/masksize;
end
end
% 确定不同区域的放大系数
meanIm = mean(Igray(:));
minIm = min(Igray(:));
meanIs = mean(Is(:));
maxIs = max(Is(:));
Im1 = Igray<(minIm+k0*(meanIm-minIm)); % 均值阈值提取
Is1 = Is>(meanIs + k1*(maxIs-meanIs)); % 标准差阈值提取
s = strel('disk',8); % 8需要根据实际图片大小来调
Is1 = imclose(Is1, s); % 标准差阈值提取闭运算
Ibw = Im1 & Is1; % 局部增强
end
    对一张图片做测试的效果如下
1.jpg
    单纯使用大津法动态阈值二值化
2.png
    局部增强法得到数字区域
3.png
    为什么能得到这样的效果呢,从局部标准差就能看出来
4.jpg
背景部分灰度过渡缓慢,标准差小,而数字部分,尤其边界,灰度变化大,标准差大,从而能很好的剔除背景部分。
    上面的循环部分还是比较耗时间的,可以用c实现,matlab编译后使用,应该会极大提高速度,毕竟matlab在循环上还是远不如c的。

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-4-26 08:09 , Processed in 0.087540 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表