首页 > 其他分享 >梯度方向卷积 自己方法

梯度方向卷积 自己方法

时间:2023-03-03 10:00:09浏览次数:45  
标签:plt img 卷积 shape dx dy np 方法 梯度方向

我也忘记这是什么代码了,几年前的,今天翻到发布出来



import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import math

img = cv.imread(r'C:\Users\51102\Desktop\tradition\1.jpg',0)
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
img = np.dot(img[..., :3], [0.299, 0.587, 0.114])
plt.subplot(331)
plt.imshow(img,cmap='gray')
plt.title('original_img')
print('original.shape=',img.shape)

# 构建梯度
gradient_x=np.array([[-1,0,1],[-2,0,2],[-1,0,1]])
gradient_y=np.array([[-1,-2,-1],[0,0,0],[1,2,1]])

plt.subplot(332)

dx=cv.filter2D(img,ddepth=-1,kernel=gradient_x)
print('dx.shape=',dx.shape)
plt.imshow(dx,cmap='gray')
plt.title('dx')
plt.subplot(333)
dy=cv.filter2D(img,-1,gradient_x)
print('dy.shape=',dy.shape)
plt.imshow(dy,cmap='gray')
plt.title('dy')




# 求方向


plt.subplot(334)
magnitude=(np.multiply(dy,dy)+np.multiply(dx,dx))
plt.imshow(magnitude,cmap='gray')
plt.title('magnitude')



cita=cv.phase(dy,dx, angleInDegrees=True)  # 求角度


# 生成高斯滤波器
"""
要生成一个 (2k+1)x(2k+1) 的高斯滤波器,滤波器的各个元素计算公式如下:
H[i, j] = (1/(2*pi*sigma**2))*exp(-1/2*sigma**2((i-k-1)**2 + (j-k-1)**2))
"""
sigma1 = sigma2 = 0.6
gau_sum = 0
gaussian = np.zeros([5, 5])
for i in range(5):
    for j in range(5):
        gaussian[i, j] = math.exp((-1/(2*sigma1*sigma2))*(np.square(i-2-1) + np.square(j-2-1)))/(2*math.pi*sigma1*sigma2)
        gau_sum = gau_sum + gaussian[i, j]
gaussian = gaussian / gau_sum  # 归一化处理

print('guss=',gaussian.shape)

W, H = img.shape  # 原始图片大小 灰度图
_,g=gaussian.shape
new_gray = np.zeros([W-5, H-5])
new_magnitude = np.zeros([W-5, H-5])

for i in range(W-5):
    for j in range(H-5):
        '''
        滤波处理  我自创一种方法尝试,根据角度,来重新配置权重
        我先降低梯度较大的幅度,对梯度方向进行抑制,其它方向进行加强
        '''
        guss=gaussian
        g_=int((g-1)/2)

        if 0<cita[i,j]<90 or 180<cita[i,j]<270 or -180<cita[i,j]<-90 or -360<cita[i,j]<-270:
            for k in range(g_):
                for kk in range(g_):
                    guss[g_+1+k,g_+1+kk]=gaussian[g_+1+k,g_+1+kk]/4
                    guss[g_-1 - k, g_ - 1 - kk] = gaussian[g_ - 1 - k, g_ - 1 - kk] / 4
            if 90 < cita[i, j] < 180 or 270 < cita[i, j] < 360 or -90 < cita[i, j] < 0 or -180 < cita[i, j] < -270:
                for k in range(g_):
                    for kk in range(g_):
                        guss[g_ + 1 + k, g_ - 1 - kk] = gaussian[g_ + 1 + k, g_ - 1 - kk] / 4
                        guss[g_ - 1 - k, g_ + 1 + kk] = gaussian[g_ - 1 - k, g_ + 1 + kk] / 4
            new_gray[i, j] = np.sum(img[i:i+5, j:j+5] * guss)
            new_magnitude[i, j] = np.sum(magnitude[i:i + 5, j:j + 5] * guss)








plt.subplot(335)
plt.imshow(new_gray,cmap='gray')
plt.title('new_gray')

plt.subplot(336)
plt.imshow(new_magnitude,cmap='gray')
plt.title('new_magnitude')




plt.show()
梯度方向卷积

 




结果显示:



 

 







标签:plt,img,卷积,shape,dx,dy,np,方法,梯度方向
From: https://www.cnblogs.com/tangjunjun/p/12519644.html

相关文章

  • 吴恩达卷积神经网络——目标检测
    1.目标定位定位分类问题不仅要求判断出图片中物体的种类,还要在图片中标记出它的具体位置,用边框(BoundingBox,或者称包围盒)把物体圈起来。一般来说,定位分类问题通常只......
  • 坏消息,new Date()方法在IOS系统中存在null值情况
    背景介绍笔者最近在开发小程序,发现在使用newDate()函数在电脑模拟器上倒是没什么影响能很好实现效果,但是在我的Iphone上看到的效果跟预想有出入。图为在电脑微信小程序......
  • Git基础使用和在UE中使用的方法
    Git使用介绍Git使用1.基础知识pwd显示目前的工作目录printworkdirectoryls显示当前路径下所有文件mkdir产生新的文件夹makedirectorytouch创建新文件rm......
  • 机器学习: 可视化反卷积操作
    转置卷积操作的详细分解1.简介转置卷积是用于生成图像的,尽管它们已经存在了一段时间,并且得到了很好的解释——我仍然很难理解它们究竟是如何完成工作的。我分享的文章描......
  • msvcr100.dll丢失是什么意思-msvcr100.dll丢失解决方法
    丢失msvcr100.dll或者损坏会导致电脑很多软件跟游戏都无法正常打开运行。还有不少小伙伴不知道怎么修复,小编今天就把修复教程分享给大家;最简单的修复方法电脑开机打开任意一......
  • C# 实现你自己的异步方法
    背景最近在重构自己曾经的代码,具体需求是在Unity等待如一个模型动画,一段ui动画如下:Await的目标await的目标是一个可等待对象,而拥有GetAwaiter方法并且该方法拥有合......
  • PVE版本升级及内核升级方法
    1.版本升级登录管理页面--点击左侧菜单栏的"PVE"节点--点击"更新"菜单--点击"刷新"按钮(实为执行apt-getupdate)---点击"升级"按钮---升级完重启pve2.更新内核更新一下......
  • PHP写UltraEdit插件脚本实现方法
    UltraEdit可以扩展许多函数来减少我们编写的体力劳动,这个功能的调用是比较实用的,下面是给大家带来的PHP写UltraEdit插件脚本实现方法,一起进入下文了解一下吧!需求:1svn上的......
  • 浅析sleep()方法与wait()方法
    为什么wait()方法不定义在Thread中?  wait()是让获得对象锁的线程实现等待,会自动释放当前线程占有的对象锁。每个对象(Object)都拥有对象锁,既然要释放当前线程占有的......
  • less编译的几种方法
    1.考拉软件编译http://koala-app.com/index-zh.html要引入编译后的css文件考拉会在后台监听2.js在线编译<linkrel="stylesheet/less"type="text/css"href="css/l......