2017-11-28 18:20:47 Atimynyc 阅读数 1287
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25331 人正在学习 去看看 邵发

Matlab 关于彩色图像的平移、旋转以及对称处理

一、实验源码
(1)图像平移

image = imread('picture1.jpg'); % 读取图像

[W, H, G] = size(image); % 获取图像大小

image_r=image(:,:,1);
image_g=image(:,:,2);
image_b=image(:,:,3);%获取图像的RGB值

res = zeros(W, H, 3); % 构造结果矩阵。每个像素点默认初始化为0(黑色)

X = 50; % 平移量X
Y = 50; % 平移量Y
tras = [1 0 X; 0 1 Y; 0 0 1]; % 平移的变换矩阵 

  for i = 1 : W     
     for j = 1 : H
        temp = [i; j; 1];
        temp = tras * temp; % 矩阵乘法
        x = temp(1, 1);
        y = temp(2, 1);%x、y分别为通过矩阵乘法得到后的平移位置的横纵坐标值

        % 变换后的位置判断是否越界
        if (x <= W) && (y <= H)&&(x >= 1) && (y >= 1)
            res(x,y,1) = image_r(i, j);
            res(x,y,2) = image_g(i, j);
            res(x,y,3) = image_b(i, j);%将新的RGB值赋予在背景上   
        end
     end
  end

imshow(uint8(res)); % 显示图像,要用uint8转化,以下都是。

(2)图像偏转

image = imread('picture1.jpg'); % 读取图像

[W, H, G] = size(image); % 获取图像大小

image_r=image(:,:,1);
image_g=image(:,:,2);
image_b=image(:,:,3);%获取图像的RGB值

X = 30; % 偏移角度,角度可以自己换
Y = pi/180*X; %偏转弧度,由于matlab里面的三角函数的参数是弧度,需进行角度转弧度处理
tras = [cos(Y) -sin(Y) 0; sin(Y) cos(Y) 0; 0 0 1]; % 平移的变换矩阵 

res = zeros(W, H, 3); % 构造结果矩阵。每个像素点默认初始化为0(黑色)

  for i = 1 : W     
     for j = 1 : H
        temp = [i; j; 1];
        temp = tras * temp; % 矩阵乘法
        x = round(uint16(temp(1, 1)));
        y = round(uint16(temp(2, 1)));%x、y分别为通过矩阵乘法得到后的平移位置的横纵坐标值

        % 变换后的位置判断是否越界
        if (x <= W) && (y <= H)&&(x >= 1) && (y >= 1)
            res(x,y,1) = image_r(i, j);
            res(x,y,2) = image_g(i, j);
            res(x,y,3) = image_b(i, j);%将新的RGB值赋予在背景上   
        end
     end
  end

  %插值处理,由于算法问题(小数取整),旋转后并不是每一个像素点都有值,因此需要在没有值的像素点再填充像素点
  for a =2 : (W - 1)
      for b=2 :( H - 1)
          for c=1 : 3
          if res(a,b,c)==0&&res(a,b-1,c)~=0&&res(a,b+1,c)~=0
              res(a,b,c)=res(a,b-1,c);
          end
          end
      end
  end

imshow(uint8(res)); % 显示图像

(3)图像对称(左右、上下)

%左右对称
image = imread('picture1.jpg'); % 读取图像

[W, H, G] = size(image); % 获取图像大小

image_r=image(:,:,1);
image_g=image(:,:,2);
image_b=image(:,:,3);%获取图像的RGB值

res = zeros(W, H, 3); % 构造结果矩阵。每个像素点默认初始化为0(黑色)

  for i = 1 : W     
     for j = 1 : H   
        x = i;
        y = H-j+1;%左右对称
            res(x,y,1) = image_r(i, j);
            res(x,y,2) = image_g(i, j);
            res(x,y,3) = image_b(i, j);%将新的RGB值赋予在背景上   
     end
  end

imshow(uint8(res)); % 显示图像
%上下对称
image = imread('picture1.jpg'); % 读取图像

[W, H, G] = size(image); % 获取图像大小

image_r=image(:,:,1);
image_g=image(:,:,2);
image_b=image(:,:,3);%获取图像的RGB值

res = zeros(W, H, 3); % 构造结果矩阵。每个像素点默认初始化为0(黑色)

  for i = 1 : W     
     for j = 1 : H   
        x = W-i+1;
        y = j;%上下对称
            res(x,y,1) = image_r(i, j);
            res(x,y,2) = image_g(i, j);
            res(x,y,3) = image_b(i, j);%将新的RGB值赋予在背景上   
     end
  end

imshow(uint8(res)); % 显示图像

二、实验结果
(1)平移展示
平移展示
(2)旋转展示
旋转展示
(3)对称展示
对称展示

 至此,彩色图像的基本处理到这啦,关于旋转插值处理那里我的处理还是不怎么好,希望如果小伙伴有更好的方式就和我讨论下,我改进一下。
2018-11-11 14:36:08 KID_yuan 阅读数 164
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25331 人正在学习 去看看 邵发

第四章,频率域图像增强

1,连续和离散傅里叶变换和反变换表达式?

一维连续:

F(u)=\int _{-\infty }^{\infty }f(x)e^{-j2\pi ux}dx                   f(x)=\int _{-\infty }^{\infty }F(u)e^{j2\pi ux}du

二维连续:

F(u,v)=\int _{-\infty }^{\infty }\int _{-\infty }^{\infty }f(x,y)e^{-j2\pi (ux+vy)}dxdy            f(x,y)=\int _{-\infty }^{\infty }\int _{-\infty }^{\infty }F(u,v)e^{j2\pi (ux+vy)}dudv

一维离散:

F(u)=\frac{1}{M}\sum _{x=0}^{M-1}f(x)e^{-j2\pi ux/M}                f(x)=\sum _{u=0}^{M-1}F(u)e^{j2\pi x/M}

二维离散:

F(u,v)=\frac{1}{M}\frac{1}{N}\sum_{x=0}^{M-1}\sum_{Y=0}^{n-1}f(x,y)e^{-j2\pi (ux/M+vy/N)}            f(x,y)=\sum_{x=0}^{M-1}\sum_{Y=0}^{n-1}f(x,y)e^{j2\pi (ux/M+vy/N)}

2,二维图像离散傅里叶变换性质?

1、时移性

2、频移性

3、均值

4、共轭对称性

|F(u,v)|=|F(-u,-v)|

5、周期性

6、位移不变性是指输入信号的位移对于输出信号不会产生什么影响,只会使得输出信号产生相应的位移。也就是说,如果输入信号为x[n]时,系统产生的输出信号为 y[n],那么对于任意的输入信号和常数s,都有输入信号为x[n+s]时输出信号为y[n+s]成立。通过给变量n加上常数s,可以使波形在水平方向上左移或右移,注意左'+'右'-'

7、线性

8、微分特性

9、卷积定理

10、相关定理

11、相似性

12、几种特殊函数的傅里叶变换

 

 

 

 

 

 

 

参考书籍:

《数字图像处理第二版(冈萨雷斯)》

2019-03-12 17:07:17 qq_40438165 阅读数 288
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25331 人正在学习 去看看 邵发

一、图像傅里叶变换的物理意义

  • 图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。傅里叶变换是将图像从空间域转换到频率域,换句话说,是将图像的灰度分布函数变换为图像的频率分布函数。
  • 傅里叶频谱图上我们看到的明暗不一的亮点,其意义是指图像上某一点与邻域点差异的强弱,即梯度的大小,也即该点的频率的大小。
  • 对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。不仅可以清晰地看出图像频率分布,还可以分离出有周期性规律的干扰信号。

1、幅度值vs相位

\quad相位包含图像位置信息,幅度只是亮度,故相位包含的信息更多。

  • 幅度谱告诉我们图像中某种频率的成份有多少。
  • 相位谱告诉我们频率成份位于图像的什么位置。

2、一维连续傅里叶变换

\quadf(x)f(x)进行傅里叶变化得到F(u)F(u),
F(u)=f(x)ej2πxudx=R(u)+jI(u)F(u)=\int_{-\infty}^{\infty}f(x)e^{-j2\pi xu}dx=R(u)+jI(u)
F(u)=R2(u)+I2(u)幅值:|F(u)|=\sqrt{R^2(u)+I^2(u)}
θ(u)=arctan(I(u)R(u))相位:\theta(u)=\arctan(\frac{I(u)}{R(u)})
F(u)=F(u)ejθ(u)F(u)=|F(u)|e^{j\theta(u)}

3、二维连续傅里叶变换

F(u,v)=f(x,y)ej2π(ux+vy)dxdyF(u,v)=\int_{-\infty}^{\infty}\int_{-\infty}^\infty f(x,y)e^{-j2\pi (ux+vy)}dxdy

4、傅里叶变换的性质

  • 平移特性:空域坐标移动,频域只发生相位变化,幅值不变。
  • 旋转特性:空域图像旋转角度对应于频域DFT函数旋转相同角度。
  • 在这里插入图片描述
  • 周期性
  • 共轭对称性
  • 卷积特性:时域相乘、频域相卷;反之亦然

二、频域滤波

\quad频域图像增强是指通过对图像进行傅立叶变换,将图像从空间域变换到频域,并对图像的频率成分进行相应处理,从而实现图像增强的功能。
频域滤波实际上就是将原始图象f(x,y)f(x,y)进行DFT变换,得到频域的F(u,v)F(u,v),然后将F(u,v)F(u,v)与频域滤波器H(u,v)H(u,v)相乘得到滤波后频谱G(u,v)G(u,v),即
G(u,v)=F(u.v)H(u,v)G(u,v)=F(u.v)H(u,v)
\quad最后将G(u,v)G(u,v)进行IDFT变换即可得到频域滤波后的图像。
在这里插入图片描述
\quad接下来描述三种滤波器类型。

1、陷波滤波器

在这里插入图片描述

  • 设置F(0,0)=0(结果图像的平均值为零),而保留其它傅里叶变换的频率成分不变。
  • 除了原点处有凹陷外,其它均是常量函数。
  • 由于图像平均值为0而产生整体平均灰度级的降低。
  • 用于识别由特定的、局部化频域成分引起的空间图像效果。

2、低通(平滑)滤波器

\quad被低通滤波的图像比原始图像少尖锐的细节部分而突出平滑过渡部分,对比空间域滤波的平滑处理,如均值滤波器。

3、高通(锐化)滤波器

\quad被高通滤波的图像比原始图像少灰度级的平滑过渡而突出边缘等细节部分。对比空间域的梯度算子、拉普拉斯算子。

4、性质

  • 频域滤波器越窄,滤除的低频部分越多,图像越模糊。意味着在空域中滤波器越宽,模板就越大(阶数越高)。
2018-12-10 10:00:49 yql_617540298 阅读数 240
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25331 人正在学习 去看看 邵发

一、图像

图像:对应矩阵,每个位置的元素就是该处的像素;

图像矩:一个从数字图形中计算出来的矩集,通常描述了该图像全局特征,并提出了大量的关于该图像不同类型的几何特征信息;(如大小、位置、方向和形状等);

一阶矩:与形状有关;

二阶矩:显示了曲线围绕直线平均值的扩展程度;

三阶矩:关于平均值的对称性测量;

通过二阶矩计算图像中心:python

import imutils
import cv2
import os

#ap = argparse.ArgumentParser()
#--image 参数: 磁盘中待处理图像的路径
#ap.add_argument("-i","--image",required=True,help="path to the input image")
#args = vars(ap.parse_args())

#image = cv2.imread(args["image"])
filepath = 'C:/Users/Administrator/Desktop/result/'
resultpath = 'C:/Users/Administrator/Desktop/result_zx/'
count = os.listdir(filepath)
for i in range(0,len(count)):
    print("i=",i)
    image = cv2.imread(filepath+str(i)+'.png')
    gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
    #5×5 内核的高斯平滑
    blurred = cv2.GaussianBlur(gray,(5,5),0)
    #阈值化
    thresh = cv2.threshold(blurred,60,255,cv2.THRESH_BINARY)[1]
    
    #使用轮廓检测去定位这些白色区域
    #返回图像上每一个白块对应的边界点集合(即轮廓)
    cnts = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    cnts = cnts[0] if imutils.is_cv2() else cnts[1]
    
    #处理每一条轮廓
    for c in cnts:
        #计算轮廓区域图像的矩
        M = cv2.moments(c)
        print("M:",M)
        if M["m00"]==0:
            print("skip!")
        else:
            #计算轮廓的中心
            cX = int(M["m10"] / M["m00"])
            cY = int(M["m01"] / M["m00"])
            #在形状的中心 (cX, cY) 处绘制一个白色的小圆
            cv2.drawContours(image, [c], -1, (0, 255, 0), 2)
            cv2.circle(image, (cX, cY), 7, (255, 255, 255), -1)
            cv2.putText(image, "", (cX - 20, cY - 20),
                        cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
    cv2.imwrite(resultpath+str(i)+'.png',image)
    #cv2.imshow("Image", image)
    cv2.waitKey(0)

通过二阶矩计算图像重心:MATLAB

for i=0:29
    %I = imread('picture\0.png'); 
    bgFile = ['picture\',int2str(i),'.png'];% 读入图片的完整路径
    I = imread(bgFile);
    I = rgb2gray(I); 
    imshow(I); 
    I = double(I); 
    [rows,cols] = size(I); 
    x = ones(rows,1)*[1:cols]; 
    y = [1:rows]'*ones(1,cols); 
    area = sum(sum(I)); 
    meanx = sum(sum(I.*x))/area; 
    meany = sum(sum(I.*y))/area; 
    hold on; 
    plot(meanx,meany,'r+'); %十字标出重心位置
    F=getframe(gcf); % 获取整个窗口内容的图像
    %imwrite(F.cdata,'result\1.png')
    img = ['result\',num2str(i),'.png']
    imwrite(F.cdata,img); 
    hold off;
end;

二、中心距求主轴方向

引用原文链接:https://blog.csdn.net/hong__fang/article/details/49851569

1. 中心距

2. 中心距求主轴方向

主轴方向与x轴正向的最小夹角,如果角度位于y正方向,则,位于y负方向,

求中心距求主轴另外公式:

求中心距时,如果是二值图像,可以只根据图像边界坐标求主方向,与利用图像所有坐标求主轴方向相比,只利用边界坐标会存在一定偏差,约

MATLAB实现:主轴方向

function test
 
    I = imread('picture\0.png');
  
    [cm ju] = qijieju(uint8(I));
    m00 = cm(1);
    mu11 = cm(2);
    mu02 = cm(3);
    mu20 = cm(4);
    a = mu20 / m00; 
    b = mu11 / m00;
    c = mu02 / m00;
    square = sqrt( 4 * b * b + (a - c) * (a - c) );
	%求主轴方法1
    theta1 = atan2( 2 * b, a - c + square )*180/pi
    %save('output\output.txt','theta1','-ascii')
    %B = imrotate(I,theta1,'bicubic')
    %imwrite(B,'output\1.png')
    %求主轴方法2
    theta2 = atan2(2*mu11,(mu20-mu02))/2*180/pi
    I2 = imrotate(I,-theta2*10,'nearest')
    imwrite(I2,'output\0.png')
end
 
%求不变矩及中心矩
function [cm ju] = qijieju(I0)
    A=double(I0);
    [nc,nr]=size(A);
    [x,y]=meshgrid(1:nr,1:nc);
    x=x(:);
    y=y(:);
    A=A(:);
    m00=sum(A);
    if m00==0
        m00=eps;
    end
    m10=sum(x.*A);
    m01=sum(y.*A);
    xmean=m10/m00; %重心
    ymean=m01/m00;
    cm00=m00; %归一化中心矩
    cm02=(sum((y-ymean).^2.*A))/(m00^2);
    cm03=(sum((y-ymean).^3.*A))/(m00^2.5);
    cm11=(sum((x-ymean).*(y-ymean).*A))/(m00^2);
    cm12=(sum((x-ymean).*(y-ymean).^2.*A))/(m00^2.5);
    cm20=(sum((x-xmean).^2.*A))/(m00^2);
    cm21=(sum((x-xmean).^2.*(y-ymean).*A))/(m00^2.5);
    cm30=(sum((x-xmean).^3.*A))/(m00^2.5);
    ju(1)=cm20+cm02;  %
    ju(2)=(cm20-cm02)^2+4*cm11^2; %
    ju(3)=(cm30-3*cm12)^2+(3*cm21-cm03)^2; %
    ju(4)=(cm30+cm12)^2+(cm21+cm03)^2;  %
    ju(5)=(cm30-3*cm12)*(cm30+cm12)*((cm30+cm12)^2-3*(cm21+cm03)^2)+(3*cm21-cm03)*(cm21+cm03)*(3*(cm30+cm12)^2-(cm21+cm03)^2); %
    ju(6)=(cm20-cm02)*((cm30+cm12)^2-(cm21+cm03)^2)+4*cm11*(cm30+cm12)*(cm21+cm03);  %
    ju(7)=(3*cm21-cm03)*(cm30+cm12)*((cm30+cm12)^2-3*(cm21+cm03)^2)+(cm30-3*cm12)*(cm21+cm03)*(3*(cm30+cm12)^2-(cm21+cm03)^2); 
    qijieju= ju;%abs(log(ju))
    cm = [cm00 cm11 cm02 cm20];
end

三、通过两点计算夹角

python实现

def azimuthAngle( x1,  y1,  x2,  y2):
    angle = 0.0
    dx = x2 - x1
    dy = y2 - y1
    angle = math.atan(dy/dx)
    return (angle * 180 / math.pi)

angle = azimuthAngle(x1,y1,x2,y2)
print("angle=",angle)

 

2015-05-07 14:54:13 xiao_lxl 阅读数 3080
  • 《C语言/C++学习指南》加密解密篇(安全相关算法)

    本套视频教程介绍加密解密相关的常见算法,指出每种算法的应用场景,并给出使用示例。具体包含: (1) 数据转换(HEX和base64) (2) 对称加密 (DES, 3DES, AES) (3) 校验 CRC, MD5摘要, SHA1摘要 (4) 数字签名(HMAC-SHA1) , 并介绍了crypto++这个算法库的使用方法。

    25331 人正在学习 去看看 邵发

<span style="font-family: Arial, Helvetica, sans-serif;"></pre>图像预处理——对数变换  算法实现<p></p><p>对数变换可实现图像的水平平移、竖直平移、对称变换等操作</p><p>也可实现图像灰度的扩展和压缩功能。</p><p>实现代码如下:</p><p> </p><pre code_snippet_id="661082" snippet_file_name="blog_20150507_1_1256646" name="code" class="cpp"></pre><pre name="code" class="cpp"></span>

<pre name="code" class="cpp"><span style="font-family: Arial, Helvetica, sans-serif;">int LogTranslation(Mat srcImg, Mat dstImg, float a, float b, float c)</span>

{
	Mat logTable(1,256,CV_8U);
	double temp;
	for ( int i = 0; i < 256; i++ )
	{
		temp = log((double)i+1)/b + a;  //对数变换  g(x,y) = ln(f(x,y)+1)/(b*ln(c)) + a;
		
		if (temp < 0.0)
		{
			temp = 0.0;
		}
		else if (temp > 255.0)
		{
			temp = 255.0;
		}


		logTable.data[i] = int(temp + 0.5); //四舍五入
	}
	LUT(srcImg,logTable,dstImg);
	imshow("Log", dstImg);
	waitKey(0);
	return 1;
}


彩色图像处理

阅读数 303

没有更多推荐了,返回首页