matlab 灰度变换函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab 灰度变换函数相关的知识,希望对你有一定的参考价值。

请问,matlab中的灰度变换函数是什么,格式怎样?

就是已知一灰度变换曲线的函数表达式,用什么语句可以让原图像按这个曲线进行灰度变换?
题目是这样的:
已知图像路径为E:\Fig1a.jpg,灰度变换曲线为E1(s)=int[(255s)1/2+0.5],设L=256,要求对图像按曲线进行灰度变换。麻烦大家帮我写下程序,会加分的。

灰度变换函数

%-----------------------------------------------------
I = imread('coins.png');
I = im2double(I);
[row, col] = size(I);

figure(1);
subplot(2, 2, 1);
imshow(I); title('原图');

figure(2);
[H, x] = imhist(I, 64);%计算64个小区间的灰度直方图
stem(x, (H/row/col), '.'); title('原图');

%-----------------------------------------------------
% Db = f(Da) = fa * Da + fb
% fa > 1 时, 输出图像的对比度将增大; 当fa < 1时, 对比度减小.
% 当fa = 1, fb != 0时, 操作使所有像素的灰度值上下移, 整个图
% 变得更亮或者更暗

%增加对比度
Fa = 2; Fb = -55;
o = Fa .* I + Fb / 255;

figure(1);
subplot(2, 2, 3);
imshow(o); title('Fa = 2; Fb = -55;');

%相反显示
Fa = -1; Fb = 255;
o = Fa .* I + Fb / 255;

figure(1);
subplot(2, 2, 4);
imshow(o); title('Fa = -1; Fb = 255;');

参考技术A 首先将图像转化为灰度图像,然后用亮度变换函数;
程序如下:f=imread('E:\Fig1a.jpg');
a=im2double(rgb2gray(f));
m=mean2(a);E1=int(255*1/2+0.5)
g=1./(1+(m./a+eps)).^E1)
参考技术B 彩图变灰度图 rgb2gray

已知变换曲线的话 直接将原始图的灰度值代入函数式进行变换即可
需要注意的是图形数据类型

I = imread('E:\Fig1a.jpg');
[d1,d2,d3] = size(I);
if(d3 > 1)
I = rgb2gray(I);%如果是灰度图就不用先变换
end
I = double(I) / 255;
I1 = uint8(255 * I * 0.5 + 0.5);
imshow(I1);imwrite(I,'test.jpg')本回答被提问者和网友采纳

应用霍夫变换方法,用matlab语言编写相应的程序

对一幅256X256的256灰度级黑白图像,应用霍夫变换方法,用matlab语言编写相应的程序,判断图像中存在的直线和圆,并得出直线和圆的方程参数,给出程序清单和一个具体算例(存在直线和圆的图像可以自行设计)

RGB = imread('cankao.jpg');%jaynes-thesis
I=rgb2gray(RGB); % 图片用的是灰度图像,
[x,y]=size(I);
BW=edge(I);
figure;imshow(I);title('原图')
figure;imshow(BW);title('边缘检测图像')
rho_max=floor(sqrt(x^2+y^2))+1; %由原图数组坐标算出ρ最大值,并取整数部分加1
%此值作为ρ,θ坐标系ρ最大值
accarray=zeros(rho_max,180); %定义ρ,θ坐标系的数组,初值为0。
%θ的最大值,180度
Theta=[0:pi/180:pi]; %定义θ数组,确定θ取值范围
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
%将θ值代入hough变换方程,求ρ值
rho=(m*cos(Theta(k)))+(n*sin(Theta(k)));
%将ρ值与ρ最大值的和的一半作为ρ的坐标值(数组坐标),这样做是为了防止ρ值出现负数
rho_int=round(rho/2+rho_max/2);
%在ρθ坐标(数组)中标识点,即计数累加
accarray(rho_int,k)=accarray(rho_int,k)+1;
end
end
end
end
%figure;colormap gray;
%imagesc(accarray);title('hough变换后的图')
%xlabel('theta'), ylabel('rho');
%=====下面程序的显示效果没上面好=====%
�carray=uint8(accarray); %转换后会丢数据
%figure;imshow(accarray);title('hough变换后的图')
%xlabel('theta'), ylabel('rho');
%axis on, axis normal, hold on;
%=======利用hough变换提取直线======%
%寻找100个像素以上的直线在hough变换后形成的点
K=1; %存储数组计数器
for rho_n=1:rho_max %在hough变换后的数组中搜索
for theta_m=1:180
if accarray(rho_n,theta_m)>=10 %设定直线的最小值。
case_accarray_n(K)=rho_n; %存储搜索出的数组下标
case_accarray_m(K)=theta_m;
K=K+1;
end
end
end
%把这些点构成的直线提取出来,输出图像数组为I_out
I_out=zeros(x,y);
I_jiao_class=zeros(x,y);
for n=1:x,
for m=1:y
if BW(n,m)==1
for k=1:180
rho=(m*cos(Theta(k)))+(n*sin(Theta(k)));
rho_int=round(rho/2+rho_max/2);
%如果正在计算的点属于100像素以上点,则把它提取出来
for a=1:K-1
if rho_int==case_accarray_n(a)&k==case_accarray_m(a)%%%==gai==%%% k==case_accarray_m(a)&rho_int==case_accarray_n(a)
I_out(n,m)=BW(n,m);
I_jiao_class(n,m)=k;
end
end
end
end
end
end
figure;imshow(I_out);title('利用经典hough变换提取的图像');
%========hough变换=========%
%=====matlab自带函数========%
% 入口图像为 BW,出口图像为H
% [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);
% figure;imshow(H,'XData',T,'YData',R,'InitialMagnification','fit');title('hough变换矩阵')
% xlabel('theta'), ylabel('rho');
% axis on, axis normal, hold on;
参考技术A 首先利用hought变换检测出目标图像,包括圆和直线,然后对同一连通域内的目标像素拟合即可得到方程本回答被提问者采纳

以上是关于matlab 灰度变换函数的主要内容,如果未能解决你的问题,请参考以下文章

数字图像处理学习笔记:灰度变换

用于灰度变换的一些实用的M函数

数字图像处理中,灰度的指数变换和对数变换分别有啥有

matlab图像灰度调整——imadjust函数的使用

数字图像处理(MATLAB版)学习笔记——第2章 灰度变换与空间滤波

图像处理Matlab2 灰度变换 imadjust stretchlim