matlab数字图像处理-消除条纹干扰

一、 背景

下图含有干扰条纹、并且低灰度区域的细节难以分辨。对图像进行灰度变换,再分别应用空域和频域的处理方法消除条纹干扰,并比较这两类方法去除条纹干扰的效果。
在这里插入图片描述

二、算法原理

因为低灰度区的细节难以分辨,所以先将图像整体均衡化,见图1-2,使整体的细节变亮,更清楚观察到条纹的细节。

1.频域方法处理

对均衡化后的图像进行傅里叶变换,将低频移至图像的中心点,显示其log变换后的频谱图,见图1-3,发现其频谱图中心取有条纹产生的噪声(频谱图中心区竖直方向),想要去掉条纹,就要设计滤波器过滤掉某一低频部分,通过查资料,这里用到了陷波滤波器。陷波滤波器指的是一种可以在某一个频率点迅速衰减输入信号,以达到阻碍此频率信号通过的滤波效果。陷波滤波器属于带阻滤波器的一种,只是他的阻带非常狭窄。设计预估陷波滤波器的圆心为图像的(w/4,h/2)和(3w/4,h/2)为圆心,以1/5倍的行列的最小值为半径,见图2,通过对频域的相乘,对应于时域的卷积,完成对于某一低频域的陷波,从而完成对一低频部分的滤波,去除条纹。

2.空域方法处理

空域办法处理的这里采用的是中值滤波,中值滤波用一个含有奇数个像素的窗口在图像中滑动,将窗口中心点的灰度值用窗口内各点的灰度值的中值代替。滤波的效果和窗口的大小有关系,正确选择窗口的大小使用好中值滤波的关键。这里取得w=6,对于图像有着横向的干扰条纹,所以只对竖直方向取中值,使条纹消除,见图3。

三、算法步骤

(1)扩充边界
(2)取中值
(3)显示处理图像

四、matlab程序代码

clc;
clear;
close all;
f=imread('hw2_rg.jpg');
f=rgb2gray(f);
figure;
subplot(2,2,1);imshow(f);title('原图');
%% 均衡化
h=zeros(256,1);
for k=0:255
    h(k+1)=sum(sum(f==k));
end
p=h/sum(h);
s=zeros(256,1);
s(1)=p(1);
for k=2:255
    s(k)=s(k-1)+p(k);
end
f=double(f);
[r,c]=size(f);
t=zeros(256,1);
t=double(t);
for m=1:r
    for n=1:c
        t(m,n)=s(f(m,n)+1);
    end
end
subplot(2,2,2);imshow(t);title('均衡化后的图像');
%% 频谱图
g=uint8(t*255);
s=fft2(g);
s_shift=fftshift(s);
subplot(2,2,3);
imshow(log(1+s_shift),[]);title('均衡化后频谱图');
%% 陷波滤波
H= zeros(size(g));
[w,h]=size(g);
%滤波器圆心
rx1 = w / 4;
ry1 = h / 2;
rx2 = w * 3 / 4;
ry2 = h / 2;
r = min(w,h)/5;%半径
for i = 1:w
    for j = 1:h
        if(i-rx1)^2+(j-ry1)^2 >= r*r && (i-rx2)^2+(j-ry2)^2 >= r*r
            H(i,j) = 1;
        end
    end
end
G=H.*s_shift;
g=ifft2(ifftshift(G),'symmetric');
g=uint8(real(g));
subplot(2,2,4);imshow(g);title('滤波变换图');
figure;imshow(H);
 
%% 中值滤波
t=t*255;
w=6;
fn=padarray(t,[w w],'symmetric');
[r,c]=size(fn);
g=zeros(r,c);
nc=ceil((2*w+1)/2);
for m=1+w:r-w
    for n=1+w:c-w
        roi=fn(m-w:m+w,n);
        p=sort(roi(:));
        g(m,n)=p(nc);
    end
end
g=g(1+w:r-w,1+w:c-w);
figure;
subplot(1,2,1);imshow(t,[]);
subplot(1,2,2);
imshow(g,[]);
title('中值滤波');

五、处理结果

图1:
在这里插入图片描述
图2:
在这里插入图片描述
图3:
在这里插入图片描述

六、总结

对于均值滤波,他是将图像平滑来减弱噪声,无法真正去除,所以图像会变得模糊,但是其算法简单,运算速度较中值滤波快。而对于中值滤波,采用非线性的办法,它在平滑脉冲噪声方面非常有效,同时它可以保护图像尖锐的边缘。对于成三角变化的边缘,中值滤波有轻微的模糊,对于一般的孤立噪声有很好的抑制效果,加权中值滤波可以改进中值滤波的边缘信号保持。

  • 26
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Matlab 中给图片加入可视水印信息可以采用以下步骤: 1. 读入原始图片,并将其转换为灰度图像。 2. 设计水印信息,如文字、图形等,使用 Matlab 生成对应的图像。 3. 对水印图像进行灰度化处理,使其与原始图片保持一致。 4. 将水印图像进行缩放和旋转等变换操作,以适应不同大小和角度的原始图片。 5. 将水印图像与原始图片进行叠加,可以采用加权平均或 alpha 混合等方法。 6. 保存加入水印信息后的图片。 下面是一个示例代码,演示了如何在 Matlab 中添加水印信息: ```matlab % 读入原始图片 img = imread('lena.jpg'); % 转换为灰度图像 grayImg = rgb2gray(img); % 设计水印信息 watermarkText = 'This is a watermark'; watermarkImg = insertText(zeros(size(grayImg)), [size(grayImg, 2)/2, size(grayImg, 1)/2], watermarkText, 'FontSize', 24); % 灰度化处理 watermarkImg = rgb2gray(watermarkImg); % 变换操作 watermarkImg = imrotate(watermarkImg, 30); watermarkImg = imresize(watermarkImg, [size(grayImg, 1) size(grayImg, 2)]); % 叠加操作 alpha = 0.5; % 设置透明度 watermarkedImg = imadd(im2double(grayImg), alpha*im2double(watermarkImg)); % 显示结果 figure; subplot(1,2,1); imshow(grayImg); title('Original Image'); subplot(1,2,2); imshow(watermarkedImg); title('Watermarked Image'); % 保存结果 imwrite(watermarkedImg, 'lena_watermarked.jpg'); ``` 在本示例中,我们将文字水印添加到了原始图片的中心,并对水印进行了旋转和缩放操作,最终将水印与原始图片进行了 alpha 混合操作。您可以根据具体需求修改上述代码,并添加更复杂的水印信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方上&肖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值