13.1 非线性变化的图像增强和补偿——滤波器对图像作增强提高视觉质量(matlab程序)

news/2024/7/21 7:34:16 标签: matlab, 开发语言, 图像处理, 计算机视觉, 学习

1.简述

      

图像的线性变换和非线性变换,逐像素运算就是对图像的没一个像素点的亮度值,通过一定的函数关系,转换到新的亮度值。这个转换可以由函数表示:

s = f ( r ) s = f( r )s=f(r)

其中r为原来的像素值,s为新的像素值,通常采用的函数了单调函数进行变换。

线性变换:

s ( x , y ) = c + k r ( x , y ) s(x,y) =c+kr(x,y)
s(x,y)=c+kr(x,y)

其中c和k均为常数

非线性变换:

s = a + l n ( r + 1 ) b l n c s=a+\frac {ln(r+1)} {blnc}
s=a+ 
blnc
ln(r+1)

 

其中a,b,c为常数

Gamma变换:

s = c r γ s = cr^γ
s=cr 
γ
 

其中c为常数,通常取1,γ也为常数,r的范围为[0,255],通常会放缩到[0,1]

图为γ取不同值时的情况,例如,当原图像的像素值为0.2时,γ=1.5时,现图像的像素值小于0.2,γ=1时,现图像的像素值等于0.2.当γ=0.5时,现图像的像素值大于0.4.
 

2.代码


clear all;
%% 
C=double(imread('trees.tif'));       %读入图片
h=[1,1,1;1,1,1;1,1,1]./9;
B=C(:,:,1);
%B=imfilter(B,h,'replicate');
S=size(B);H=S(1,1);W=S(1,2);
t=0.75;%0.730174;
h0 = (8*t*t*t-6*t*t+3*t)/(1+2*t)*(1/32);
h1 = (-16*t*t*t+20*t*t-12*t+3)/(1+2*t)*(1/32);
h2 = (2*t-3)/(1+2*t)*(1/8.);
h3 = (16*t*t*t-20*t*t+28*t+5)/(1+2*t)*(1/32.);
h4 = (-8*t*t*t+6*t*t+5*t+20)/(1+2*t)*(1/16.);
hL=[h0,h1,h2,h3,h4,h3,h2,h1,h0];

g0=-t/16;
g1=(1-2*t)/16;
g2=(t+4)/16;
g3=(3+2*t)/8;
hH=[-g0,g1,-g2,g3,-g2,g1,-g0];
%%   对淹没在噪声中的SAR图像首先用Wiener滤波法自适应去噪
%Idenoise= medfilt2(B(:,:,1),[3 3]);%中值滤波
%Idenoise = wiener2(B(:,:,1),[5 5]);%自适应滤波
%Idenoise=double(Idenoise);
Idenoise=B;

%%   用多分辨分解法提取高频边缘BI

hL=[1/16,1/4,3/8,1/4,1/16];
for i=1:length(hL)
    for j=1:length(hL)
        hL2D(i,j)=hL(i)*hL(j);
    end
end
L0=imfilter(Idenoise,hL2D,'replicate');%低频近似图像L0
L0=double(L0);
L0max=max(max(L0));
c=0.3;s=2;
T1 = 0;
T2 = (1-c)*L0max;
k1=0.6; k2=s;

BI = Idenoise-L0;% 第一层高频边缘BI

 %%   对BI作非线性插值后得到newBI
newBI=BI;

for i=1:H
    for j=1:W
        if abs(BI(i,j))<=T1
            newBI(i,j)=k1*BI(i,j);
        else if (abs(BI(i,j))>T1)&(abs(BI(i,j))<=T2)
                newBI(i,j)=sign(BI(i,j))*(k2*abs(BI(i,j))+T1*(k1-k2));
            end
        end
    end
end
%

%%    对newBI作高通滤波得到增强后的高频边缘BI
hH=[-1/16,1/4,-3/8,1/4,-1/16];%[-1,2,-1]/2;
for i=1:length(hH)
    for j=1:length(hH)
        hH2D(i,j)=hH(i)*hH(j);
    end
end

BI=imfilter(newBI,hH2D,'replicate');     %修正后的边缘


BI=double(BI);
Irecover=newBI+L0;

for i=1:H
    for j=1:W
        if Irecover(i,j)<0
            Irecover(i,j)=0;
        else if Irecover(i,j)>255
                Irecover(i,j)=255;
            end
        end
    end
end

%%
EP1D=[-0.15,0.25,0.7,0.25,-0.15];
for i=1:length(EP1D)
    for j=1:length(EP1D)
        EP2D(i,j)=EP1D(i)*EP1D(j);
    end
end
Irepro = imfilter(Irecover,EP2D,'replicate');


figure,imshow(uint8(B),[]);
title('原图');
figure,imshow(uint8(Irecover),[]);
title(['高频非线性增强后的图像']);

figure,imshow(uint8(Irepro),[]);
title(['非线性增强后再补偿的图像']);

3.运行结果

 

 

 


http://www.niftyadmin.cn/n/1385620.html

相关文章

[安全分析报告]使用某科技公司客服系统的风险分析

一、YS客服系统问题描述&#xff1a; YS使用的是某公司开发的客服系统&#xff0c;使用该系统的如下优点&#xff1a;安装和部署简单&#xff0c;解决方案相对完善&#xff0c;所以不需要单独开发YS独立的客服系统。注册和使用该系统的基本流程图如下&#xff1a; 二、钓鱼攻击…

pdb命令调试python程序

1)进入命令行Debug模式&#xff0c;python -m pdb xxx.py2)h&#xff1a;(help)帮助3)w&#xff1a;(where)打印当前执行堆栈4)d&#xff1a;(down)执行跳转到在当前堆栈的深一层(个人没觉得有什么用处)5)u&#xff1a;(up)执行跳转到当前堆栈的上一层6)b&#xff1a;(break)添…

如何修改博客样式

http://www.cnblogs.com/lyzg/p/4868830.html 直接贴出地址&#xff0c;然后照旧修改即可&#xff0c;博主赞一个 需要提示的是&#xff0c;要申请js的控制权限才能进行以上的修改&#xff0c;否则会失效的额。 只要在后台管理提交申请即可。 因为本人学过一点css和html所以修改…

ASP.NET万能JSON解析器

概念介绍还是先简单说说Json的一些例子吧。注意&#xff0c;以下概念是我自己定义的&#xff0c;可以参考.net里面的TYPE的模型设计如果有争议&#xff0c;欢迎提出来探讨&#xff01;1.最简单&#xff1a;{"total":0} total就是值&#xff0c;值是数值&#xff0c;等…

全站防SQL注入类的修改版本

值得一提的是:如果使用全局性的检验方式,则在开发之初无需考虑Sql注入的情况/// <summary>/// 防SQL注入检查器/// </summary>public class SqlChecker{//当前请求对象private HttpRequest request;//当前响应对象private HttpResponse response;//安全Url,当出现S…

[LintCode] Sort Integers II [Merge-sort, Quick-sort, Heap-sort]

Problem Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm. Example Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5]. Note 考察对Heap Sort, Quick Sort, Merge Sort的掌握。 Solution Merge Sort pub…

DarkNet网络结构

一、darknet53网络结构图 文字版&#xff1a;卷积(下采样卷积1残差块)(下采样卷积2残差块)(下采样卷积8残差块)(下采样卷积8残差块)(下采样卷积4*残差块) 不难看出&#xff0c;darknet53就是重复堆叠下采样卷积n*残差块(n为残差块的个数)这个结构而组成的。而更基本的结构就是…

Web开发要做好浏览器兼容谈何容易?

浏览器兼容虽说是web开发的基本要求,但是要做到完全兼容各种浏览器谈何容易?对于开发和设计都由程序员兼着的小公司的信息部门来说,更是雪上加霜。就连京东商城&#xff0c;包括百度做出了的东西&#xff0c;也都很难保证主流浏览器的完全兼容。其中最典型的是京东&#xff0c…