使用邻域对比增强图像

时间:2013-12-02 06:18:39

标签: matlab image-processing sliding-window contrast image-enhancement

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

让图像被视为u0。然后我想通过使用公式

来增强图像

enter image description here

这里,M1是最小值,M2是邻域像素中u0的最大值,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

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

enter image description here enter image description here enter image description here enter image description here

任何人都可以检查并告诉我我的代码是否正确吗?我不太确定自己。还请告诉我是否有更好的方法。 先谢谢你们。

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

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

我正在给出图像,初始轮廓和乐队图像。

enter image description here enter image description here enter image description here enter image description here

以白色标记的像素是我必须应用滑动功能的指定像素。是否可以根据此类标准应用nfilter?请帮忙。如果我的问题不正确,我会进一步澄清。

1 个答案:

答案 0 :(得分:0)

我会用以下两种方式中的任何一种来解决它:

  1. 在整个图片上应用滤镜(使用colfilt代替nlfilter) 然后将结果乘以掩码。
  2. 提取所需的像素及其邻域,以colfilt等列形式生成并处理并应用过滤器。
  3. 无论哪种方式都可行 我认为对于小照片来说,第一个会更快。