Skip to content

Instantly share code, notes, and snippets.

# Sierra 2-4a dithering filter
Sierra24aConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 2:(dim(a)[1]-2)){
for(j in 2:(dim(a)[2]-2)){
P <- trunc(a[i,j]+0.5)
e <- a[i,j] - P
# Jarvis-Judice-Ninke dithering
JJNConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 2:(dim(a)[1]-2)){
for(j in 2:(dim(a)[2]-2)){
P <- trunc(a[i,j]+0.5)
e <- a[i,j] - P
# Bill Atkinson dithering
AtkinConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 2:(dim(a)[1]-2)){
for(j in 2:(dim(a)[2]-2)){
P <- trunc(a[i,j]+0.5)
e <- a[i,j] - P
# Floyd-Steinberg dithering
# the 2-dimensional convolution function
FloydConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 1:(dim(a)[1]-1)){
for(j in 1:(dim(a)[2]-1)){
P <- trunc(a[i,j]+0.5)
# Floyd-Steinberg dithering
# the 2-dimensional convolution function
FloydConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 1:(dim(a)[1]-1)){
for(j in 1:(dim(a)[2]-1)){
P <- trunc(a[i,j]+0.5)
# the 2-dimensional convolution function
FloydConvolution <- function(a){
c <- matrix(0, nrow=dim(a)[1], ncol=dim(a)[2])
for(i in 1:(dim(a)[1]-1)){
for(j in 1:(dim(a)[2]-1)){
P <- trunc(a[i,j]+0.5)
e <- a[i,j] - P
a[i,j] <- P