使用邻域对图像进行对比度增强

Posted

技术标签:

【中文标题】使用邻域对图像进行对比度增强【英文标题】:contrast enhancement of an image using neighbourhoood 【发布时间】:2013-12-17 18:57:08 【问题描述】:

您好,我想使用邻域像素值增强图像的对比度。

让图像被认为是u0。然后我想通过使用公式来增强图像

这里,M1是邻域像素中u0的最小值,M2是最大值,Mg是原始图像的最大灰度值。我的手术所在的社区是 9X9。 uN 是新生成的图像(对比度增强图像)。

我已经尝试了以下代码,但不确定我是否正确。

%Generate a contrast enhanced image
tic
clear all; close all;
I = imread('4.jpg');
I = imresize(I,[128 128]);
if size(I,3)== 3
            P = rgb2gray(uint8(I));
            P = double(P);
elseif size(I,3) == 2
            P = 0.5.*(double(I(:,:,1))+double(I(:,:,2)));
else
            P = double(I);
end
ssize=9;
mg=max(P(:));

f1 = @(x) min(x(:));
m1 = nlfilter(P,[9 9],f1);
f2 = @(x) max(x(:));
m2 = nlfilter(P,[9 9],f2);

P_op=((P-m1)./(m2-m1)).*mg;
subplot(2,1,1),imagesc(P,[0 255]);colormap(gray);axis off;
subplot(2,1,2),imagesc(P_op,[0 255]);colormap(gray);axis off;
toc

我得到的一些结果如下所示:

谁能检查并告诉我我的代码是否正确?我自己也不太确定。另外请告诉我是否有更好的方法来做到这一点。 在此先感谢各位。

已编辑问题我重新阅读了该作品,我**必须将滑动窗口功能应用于几个指定的像素。 **

我必须应用的像素是在这个方法中找到的。检测到图像的初始轮廓(在图像上以红色显示)。然后在指定距离处绘制轮廓周围的带。 滑动窗口函数只能应用于原始图像窄带内的像素

我提供图像、初始轮廓和带状图像。

标记为白色的像素是我指定的必须应用滑动函数的像素。可以将 nfilter 应用于此类标准吗?请帮忙。如果我的问题不正确,我会进一步澄清。

【问题讨论】:

您的代码和结果乍一看似乎还不错,但这里有实际问题吗?如果没有,请关闭帖子。 我正在编辑问题。我的问题不完整。请查看我编辑的问题。 您可以考虑使用imdilateimerode 的灰度版本来计算每个像素的局部最大值/最小值。它可能比nlfilt 稍快。 @Shai 谢谢你的建议。我去做。你能重新看看我编辑过的问题吗? @RoneyMichael 你能重新看看我编辑过的问题吗? 【参考方案1】:

我会通过以下两种方式之一来解决它:

    在整个图像上应用滤镜(使用colfilt 而不是nlfilter)。 然后将结果乘以掩码。 提取所需像素及其邻域,将它们形成为列形式,如 colfilt 处理并应用过滤器。

任何一种方式都行。 我认为对于小照片,第一个会更快。

【讨论】:

以上是关于使用邻域对图像进行对比度增强的主要内容,如果未能解决你的问题,请参考以下文章

图像处理系列——直方图统计算法

fpga图像处理(对比度增强)

OpenCV图像增强(python)

机器视觉实验一 图像增强的Matlab实现

数字图像处理,经典对比度增强算法

python使用openCV图像加载(转化为灰度图像)使用equalizeHist算法增强灰度图像对比度可视化对比度增强之后的图像