宁夏网站推广,在线代理访问,wordpress 更改密码,广州网站建设 美词文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难#xff0c;我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口#xff0c;在图像上进行扫描#xff0c;每扫出9个像素求平均… 文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口在图像上进行扫描每扫出9个像素求平均再和阈值进行比较。如果9个像素的平均值大与等于阈值就将窗口中心对应的图像像素设置为255否则就设置为0。 二、Python局部二值化 以下虽然是局部二值化处理但是在此基础上增加了阈值乘以一个ratio小数可以调整阈值实现局部阈值二值化处理。
import numpy as np
import matplotlib.pyplot as plt
img plt.imread(lenna.png)
gray 0.299 * img[:, :, 0] 0.587 * img[:, :, 1] 0.114 * img[:, :, 2]
gray gray * 255#图像是[0-1]---[0-255]
def local_threshold(gray, ratio, threshold, size3):h, w gray.shapem int((size - 1) / 2)local_image np.zeros((h, w))for i in range(m, h - m):for j in range(m, w - m):value np.floor((np.sum(gray[i - m: i m 1, j - m: j m 1]) / (size ** 2)) * ratio)if(value threshold):local_image[i, j] 0else:local_image[i, j] 255return local_image.astype(np.uint8)local_image local_threshold(gray, 0.9, 128, 3)
fig plt.figure(figsize(8, 8))
ax fig.add_subplot(1, 2, 1)
ax.set_title(gray image)
ax.set_xlabel(width)
ax.set_ylabel(height)
plt.imshow(gray, cmapgray)
ax fig.add_subplot(1, 2, 2)
ax.set_title(local image)
ax.set_xlabel(width)
ax.set_ylabel(height)
plt.imshow(local_image, cmapgray)三、FPGA局部二值化
module ycbcr2binary_local
(input wire vga_clk ,//vga时钟input wire sys_rst_n ,//复位信号input wire [7:0] y_data ,//灰度处理的图像像素input wire rgb_valid ,//vga显示有效区域output wire [15:0] binary_data //二值化像素
);//shift ram
wire [7:0] data_row1 ;
wire [7:0] data_row2 ;
wire [7:0] data_row3 ;
//3*3像素数据
reg [7:0] p11 ;
reg [7:0] p12 ;
reg [7:0] p13 ;
reg [7:0] p21 ;
reg [7:0] p22 ;
reg [7:0] p23 ;
reg [7:0] p31 ;
reg [7:0] p32 ;
reg [7:0] p33 ;wire [7:0] temp ;
//Y值有效信号
reg y_valid ;assign data_row3 y_data ;
//中值拼接565
assign temp (p11 p12 p13 p21 p22 p23 p31 p32 p33) / 9;//9个像素平均值
assign binary_data (temp 8d128) ? 16hffff: 16h0000;//比较并设置像素
always(posedge vga_clk or negedge sys_rst_n) if(sys_rst_n 1b0)y_valid 1b0 ;elsey_valid rgb_valid ;always(posedge vga_clk or negedge sys_rst_n)if(sys_rst_n 1b0)begin{p11,p12,p13} 24d0 ;{p21,p22,p23} 24d0 ;{p31,p32,p33} 24d0 ;endelse if(y_valid 1b1)begin{p11,p12,p13} {p12,p13,data_row1} ;{p21,p22,p23} {p22,p23,data_row2} ;{p31,p32,p33} {p32,p33,data_row3} ;end elsebegin{p11,p12,p13} 24d0 ;{p21,p22,p23} 24d0 ;{p31,p32,p33} 24d0 ;end
//移位寄存器
shift_ram_gen shift_ram_gen_inst
(.clock (vga_clk ),.shiftin (data_row3 ),.shiftout ( ),.taps0x (data_row2 ),.taps1x (data_row1 )
);endmodule 在FPGA中小编没有将阈值乘上一个小数如果要和Python实现一致你也可以尝试加上。 总结 图像二值化也就告一段落二值化比较基础下一章节聊聊sobel边缘检测。还是一样sobel是谁不重要重要的是要用他去完成sobel检测。敬请期待。